目录
一、引言
生未百年,死不孤独。
——马尔克斯
生命不止,声明不止,所以还没活够得我,抓紧又给大家分享点东西,今天给大家做一些关于常用API的补充。
关于常用API中String、StringBuilder、StringBuffer三者的知识点与联系,可以查阅我写的这篇博客。
而关于常用API中Object类中的两个方法(toString、equals)的知识点分析,可以查阅这篇博客。
今天分享的知识点如下:
Math(数学工具类)、System类、Arrays类
让我们进入今天的小知识课堂:
二、数学工具类——Math类
1、概念
Math并不是一个构造函数,而是一个应用工具类,包含了许多的数学方法应用于计算机中。java中的Math类封装了很多与数学有关的属性与方法。(封装的知识:点击这里)
2、具体方法
Math.PI//π的值,圆周率(3.1415926535898...)
Math.sqrt()//计算平方根
Math.cbrt()//计算立方根
Math.hypot(x,y)//计算 (x的平方+y的平方)的平方根(勾股定理还有人知道不)
Math.pow(a,b)//计算a的b次方
Math.exp(x)//计算e^x的值
Math.max();//计算最大值
Math.min();//计算最小值
Math.abs//求绝对值
Math.ceil//返回相比原数更大的值
Math.floor//返回相比原数更小的值
Math.random //取得一个大于或者等于0.0小于不等于1.0的随机数[0,1)
Math.rint //四舍五入 返回double值
Math.round //四舍五入 float时返回int值,double时返回long值
Math.nextUp(a) //返回比a大一点点的浮点数(右极限??)
Math.nextDown(a) //返回比a小一点点的浮点数(左极限??)
Math.nextAfter(a,b) //返回(a,b)或(b,a)间与a相邻的浮点数 b可以比a小
......
方法还有很多,在帮助文档中可以看到还有许多的封装方法等待着你!!(帮助文档没有的,可以私信我发给你)
3、代码演示:
public class Demo {
public static void main(String[] args) {
// Math.sqrt()//计算平方根 Math.cbrt()//计算立方根 Math.hypot(x,y)//计算 (x的平方+y的平方)的平方根
System.out.println("Math.sqrt(16)----:"+Math.sqrt(16));//4.0
System.out.println("Math.cbrt(8)----:"+Math.cbrt(8));//2.0
System.out.println("Math.hypot(3,4)----:"+Math.hypot(3,4));//5.0
// Math.pow(a,b)//计算a的b次方 Math.exp(x)//计算e^x的值
System.out.println("------------------------------------------");
System.out.println("Math.pow(3,2)----:"+Math.pow(3,2));//9.0
System.out.println("Math.exp(3)----:"+Math.exp(3));//20.085536923187668
//Math.max();//计算最大值 Math.min();//计算最小值
System.out.println("------------------------------------------");
System.out.println("Math.max(2.3,4.5)----:"+Math.max(7,15));//15
System.out.println("Math.min(2.3,4.5)----:"+Math.min(2.3,4.5));//2.3
//Math.abs求绝对值
System.out.println("------------------------------------------");
System.out.println("Math.abs(-10.4)----:"+Math.abs(-10.4));//10.4
System.out.println("Math.abs(10.1)----:"+Math.abs(10.1));//10.1
//Math.ceil返回大的值
System.out.println("------------------------------------------");
System.out.println("Math.ceil(-10.1)----:"+Math.ceil(-10.1));//-10.0
System.out.println("Math.ceil(10.7)----:"+Math.ceil(10.7));//11.0
System.out.println("Math.ceil(-0.7)----:"+Math.ceil(-0.7));//-0.0
System.out.println("Math.ceil(0.0)----:"+Math.ceil(0.0));//0.0
System.out.println("Math.ceil(-0.0)----:"+Math.ceil(-0.0));//-0.0
System.out.println("Math.ceil(-1.7)----:"+Math.ceil(-1.7));//-1.0
//Math.floor返回小的值
System.out.println("------------------------------------------");
System.out.println("Math.floor(-10.1)----:"+Math.floor(-10.1));//-11.0
System.out.println("Math.floor(10.7)----:"+Math.floor(10.7));//10.0
System.out.println("Math.floor(-0.7)----:"+Math.floor(-0.7));//-1.0
System.out.println("Math.floor(0.0)----:"+Math.floor(0.0));//0.0
System.out.println("Math.floor(-0.0)----:"+Math.floor(-0.0));//-0.0
//Math.random 取得一个大于或者等于0.0小于不等于1.0的随机数[0,1)
System.out.println("------------------------------------------");
System.out.println("Math.random()----:"+Math.random());//输出[0,1)间的随机数 0.8979626325354049
System.out.println("Math.random()*100----:"+Math.random()*100);//输出[0,100)间的随机数 32.783762836248144
// Math.rint 四舍五入 返回double值
System.out.println("------------------------------------------");
System.out.println("Math.rint(10.1)----:"+Math.rint(10.1));//10.0
System.out.println("Math.rint(10.7)----:"+Math.rint(10.7));//11.0
System.out.println("Math.rint(-10.5)----:"+Math.rint(-10.5));//-10.0
System.out.println("Math.rint(-10.51)----:"+Math.rint(-10.51));//-11.0
System.out.println("Math.rint(-10.2)----:"+Math.rint(-10.2));//-10.0
System.out.println("Math.rint(9)----:"+Math.rint(9));//9.0
//Math.round 四舍五入 float时返回int值,double时返回long值
System.out.println("------------------------------------------");
System.out.println("Math.round(10.1)----:"+Math.round(10.1));//10
System.out.println("Math.round(10.7)----:"+Math.round(10.7));//11
System.out.println("Math.round(-10.5)----:"+Math.round(-10.5));//-10
System.out.println("Math.round(-10.51)----:"+Math.round(-10.51));//-11
System.out.println("Math.round(-10.2)----:"+Math.round(-10.2));//-10
System.out.println("Math.round(9)----:"+Math.round(9));//9
//Math.nextUp(a) 返回比a大一点点的浮点数
System.out.println("------------------------------------------");
System.out.println("Math.nextUp(1.2)----:"+Math.nextUp(1.2));//1.2000000000000002
//Math.nextDown(a) 返回比a小一点点的浮点数
System.out.println("------------------------------------------");
System.out.println("Math.nextDown(1.2)----:"+Math.nextDown(1.2));//1.1999999999999997
//Math.nextAfter(a,b) 返回(a,b)或(b,a)间与a相邻的浮点数 b可以比a小
System.out.println("------------------------------------------");
System.out.println("Math.nextAfter(1.2, 2.7)----:"+Math.nextAfter(1.2, 2.7));//1.2000000000000002
System.out.println("Math.nextAfter(1.2, -1)----:"+Math.nextAfter(1.2, -1));//1.1999999999999997
}
}
三、System类
1、概念
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。
该类位于lang包下,不需要导包;构造方法私有private,无法实例化;内部成员static(静态),方便调用。
system中包含了in、out和err三个成员变量,分别代表标准输入流(键盘输入)、标准输出流(显示器)和标准错误输出流(显示器)。
2、常用方法
最常见的两种:
<1>、exit
System.exit(0);
终止JVM,终止java虚拟机的运行。
<2>、currentTimeMillis
long l=System.currentTimeMillis() ;
返回当前毫秒值的时间,和Date类中的getTime方法一样。(嗯,日期类也是一个常用API)
<3>(补充)System.arraycopy(a,b,c,d,e)
a是被复制的数组,b是复制的起始位置,c是复制到的数组,d是复制到这个数组的起始位置,e是复制到这个数组的结束位置。
(懂了撒,学会这个,你就是ITcopy忍者卡卡西!!!)
<4>、(补充)getProperty
获取系统属性;
<5>、(补充)gc
java垃圾回收器,这个方法不需要我们去调用,jvm发现系统有未使用的对象,会自己进行执行。通常会有两种情况下会调用gc:(a)、当jvm内存不足时会调用,(b)、当cpu空闲的时候调用。详细请看一下jvm的具体的垃圾回收机制。
3、代码演示(只演示常用的两种方法)
<1>、System.currentTimeMillis的方法(用来测试自己电脑运行能力还是可以的)
public class timeTest {
public static void main(String[] args) {
long startTime=System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
System.out.println(i);
}
long endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
}
}
结果:可以看出咱电脑跑分还是可以的。
......
9995
9996
9997
9998
9999
90
Process finished with exit code 0
<2>、System.exit的方法(为了简便明了,我就用上述的时间毫秒值代码测试,终止循环,大家注意看,嗯,不是 为了偷懒!!)
public class timeTest {
public static void main(String[] args) {
long startTime=System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
System.out.println(i);
System.exit(0);//这行代码,神奇的终止的循环的继续,就输出了一个0
}
long endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
}
}
结果展示:
0
Process finished with exit code 0
这两种方法,可以经常用到,需要大家认真记忆学习。
四、Arrays——数组类
1、概念
JDK中提供了一个专门用于操作数组的工具类,即Arrays类,位于java util 中。
2、方法
<1>、Arrays.fill(填充数组)
fill方法填充数组的方式有两种,一种是:
(1)完全填充:
import java.lang.reflect.Array;
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
//定义一个int数组
int[] arr=new int[5];
//然后我们调用Arrays的fill方法(变量名,数值)
Arrays.fill(arr,2);
//当我们遍历输出时,我们就会发现数组中每一个索引对应的值都是我们方法中设置的2
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
2
2
2
2
2
Process finished with exit code 0
(2)部分填充:
import java.lang.reflect.Array;
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
//同样是一个数组
int[] arr=new int[5];
//但此时我们方法内放得值改变了,成为fill(变量名,索引开始值,索引结束值,数据值)
Arrays.fill(arr,1,3,2);
//当我们输出时,我们就会发现,索引值1与2对应的数值变为了2,而不是全部(我们能发现,这里的方法有些与String中的subString方法类似)
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
0
2
2
0
0
Process finished with exit code 0
<2>、数组元素排序:sort
sort方法也是数组中,极为常用的一个排序方法。也分为整体排序与局部排序的区别,也是加索引的区别,这里我就不再演示部分排序的代码了。
int []arr = {3,2,1,5,4};
Arrays.sort(arr);
output(arr);
输出的结果就是1,2,3,4,5
<3>、equals(比较数组元素是否相等)
我们如果学过Object类中的equals的方法,我们就知道这是个比较两个引用对象是否相同的方法。但Arrays.equals重写的equals方法,却可以比较数组中的元素是否相等。
上代码:
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
int []arr1 = {1,2,3};
int []arr2 = {1,2,3};
System.out.println(Arrays.equals(arr1,arr2));
}
}
结果输出true,而如果我们在输出语句中写的是arr1.equals(arr2),返回的结果就会变成false。
<4>、binarySearch (二分查找法找指定元素的索引值(下标))
<5>、copy(截取数组元素)
......
方法还有很多,大家想再扩充自己知识的,欢迎大家努力学习!!