学习目标
认识System类及一些常用方法。
掌握垃圾对象的回收操作。
了解对象的生命周期。
System类
System类是一些与系统相关的属性和方法的集合,而且在System类中所有的属性都是静态的,要想引用这些属性和方法,直接使用System类调用即可。
public static void exit(int status) 系统退出 ,如果status为0就表示退出。
public static void gc() 运行垃圾收集机制,调用的是Runtime类中的gc方法。
public static long currentTimeMillis() 返回以毫秒为单位的当前时间。
public static void arraycopy(Object src,int srcPos, Object dest,int desPos,int length) 数组拷贝操作
public static Properties getProperties() 取得当前系统的全部属性。
public static String getProperty(String key) 根据键值取得属性的具体内容。
System类除了可以进行内容的输出外,还可以通过方法取得一个操作的具体时间。如下所示:
public class SystemDemo01{
public static void main(String args[]){
long startTime = System.currentTimeMillis() ; // 取得开始计算之前的时间
int sum = 0 ; // 声明变量
for(int i=0;i<30000000;i++){ // 执行累加操作
sum += i ;
}
long endTime = System.currentTimeMillis() ; // 取得计算之后的时间
// 结束时间减去开始时间
System.out.println("计算所花费的时间:" + (endTime-startTime) +"毫秒") ;
}
};
除了此功能外还可以列出本机的全部系统属性:
public class SystemDemo02{
public static void main(String args[]){
System.getProperties().list(System.out) ; // 列出系统的全部属性
}
};
-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\MyEclipse_anzhuang\binary\com.sun....
java.vm.version=11.3-b02
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:\Users\Administrator\Desktop\myEcli...
java.runtime.version=1.6.0_13-b03
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\MyEclipse_anzhuang\binary\com.sun....
os.arch=x86
java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\
line.separator=
java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows Vista
sun.jnu.encoding=GBK
java.library.path=D:\MyEclipse_anzhuang\binary\com.sun....
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot Client Compiler
os.version=6.2
user.home=C:\Users\Administrator
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=GBK
java.specification.version=1.6
user.name=Administrator
java.class.path=C:\Users\Administrator\Desktop\myEcli...
java.vm.specification.version=1.0
sun.arch.data.model=32
java.home=D:\MyEclipse_anzhuang\binary\com.sun....
java.specification.vendor=Sun Microsystems Inc.
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.6.0_13
java.ext.dirs=D:\MyEclipse_anzhuang\binary\com.sun....
sun.boot.class.path=D:\MyEclipse_anzhuang\binary\com.sun....
java.vendor=Sun Microsystems Inc.
file.separator=\
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+m...
此处取得的是全部的属性,如果现在只需要取几个固定属性的话,则就可以通过以下取得:
public class SystemDemo03{
public static void main(String args[]){
System.out.println("系统版本:" + System.getProperty("os.name")
+ System.getProperty("os.version")
+ System.getProperty("os.arch")) ;
System.out.println("系统用户:" + System.getProperty("user.name")) ;
System.out.println("当前用户目录:" + System.getProperty("user.home")) ;
System.out.println("当前用户工作目录:" + System.getProperty("user.dir")) ;
}
};
垃圾对象的回收
一个对象如果不使用,则肯定要等待进行垃圾收集,垃圾收集可以自动调用也可以手工调用,手工调用的时候就是调用System.gc()或者Runtime.getRuntime().gc()。但是,如果一个对象在回收之前需要做一些收尾工作,则就必须覆写Object类中的:
protected void finalize() throws Throwable
在对象被回收之前调用,以处理对象回收前的若干操作,例如释放资源等等。
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age;
}
public String toString(){ // 覆写toString()方法
return "姓名:" + this.name + ",年龄:" + this.age ;
}
public void finalize() throws Throwable{ // 对象释放空间时默认调用此方法
System.out.println("对象被释放 --> " + this) ;
}
};
public class SystemDemo04{
public static void main(String args[]){
Person per = new Person("张三",30) ;
per = null ; // 断开引用
System.gc() ; // 强制性释放空间
}
};
只有断开引用赋值为null并调用gc()的时候才可以发现对象被回收释放。当然如果不调用,则系统也会在一定的时间内进行自动回收。
对象的生命周期如下:
总结:
System类本身提供的静态属性都是与IO操作有关的。在IO操作中还会有更多System类的使用,可以使用system类取得计算时间,以及通过gc()方法进行垃圾收集 此方法是包装了Runtime类中的gc()方法。