目录
System类
1.定义
2.预备知识
3.常用方法
(1).currentTimeMillis返回系统时间
(2).exit终止虚拟机
(3).arraycopy拷贝数组
System类
1.定义
Java System类是一个提供与系统相关的方法
- System类所在包为java.lang包,因此在使用的时候不需要进行导包。并且System类被final修饰了,因此该类是不能被继承的。
- 在API文档中没有体现可用的构造方法,因此我们就不能直接通过new关键字去创建System类的对象。
- System类中的方法都是静态的,因此在使用的时候我们可以直接通过类名去调用
2.预备知识
计算机中的时间原点
1970年1月1日0点0分0秒
原因:
1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机开始着手创造一个全新的革命性的操作系统。他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。所以,1970年1月1日算C语言的生日。
我国位于东八区所以在中国的操作系统的计算机时间原点是1970年1月1日8点0分0秒。
时间进制:
- 1秒=1000毫秒
- 1毫秒=1000微秒
- 1微秒=1000纳秒
此之外还有皮秒、飞秒、阿托秒、仄(ze)秒、幺秒,它们之间的进制也是1000。
3.常用方法
(1).currentTimeMillis返回系统时间
返回当前系统的时间以毫秒值的形式
public static long currentTimeMillis()
如图输出1656569533325,,表示从时间原点1970.1.1.8到运行当前代码度过的时间,单位毫秒
注:快捷键Alt+v生成变量左侧的一个接收值,比如该代码中输入System.currentTimeMillis()后点击快捷键自动生成“long l = ”。
应用:
统计某一段代码的执行时间。此时我们可以在执行这段代码之前获取一次时间,在执行完毕以后再次获取一次系统时间,然后计算两个时间的差值,这个差值就是这段代码执行完毕以后所需要的时间。
public class SystemDemo2 {
public static void main(String[] args) {
//判断1~100000之间有多少个质数
long start = System.currentTimeMillis();
for (int i = 1; i <= 100000; i++) {
boolean flag = isPrime2(i);
if (flag) {
System.out.println(i);
}
}
long end = System.currentTimeMillis();
//获取程序运行的总时间
System.out.println(end - start); //方式一:1514 毫秒 方式二:71毫秒
}
//以前判断是否为质数的方式
public static boolean isPrime1(int number) {
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
//改进之后判断是否为质数的方式(效率高)
public static boolean isPrime2(int number) {
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
(2).exit终止虚拟机
终止当前运行的java虚拟机
public static void exit(int status)
方法的形参是一个状态码
- 0:表示虚拟机正常停止
- 非0:表示虚拟机异常停止,通常情况下写1
应用:当我们需要把整个程序结束时,就可以调用这个方法。
(3).arraycopy拷贝数组
拷贝数组
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
// src: 源数组(被拷贝数组)
// srcPos: 源数值的开始位置(从第几个索引开始被拷贝)
// dest: 目标数组(源数组要拷贝到目标数组中)
// destPos: 目标数组开始位置(从哪里接受被拷贝数组的元素值)
// length: 要复制的元素个数
注意:
- 如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错
- 在拷贝的时候需要考虑数组的长度,如果超出范围也会报错
- 如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型