System
System类包含几个有用的类字段和方法。它不能被实例化。System类提供的System包括标准输入,标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及用于快速复制阵列的一部分的实用方法.
public static void exit(int status) 终止当前运行的Java虚拟机
public static long currentTimeMillis() 返回当前系统的时间毫秒值形式
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝
在Java中,延续了C语言的设定,计算机中的时间原点为:1970年1月1日 00:00:00
那么,currentTimeMillis()的作用就是,从时间原点开始到代码运行,时间总共过去了多少毫秒。
接下来通过代码来依次实现各方法:
package com.itheima.system;
public class SystemDemo01 {
public static void main(String[] args) {
//exit() 终止当前运行的Java虚拟机
/*方法的形参
* 状态码:
* 0:表示当前虚拟机是正常停止
* 非0:表示当前虚拟机异常停止*/
System.exit(0);
System.out.println("看我执行没");
//当我们需要把整个程序结束的时候,就可以调用这个方法
}
}
运行结果:
对于exit(),它有一个参数,当这个参数为0的时候,那么当前虚拟机就是正常停止,如果这个参数为非0时,那么当前虚拟机就是异常停止。
package com.itheima.system;
public class SystemDemo02 {
public static void main(String[] args) {
//currentTimeMillis() 返回当前系统的时间毫秒值形式
long l = System.currentTimeMillis();
System.out.println(l);
}
}
运行结果:
这个结果每一次运行的结果都不一样,因为每一次使用时,当前的时间都在变化。
那么这个方法有什么用呢?它可以用于统计一段代码的执行时间。
package com.itheima.system;
public class SystemDemo02 {
public static void main(String[] args) {
//currentTimeMillis() 返回当前系统的时间毫秒值形式
long start = System.currentTimeMillis();
int sum = 0;
for (int i=0;i<1000000000;i++){
sum += i;
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
那么这段代码的运行时间就是371毫秒。
package com.itheima.system;
public class SystemDemo03 {
public static void main(String[] args) {
//arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 拷贝数组
int[] arr1 = {1,2,3,4,5,6,7,8,9,10};
int[] arr2 = new int[10];
int[] arr3 = new int[10];
//把arr1数组拷贝到arr2中
System.arraycopy(arr1,0,arr2,0,10);
//验证(遍历arr2数组)
for(int i : arr2){
System.out.print(i+" ");
}
System.out.println();
//把arr1数组拷贝到arr3中
System.arraycopy(arr1,0,arr3,0,5);
//验证(遍历arr3数组)
for(int i : arr3){
System.out.print(i+" ");
}
}
}
运行结果:
对于arraycopy()里面的参数:
参数一:数据源,要拷贝的数据从哪个数组而来
参数二:从数据源数组中的第几个索引开始拷贝
参数三:目的地,我要把数据拷贝到哪个数组中
参数四:目的地数组的索引
参数五:拷贝的个数
#细节拓展:
如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错。
在拷贝的时候需要考虑数组的长度,如果超出范围也会报错。
如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型。