开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情
常用System
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前运行的Java虚拟机 |
public static long currentTimeMillis() | 返回当前系统的时间毫秒值形式 |
public static void arraycopy (数据源数组,起始索引,目的地数组,起始索引,拷贝个数) | 数组拷贝 |
计算机时间中的原点
原点:1970年1月1日 00:00:00 起因:1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会。开始着手创造一个全新的革命性的操作系统 他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。 随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX 所以,1970年1月1日算是C语言的生日
exit退出
- 方法的形参
- 0:表示当前虚拟机是正常停止
- 非0:表示当前虚拟机异常停止
public static void main(String[] args) {
System.exit(0);
System.out.println("我在运行吗?");
}
currentTimeMillis
这表示从1970.1.1开始到现在的毫秒数
long l = System.currentTimeMillis();
System.out.println(l);
这可以用来比较解决同一问题不同算法的效率问题
以判断素数为例子
package SystemTest;
public class SystemDome02 {
//统计0~10000有多少个素数
public static void main(String[] args) {
long lowTimeStart = System.currentTimeMillis();
System.out.println("用较差的方法做出来的个数是:" + lowIntPrime());
long lowTimeEnd = System.currentTimeMillis();
System.out.println("差方法耗时:" + (lowTimeEnd - lowTimeStart) + "毫秒");
long betterTimeStart = System.currentTimeMillis();
System.out.println("用较好的方法做出来的个数是:" + betterIntPrime());
long betterTimeEnd = System.currentTimeMillis();
System.out.println("较好的方法耗时:" + (betterTimeEnd - betterTimeStart) + "毫秒");
}
//最朴素的做法
public static int lowIntPrime() {
int res = 0;
for (int i = 0; i < 10000; i++) if (lowIntPrimeFunction(i)) res++;
return res;
}
public static boolean lowIntPrimeFunction(int x) {
if (x < 2) return false;
for (int i = 2; i < x; i++) if (x % i == 0) return false;
return true; }
//根号n的复杂度
public static int betterIntPrime() {
int res = 0;
for (int i = 0; i < 10000; i++) if (betterIntPrimeFunction(i)) res++;
return res;
}
public static boolean betterIntPrimeFunction(int x) {
if (x < 2) return false;
for (int i = 2; i <= x / i; i++) if (x % i == 0) return false;
return true; }
}
结果展示:
我们可以看到,时间差十倍!同时看代码大家也可以理解时间差以及如何计算耗时
拷贝数组
//拷贝数组
int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] arr2 = new int[10];
System.arraycopy(arr1, 0, arr2, 0, 10);
//测试:
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i] + " ");
}
- 参数解释:
- 参数一:数据源 要拷贝的数据从哪个数组而来
- 参数二:从数据源数组中的第几个索引开始拷贝
- 参数三:目的地 我要把数据拷贝到哪个数组中
- 参数四:目的地数组的索引
- 参数五:拷贝的个数
注意点
- 如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错
- 在拷贝的时候需要考虑数组的长度,如果超出范围也会报错
- 如果数据源数组和目的地数组都是引用数据类型,那么子类型可以赋值给父类类型