System:类中的方法和属性都是静态的,system类不能被实例化。
(一) 字段:in 标准输入,默认是控制台;out标准输出默认是键盘;err标准错误输出。
(二)最常用的几个静态方法:
(1)arraycopy(Object src,int srcPro,,Object dest,int desPos,int length)从指定原数组中复制一个数组开始,到目标数组的指定位置结束。
(2)currentTimeMillis() 返回以毫秒为单位的当前时间。
(3)exit()终止当前正在运行的java虚拟机。
(4)gc()运行垃圾回收器。强制终止动作——》调用finalize()。
gc():new创建的对象所占用的内存。
finalize()非new创建的内存。
java虚拟机采用停止-复制(复制对象,转换成堆)和标记-清扫(遍历所有的引用,进而找出所有存活对象)两种方式处理垃圾。
(5)Properties的getProperties()确定当前系统属性。Properties类表示了一个持久的属性集。Properties可保存在流中或从从流中加载。属性列表中每个键及其对应值都是一个字符串。一个属性列表可包含另一个属性列表作为他的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。因为Properties继承了Hashtable,所以可对Properties对象应用put和putAll()。但不建议使用这两方法,因为他们允许调用者插入器键或值不是String的项。相反,应该使用setProperty方法。如果在“不安全”的Properties对象(即包含非String的键)上调用propertyNames或list方法,则该调用失败。
获取虚拟机加载程序的运行情况:
package com.heima;
import java.util.*;
public class Demo_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Properties prop=System.getProperties();
//因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。
//那么可以通过map的方法取出集合中的元素。
//在系统中定义一些特有信息
//System.setProperty("mykey", "myvalue");
//获取指定属性信息
// String value1=System.getProperty("os.name");
for(Object obj:prop.keySet())
{
String value=(String)prop.get(obj);
System.out.println(obj+":"+value);;
}
}
}
总结:从这个程序可以看出JVM是跨平台的,每一个不同的os都装有JVM。所谓的跨平台是以不同版本的JVM实现的。不同平台有不同的JVM,而不同的版本是根据对应的硬件以及软件平台设计的。这些不同版本的JVM能识别相同的.class文件。就像java给不同版本的平台请了个翻译一样。java虚拟机其实是个翻译器,java的class文件里面保存的是java字节码。而把class文件放到不同的平台下运行的时候,就由针对不同平台的虚拟机翻译成那个平台认识的操作。