System 类基本使用
System.out.println()本身就是一个系统提供好的类,而且out.println()方法也是经常使用到的。
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 destPos,int length) 数组拷贝操作
public static Properties getProperties() 取得当前的系统全部属性
public static String getProperty(String key) 根据键值取得属性的具体内容
System类除了可以进行内容的输出外,还可以通过方法取得一个操作的计算时间:
public classSystemDemo01{public static voidmain(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) +"毫秒") ;
}
};
View Code
列出本机的全部属性:
public classSystemDemo02{public static voidmain(String args[]){
System.getProperties().list(System.out) ;//列出系统的全部属性
}
};
View Code
列出的属性:
-- listing properties --java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\Work\Java\jdk1.8.0_20\jre\bin
java.vm.version=25.20-b23
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=java.vm.specification.name=Java Virtual Machine Specification
user.dir=G:\eclipse\workspace\Test
java.runtime.version=1.8.0_20-b26
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\Work\Java\jdk1.8.0_20\jre\lib\endo...
os.arch=amd64
java.io.tmpdir=C:\Users\lenovo\AppData\Local\Temp\La...
line.separator=java.vm.specification.vendor=Oracle Corporation
user.variant=os.name=Windows 8.1sun.jnu.encoding=GBK
java.library.path=D:\Work\Java\jdk1.8.0_20\bin;C:\windo...
java.specification.name=Java Platform API Specification
java.class.version=52.0sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=6.3user.home=C:\Users\lenovo
user.timezone=java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=GBK
java.specification.version=1.8user.name=lenovo
java.class.path=G:\eclipse\workspace\Test\bin
java.vm.specification.version=1.8sun.arch.data.model=64java.home=D:\Work\Java\jdk1.8.0_20\jre
sun.java.command=Test
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_20
java.ext.dirs=D:\Work\Java\jdk1.8.0_20\jre\lib\ext;...
sun.boot.class.path=D:\Work\Java\jdk1.8.0_20\jre\lib\reso...
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64
View Code
如果现在只需要取得几个固定属性的话,则就可以通过以下取得:
public classSystemDemo03{public static voidmain(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")) ;
}
};
View Code
垃圾对象的回收
一个对象如果不使用,则肯定要等待进行垃圾收集,垃圾收集可以自动调用也可以手动调用,手工调用的时候就是调用System.gc()或者Runtime.getRuntime().gc()。但是,如果一个对象在回收之前需要做一些收尾的工作,则就必须覆写Object类中:
protected void finalize() throws Throwable
在对象被回收之前进行调用,以处理对象回收前的若干操作,比如释放资源等等。
classPerson{privateString name ;private intage ;public Person(String name,intage){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 classSystemDemo04{public static voidmain(String args[]){
Person per= new Person("张三",30) ;
per= null ; //断开引用
System.gc() ; //强制性释放空间
}
};
View Code
只有强制性调用gc()的时候才可以发现对象被回收,当然,如果不调用,则系统也会在一定时间内自动进行回收。
总结:System类本身提供的静态属性都是与IO操作有关的。