为什么有系统类
我们知道java具有平台无关的特性,但是不同的平台上面的约定又是有区别的
举个简单的例子,换行符在linux下是/r/n,在windows下是/n,要处理这个差别我们只能通过调用底层的系统接口获取系统的相关信息。
庆幸的是java为我们提供了这样的系统类。java提供了两个类:
- System类
- Runtime类
这两个类可以用来与程序的运行平台进行交互。
关于System类
System类代表当前java的运行平台,程序不能创建system类的对象,System类对象提供了一些类Field和类方法,运行直接通过类名System调用。
System类主要提供了一下功能:
代表标准输入输出和错误输出的类Field
提供一些静态方法用于访问环境变量和系统属性
提供了加载文件和动态链接库的方法
此外System类还提供两个获取当前时间的方法:currentTimeMills()和nanoTime()方法,他们都返回时间戳区别是currentTimeMills一几十毫秒为单位,而nanoTime以纳秒作为计时单位。
提供了一个identityHashCode()方法,该方法用来唯一的标识对象
public class system {
public static void main(String[] args){
//获取系统所有的环境变量
Map<String,String> env = System.getenv();
for(String name:env.keySet()){
System.out.println(name+":"+env.get(name));
}
//获取指定环境变量的值
System.out.println(System.getenv("JAVA_HOME"));
//获取所有系统的属性
Properties props = System.getProperties();
//将所有的系统属性保存到props.txt文件中
//props.store(new FileOutputStream("props.txt"), "System Properties");
//输出特定的系统属性
System.out.println(System.getProperty("os.name"));
}
}
关于Runtime类
Runtime类代表了java的运行时环境,每个java程序都有一个与之对应的Runtime的示例,和System类一样,Runtime也提供了gc()和runFinalization()方法来通知系统进行垃圾回收。
exp:
public static void main(String[] args){
Runtime rt = new Runtime();
System.out.println(rt.availableProcessors());//处理器数量
System.out.println(rt.freeMemory());//空闲内存数
System.out.println(rt.totalMemory());//总内存数
System.out.println(rt.maxMemory());//最大内存数
}
除了这个之外,Runtime类处理可以访问JVM相关信息之外,还提供了一个功能就是可以直接执行操作系统的命令
public static void main(String[] args){
Runtime rt = new Runtime.getRuntime();
rt.exec("notepad.exe");
}
网友评论