目录
- Math
- System
- Runtime
Math
Math是一个帮助我们用于进行数学计算的工具类,私有化构造方法,所有的方法都是静态的,所以调用的时候直接用类名.方法就可以了。
- 成员变量
| 方法名 | 说明 |
|---|---|
| public static int abs(int a) | 获取参数绝对值 |
| public static double ceil(double a) | 向上取整 |
| public static double floor(double a) | 向下取整 |
| public static int round(float a) | 四舍五入 |
| public static int max(int a,int b) | 获取两个int值中的较大值 |
| public static int min(int a,int b) | 获取两个int值中的较小值 |
| public static double pow(double a,double b) | 返回a的b次幂的值 |
| public static double sqrt(double a) | 返回a的平方根 |
| public static double cbrt(double ab) | 返回a的立方根 |
下面我们来实操一下吧:
abs获取参数的绝对值:
System.out.println(Math.abs(88)); // 88
System.out.println(Math.abs(-88)); // 88
cail 向上取整
System.out.println(Math.ceil(12.34)); // 13.0
System.out.println(Math.ceil(-12.34)); // -12.0
floor 向下取整
System.out.println(Math.floor(12.34)); // 12.0
System.out.println(Math.floor(-12.34)); // -13.0
round 四舍五入
System.out.println(Math.round(12.34)); // 12
System.out.println(Math.round(-12.34)); // -12
max 获取两个int值中的较大值
System.out.println(Math.max(12.34,15.66)); // 15.66
min 获取两个int值中的较小值
System.out.println(Math.min(12.34,15.66)); // 12.34
pow 返回a的b次幂的值
System.out.println(Math.pow(8,2)); // 64
sqrt 返回a的平方根
System.out.println(Math.sqrt(4)); // 2
cbrt 返回a的立方根
System.out.println(Math.cbrt(8)); // 2
下面我们来做个案例看一下吧:
- 判断一个数是不是质数:
我们先来看一下之前的写法:
public static boolean isPrime1(int number){
for (int i = 2; i < number; i++) {
if(number % i == 0){
return false;
}
}
return true;
}
我们再来看一下使用Math方法:
public static boolean isPrime2(int number){
for (int i = 2; i < Math.sqrt(number); i++) {
if(number % i == 0){
return false;
}
}
return true;
}
是不是感觉这种的写法比较麻烦呢,其实不是的,这种的效率是最高的,我们下面会学到一个时间的API,就知道他的效率怎么高啦。
System
System也是一个工具类,提供了一些与系统相关的方法。我们一起往下看吧:
| 方法名 | 说明 |
|---|---|
| public static void exit(int status) | 终止当前运行的 Java 虚拟机 |
| public static long currentTimeMillis() | 返回当前系统的时间毫秒值形式 |
| public static void arraycopy(数据源数组,起始索数组拷贝引,目的地数组,起始索引,拷贝个数) | 数组拷贝 |
我们下面来实操一下吧:
exit(int status):终止当前运行的 Java 虚拟机
System.exit(0);
System.out.println("看看我执行了吗?");
我们来运行看一下:
可以看到他并没有执行下面的那行代码,而是终止掉了虚拟机。下面我们来说一下他的参数吧:
方法的形参:状态码:
0:表示当前虚拟机是正常停止
非0:表示当前虚拟机异常停止
currentTimeMillis:返回当前系统的时间毫秒值形式
是什么意思呢?其实呀计算机是有时间原点的,而时间原点是1970年1月1日 8:00:00他就是表示从时间原点到现在时间过了多久,我们来运行看一下吧:
到这里我们来看回上一个求质数的案例:
以100000为例,我们先来看一下以前的写法所用的时间:
long start = System.currentTimeMillis();
for (int i = 1; i < 100000; i++) {
boolean flag = isPrime1(i);
if(flag){
System.out.println(i);
}
}
long end = System.currentTimeMillis();
System.out.println("消耗的时间:" + (end - start));
这里是不是消耗了一秒钟呀,我们再来看一下用数字方法写的那个质数:
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));
怎么样,是不是利用数字方法的效率更高呀,是的。
arraycopy 拷贝数组
下面我们来看一下这个有什么用吧:
首先先来定义两个数组:
int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] arr2 = new int[10];
接下来我们来拷贝一下吧:
System.arraycopy(arr1,0,arr2,0,10);
是不是成功拷贝过来了呀,那这里的参数是什么意思呢?我们来说一下:
- 参数一:数据源,要拷贝的数据从哪个数组而来
- 参数二:从数据源数组中的第几个索引开始拷贝
- 参数三:目的地,我要把数据拷贝到哪个数组中
- 参数四:目的地数组的索引。
- 参数五:拷贝的个数
Runtime
Runtime表示当前虚拟机的运行环境
| 方法名 | 说明 |
|---|---|
| public static Runtime getRuntime() | 当前系统的运行环境对象 |
| public void exit(int status) | 停止虚拟机 |
| public int availableProcessors() | 获得CPU的线程数 |
| public long maxMemory() | JVM能从系统中获取总内存大小(单位byte) |
| public long totalMemory() | JVM已经从系统中获取总内存大小(单位byte) |
| public long freeMemory() | JVM剩余内存大小(单位byte) |
| public Process exec(string command) | 运行cmd命令 |
下面我们来实操一下吧:
Runtime getRuntime() 当前系统的运行环境对象
// 获取runtime的对象
Runtime r1 = Runtime.getRuntime();
Runtime r2 = Runtime.getRuntime();
System.out.println(r1 == r2); // true
exit(int status) 停止虚拟机
// exit 停止虚拟机
Runtime.getRuntime().exit(0);
System.out.println("看看我执行了吗?");
我们可以看到什么都没有执行,那就表示停止虚拟机的意思!
availableProcessors() 获得CPU的线程数
// availableProcessors() 获得CPU的线程数
System.out.println(Runtime.getRuntime().availableProcessors());
我们来运行看一下:
因为我的电脑是四核八线程的,所以就打印出了一个8
maxMemory() JVM能从系统中获取总内存大小(单位byte)
// maxMemory() JVM能从系统中获取总内存大小(单位byte)
System.out.println(Runtime.getRuntime().maxMemory() / 1024 / 1024);
这个4056就表示他从操作系统中能获取到4个g的内存。
totalMemory() JVM已经从系统中获取总内存大小(单位byte)
// totalMemory() JVM已经从系统中获取总内存大小(单位byte)
System.out.println(Runtime.getRuntime().totalMemory() / 1024 / 1024); // 254
这个254就表示虚拟机已经获取了大约254兆。
freeMemory() JVM剩余内存大小(单位byte)
// freeMemory() JVM剩余内存大小(单位byte)
System.out.println(Runtime.getRuntime().freeMemory() / 1024 / 1024); // 251
而这个251就表示还剩下251兆,刚才用掉了3兆的内存。
exec(string command) 运行cmd命令
// exec(string command) 运行cmd命令
Runtime.getRuntime().exec("notepad");
而这个是表示运行cmd命令,打开notepad这个记事本软件。
下面我们来说一个好玩的吧:
- shutdown:关机(加上参数才能执行)
- -s:默认在1分钟之后关机
- -s -t:指定关机时间
- -a:取消关机操作
- -r:关机并重启
好啦,本篇文章就学习到这里,我们下期继续来学习更加常用的API操作,我们下期不见不散哟!
==最后非常感谢您的阅读,也希望能得到您的反馈 ==