Java System类、RunTime类、Object类、垃圾回收
System类
System类代表当前操作系统,System类提供了静态方法getProperty(String key)获取指定的环境变量、系统属性。
System.in表示标准输入,通常是键盘
System.out表示标准输出,通常是显示器
Runtime类
Runtime类代表当前Java程序的运行时环境。每个Java程序都有一个与之对应的Runtime实例。
Runtime类可以获取JVM的相关信息:
//获取运行时对象 Runtime rt=Runtime.getRuntime(); //获取可用最大内存数,可用最大内存数远远大于总内存数 System.out.println(rt.maxMemory()); //获取总内存数 System.out.println(rt.totalMemory()); //空闲内存数 System.out.println(rt.freeMemory());
以上信息均为JVM的信息,并非OS的信息。
Runtime类可以直接启动一个单独的进程,来执行一个程序:
//获取运行时对象 Runtime rt=Runtime.getRuntime(); //如果path环境变量中有该路径,直接写程序文件名即可(比如系统自带的记事本) rt.exec("notepad.exe"); //如果path环境变量中没有该路径,则必须写绝对路径 rt.exec("C:\\Program Files (x86)\\360\\360zip\\360zip.exe");
Object类
Object类是所有类的基类。
Object类的方法:
boolean equals(Object obj) 判断两个对象是否相等,根据内存地址来判断,相当于==。String类重写了此方法,字符串相同,就认为两个对象相等。
int hashCode() 返回该对象的hash码值,根据地址计算,地址相同(指向内存中的同一个对象)的hash码值才相同。引用型变量才有此方法。
但很多类都重写了hashCode()方法,只要两个对象的值相同,就认为hashCode相同,和String的equals()差不多。
Object类提供了一个clone()方法,用于clone对象。此方法是protected,只能被子类继承、重写。
实现对象的克隆:
//需要实现Cloneable接口
class Test implements Cloneable{
//.......其他成员
//实现clone方法,返回值为本类的对象
public Test clone() throws CloneNotSupportedException {
//调用基类的clone()实现克隆,但返回值是Object类型,需要强制类型转换
return (Test)super.clone();
}
}
class test1{
Test test1=.......; //创建一个对象
Test test2=test1.clone();
}
这只是一种浅克隆,返回该对象的一个副本,简单地复制该实例变量的值,如果是引用类型,复制的是该引用,即指向内存中的同一个对象。比系统默认的clone方法效率要高得多。
强制系统进行垃圾回收的两种方式:
1、使用System类的静态方法:
System.gc();
2、先使用Runtime的静态方法getRuntime()获取实例对象,再使用Runtime实例的实例方法:gc()
Runtime.getRuntime().gc();
均只是通知系统进行垃圾回收,系统是否进行垃圾回收并不确定,但大部分时候都会有所效果。