System类:系统类,主要获取系统的属性数据,还有标准的输入,输出及错误输出流
主要介绍一些常用的方法:
1.数组拷贝
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组src中复制一个数组,复制从指定的位置srcPos开始,到目标数组dest的指定位置destPos开始,复制的数组的长度为length,应用如下:
int[] src = {12,23,34,45};
int[] dest = new int[3];
System.arraycopy(src,1,dest,0,3);
2.currentTimeMillis()
返回以毫秒为单位的当前时间。
返回:当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
System.out.println(System.currentTimeMillis());
3.exit(int status)
终止当前正在运行的虚拟机,非0的状态码表示异常终止
System.exit(0);
System.exit(1);
0或者非0状态码都可以退出JVM,对于用户来说其实没有任何区别,对于操作系统来说可就不一样,如果返回状态码为非0,则为异常终止的软件,操作系统会做成报告发送给微软从而将来实现操作系统的升级更新,从而使得操作系统更加稳定性
一般在catch语句中的退出传递非0状态码,正常语句中退出传递0状态码
4.gc()
运行垃圾回收器,这种描述不精准,实际上是建议JVM赶快启动垃圾回收器回收垃圾,至于回收器到底何时去回收对象,我们是不能预判的
finalize() :当一个对象被垃圾回收器回收时,会首先调用对象的该方法
class Person{
private String name;
public Person(String name){
this.name = name;
}
public void finalize()throws Throwable{
super.finalize();
System.out.println(name+"被回收了...");
}
}
for (int i=0;i<4;i++){
new Person("Thia"+i);
}
执行上述代码发现并没有进行垃圾回收,这是因为垃圾回收器还没来及启动,程序就执行结束了,所以修改下代码
for (int i=0;i<4;i++){
new Person("Thia"+i);
System.gc();//建议马上启动垃圾回收器
}
输出结果:
Thia0被回收了…
Thia3被回收了…
Thia1被回收了…
Thia2被回收了…
此时的输出结果更能验证我们之前所说的,垃圾回收器的执行时间是不能预判的,虽然调用了System.gc()方法,但是只是一种建议,并不能得知JVM是何时对该对象执行的垃圾回收处理
5.getenv(String name)
获得指定的环境变量值
如下列代码可以打印我们安装JDK时配置的环境变量
System.out.println(System.getenv("path"));
System.out.println(System.getenv("JAVA_HOME"));
6.getProperties()
获取系统的所有属性:比如当前的操作系统
Properties properties = System.getProperties();
Properties是一个属性集,可以利用其list(java.io.PrintStream out) 方法将属性列表输出到指定的输出流。
properties.list(System.out);
输出结果就是键值对,当然也可以通过传参数即某一属性名,获得某属性名相应的属性值,如
String name = System.getProperty("os.name");
比如开发的一款软件不支持Windows 10,那么软件中就可以通过上述语句去获得当前系统,如果是Windows 10则提示用户当前软件不支持该系统!
RunTime类:该类主要代表了当前应用程序运行的环境,每个Java应用程序都有自己的RunTime类实例,应用程序不能创建自己的应用实例,但可以通过RunTime类的getRunTime方法获得当前运行实例
1.getRuntime()
返回与当前 Java 应用程序相关的运行时对象
Runtime runTime = Runtime.getRuntime();
2.exec(String command)
在单独的进程中执行指定的字符串命令,即可以通过该方法打开其他应用程序,只需要将应用程序的路径传递给该方法即可
Process process = runTime.exec("D:\\SoftWare\\WeChat\\WeChat.exe");
process.destroy(); //杀掉该进程,即杀掉打开的程序
3.freeMemory()
返回 Java 虚拟机中的空闲内存量,以字节为单位
4.maxMemory()
返回 Java 虚拟机试图使用的最大内存量,即虚拟机想要被分配的内存量
5.totalMemory()
返回 Java 虚拟机中的内存总量,即虚拟机实际被分配的内存量
Java虚拟机可以管理的内存量是64M,但是JVM做了优化,如果一启动就被分配了64M,但是实际使用只有3M,那么就认为是浪费了61M,所以从JDK 1.7以后,只被分配十几M管理,如果不够用,再去系统要求分配更多的内存,是弹性增长的
Random类:产生随机数的类
public int nextInt(int n):返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(包括)之间均匀分布的 int值
例如实现一个产生验证码的功能:其中base数组是产生验证码的基数组
static String getRandomNum(char[] base){
Random random = new Random();
StringBuilder ran = new StringBuilder();
for(int i=0;i<4;i++){
int index = random.nextInt(base.length);
ran.append(base[index]);
}
return ran.toString();
}