Home >Java >javaTutorial >Detailed explanation of what are the commonly used class libraries for JAVA development
Scanner
Scanner是一个基于正则表达式的文本扫描器,它可以从文件,输入流,字符串中解析出基本类型数值和字符串值。
Scanner使用时要导入import java.util.Scanner;
如果要使用文件,则要导入import java.io.File;
下面举两个例子:
Scanner sc=new Scanner(System.in); while(sc.hasNextLong()) { System.out.println(sc.nextLong()); }
上面的代码效果就是可以持续的输入long型数据,以空格间断,摁下回车键后会将这些数据依次输出。
如果sc.hasNextLong()改为sc.hasNext(),输出部分改成sc.next()就是字符串,也可以改成其它类型。
当输入类型与要求不符时,这部分程序便执行完毕,程序会执行下一部分
Scanner sc=new Scanner(new File("C:\\abc.txt")); //sc.useDelimiter("\\|"); while( sc.hasNextLine()) { System.out.println(sc.nextLine()); }
如果使用文件,需要在主函数后面加上 throws Exception
另外,可以通过sc.useDelimiter()来设置分隔符,设置分隔符后,默认分隔符失效
System类代表了当前JAVA程序的运行平台,程序不能创建System对象。不过可以通过System直接调用一些类变量和类方法。
首先,System.gc()可以建议系统进行垃圾回收,而runFinalization()方法可以让系统启动Finalization()方法
下面是获取系统所有环境变量的代码(以下代码需要导入java.util.Map)
Map<String,String> env=System.getenv(); for(String name:env.keySet()) { System.out.println(name+"-------->"+env.get(name)); }
另外就是获取系统属性的代码(需要导入java,util.Properties)
Properties props=System.getProperties(); for(Object name:props.keySet()) { System.out.println(name+"-------->"+props.getProperty((String) name)); }
System.currentTimeMillis()和System.nanoTime()都可以获取时间,返回值为一个long型整数,都为与UTC1970年1月1日午夜的时间差,前者是以毫秒为单位,后者以纳秒为单位。这两个方法在很多系统上会出错——因为有些系统是以几十毫秒为单位计算时间的。
System类提供了一个identityHashCode(Object object)方法,这个方法会返回一个以地址计算得到了HashCode()值,由于hashCode()方法在某些类里被重写了,所以有时候并不靠谱,但identityHashCode(Object object)方法不同,如果其值一致,必为同一个对象,下面用代码举例:
String str0="hello"; String str1=new String("hello"); String str2=new String("hello"); String str3=str2; System.out.println("str0\t"+str0.hashCode()+"\t"+System.identityHashCode(str0)); System.out.println("str1\t"+str1.hashCode()+"\t"+System.identityHashCode(str1)); System.out.println("str2\t"+str2.hashCode()+"\t"+System.identityHashCode(str2)); System.out.println("str3\t"+str3.hashCode()+"\t"+System.identityHashCode(str3));
以下是输出结果
str0 99162322 1296263453 str1 99162322 78255756 str2 99162322 984499128 str3 99162322 984499128
Runtime类代表java程序的运行时环境,每一个java程序都有一个与之对应的Runtime对象,应用程序不能创建Runtime实例,不过可以getRuntime()方法获得与之对应的Runtime对象。
与System类似,Runtime也有gc()和runFinalization()方法。
此外还有load(String filename)方法和loadLibrary(String libname)方法用于加载文件和动态连接库。
下面是一个Runtime的使用实例
Runtime rt=Runtime.getRuntime(); System.out.println("处理器数量"+rt.availableProcessors()); System.out.println("空闲内存量"+rt.freeMemory()); System.out.println("总内存数"+rt.totalMemory()); System.out.println("最大内存数"+rt.maxMemory());
处理器数量4 空闲内存量126562888 总内存数127926272 最大内存数1890582528
此外,Runtime可以直接单独启动一个进程来运行系统操作命令
rt.exec("");引号之间放需要执行的命令
Object是所有类、数组、枚举类的父类,也就是说,JAVA允许任何类的对象赋值给Object型的引用。
这里说一下toString()方法,该方法运行时返回“运行时类名@十六进制hashCode值”格式的字符串。
java提供了一个protected修饰的clone()方法用于实现对象的自我克隆,就是得到一个当前对象的副本,两者之间完全隔离。
要想实现克隆,该类要继承Cloneable接口(该接口里没有定义任何方法);随后该类实现自己的Clone()方法,在实现过程中要调用父类的Clone()方法
class Address { String detail; public Address(String str) { this.detail=str; } } class User implements Cloneable { int age; Address address; public User(int age) { this.age=age; this.address=new Address("江苏南京"); } public User clone() throws CloneNotSupportedException { return (User)super.clone(); } } public class Test { public static void main(String []args) throws CloneNotSupportedException {User u1=new User(23); User u2=u1.clone(); System.out.println(u1==u2); System.out.println(u1.address==u2.address); } }
结果是
false
true
也就是说,克隆的对象不是原来的对象,尽管数值完全一样。
此外,clone()方法只是浅克隆,它只克隆该对象所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆,也就是引用类型变量克隆后指向的对象和之前的是同一个。
JAVA7新增了Objects工具类,该类主要是保证“空指针“安全问题的(当然了,JAVA没有指针,但是大致是这么个意思)
如一个引用变量为null时,直接调用其toString()方法会引起NullPointerException,而使用Objects类的toString(Object object)就不会,若object为null时,会直接输出“null”字符串。
JAVA为工具类命名的习惯就是加一个字母s
String是不可变类,一旦创建,不可改变,直到销毁。
StringBuffer这是提供一个字符序列可变的字符串,可以通过append(),insert().reverse(),setCharAt(),setLength()方法来改变,一旦生成最终格式,可以调用toString()方法将其转换为字符串。
StringBuilder是JDK1.5新增的,与StringBuffer的区别在于没有考虑进程安全,所以效率略高,相同情况下优先使用StringBuilder
String类有contentEquals(StringBuffer bf)方法,用于对比内容,相同返回true
这三个类的方法是在太多了,实用的也很多,自己去看文档吧
海量的方法,多到了没法列举了,基本上包含了数学所有的运算,还是自己看文档吧
简单的说,java中的double对象会发生精度丢失(就是小数点后N位可能出现乱七八糟的数字),而BigDecimal类可以解决这个问题。
首先建议使用String为参数的构造器,如果必须使用double型参数,则使用BigDemical.valueOf(double value)方法,不要将double型数直接传进去
BigDecimal bd=BigDecimal.valueOf(0.05); BigDecimal bs=new BigDecimal("0.01"); BigDecimal bb=new BigDecimal(0.01); System.out.println(bd.add(bs)); System.out.println(bd.add(bb));
结果是
0.06
0.06000000000000000020816681711721685132943093776702880859375
The above is the detailed content of Detailed explanation of what are the commonly used class libraries for JAVA development. For more information, please follow other related articles on the PHP Chinese website!