Math类介绍
Math类常用方法及演示
System类简介
System类常用方法及演示
本节内容是我们《API-常用类》专题的第四小节了。本节内容主要讲Math类和System类, 内容包括 Math类介绍、 Math类常用方法、 System类介绍, System类常用方法。该小节内容基本不涉及底层源码,只是因其使用频率较可观,本身也没什么难度,所以给大家演示一下它们的常用方法,大家可以放心食用。 注意 : ① 代码中的注释也很重要; ② 不要眼高手低,自己敲一遍才能知道怎么用。 ③ 点击侧边栏目录或者文章开头的目录可以跳转。良工不示人以朴,所有文章都会适时改进。大家如果有什么问题,都可以在评论区一块儿交流,或者私信up。 感谢阅读!
诚然,我们目前的编程中用到数学不算多,因为我们还没讲算法。但即便如此,简单的 + - * / 有时并不能满足我们对计算的需求。我们可以使用java提供的Math类来解决这个问题, java Math类中封装了常用的数学运算,包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math类属于java.base模块,java.lang包下,如下图所示 :
我们再来看看Math类的源码,如下 :
可以看到,Math类被final关键字修饰,因此Math类不可被继承。同时,Math类的构造器也被私有化了,并且源码中也给出了标注,Math类不可被实例化。
在演示Math类常用方法前,顺便提一嘴Math类的两个共有静态常量E和PI,估计大家看名字也能猜出来这是干嘛的。E是自然对数,PI是圆周率。如下图所示 :
返回当前数值的绝对值。可以是int,long,float, double四种类型。
设传入的两个形参是a和b,返回a的b次方。(求幂运算)
向上取整,返回大于等于当前形参的最小整数。
向下取整,返回小于等于当前形参的最大整数。
四舍五入取整,支持传入float类型和double类型,对应返回类型分别为int类型和long类型。
对传入的形参求开方。即返回当前形参的算术平方根。
返回一个大于等于0.0小于1.0的随机数。即返回区间[0.0, 1.0)内的一个随机数。
PS : 如果要求[a, b]之间的一个随机整数,可以使用如下公式——
(int) (a + Math.random() * (b - a + 1)) (可令a = 0来证明)
返回两个数中的最大值。同abs方法一样,支持int,long,float,double四种类型。
返回两个数中的最小值。同abs方法一样,支持int,long,float,double四种类型。
up以Math_类为演示类,代码如下 :
package csdn.knowledge.api.System_Math;
public class Math_ {
public static void main(String[] args) {
//演示 : Math类常用方法
//1 —— static ... abs(...)
System.out.println("-233的绝对值 = " + Math.abs(-233));
System.out.println("6.666的绝对值 = " + Math.abs(6.666));
System.out.println("6.666的绝对值 = " + Math.abs(-11.11));
System.out.println("6.666的绝对值 = " + Math.abs(5));
System.out.println("===============================");
//2 —— static double pow(double a, double b)
System.out.println("3 的 2次方 = " + Math.pow(3, 2));
System.out.println("2 的 3次方 = " + Math.pow(2, 3));
System.out.println("4 的 2次方 = " + Math.pow(4, 2));
System.out.println("2 的 10次方 = " + Math.pow(2, 10));
System.out.println("===============================");
//3 —— static double ceil(double a)
System.out.println("2.33向上取整 = " + Math.ceil(2.33));
System.out.println("2.99向上取整 = " + Math.ceil(2.99));
System.out.println("3.01向上取整 = " + Math.ceil(3.01));
System.out.println("-3.01向上取整 = " + Math.ceil(-3.01));
System.out.println("===============================");
//4 —— static double floor(double a)
System.out.println("2.33向下取整 = " + Math.floor(2.33));
System.out.println("2.99向下取整 = " + Math.floor(2.99));
System.out.println("4.01向下取整 = " + Math.floor(4.01));
System.out.println("-4.01向下取整 = " + Math.floor(-4.01));
System.out.println("===============================");
//5 —— static ... round(...)
System.out.println("2.499四舍五入 = " + Math.round(2.499));
System.out.println("2.501四舍五入 = " + Math.round(2.501));
System.out.println("-3.33四舍五入 = " + Math.round(-3.33));
System.out.println("-6.88四舍五入 = " + Math.round(-6.88));
System.out.println("===============================");
//6 —— static double sqrt(double a)
System.out.println("9开根号 = " + Math.sqrt(9));
System.out.println("9.0开根号 = " + Math.sqrt(9.0));
System.out.println("1.21开根号 = " + Math.sqrt(1.21));
System.out.println("256开根号 = " + Math.sqrt(256));
System.out.println("===============================");
//7 —— static double random()
System.out.println("返回[0.0, 1.0)区间内的一个随机数:" + Math.random());
System.out.println("返回[0.0, 1.0)区间内的一个随机数:" + Math.random());
System.out.println("返回一个2~11间的随机整数 = " + (int) (2 + Math.random() * (11 - 2 + 1)));
System.out.println("返回一个2~11间的随机整数 = " + (int) (2 + Math.random() * (11 - 2 + 1)));
System.out.println("===============================");
//8 —— static double random()
System.out.println("3.2 和 2.3中的最大值 = " + Math.max(3.2, 2.3));
System.out.println("-2.01 和 -1.99中的最大值 = " + Math.max(-2.01, -1.99));
System.out.println("2333 和 3333中的最大值 = " + Math.max(2333, 3333));
System.out.println("-666 和 11中的最大值 = " + Math.max(-666, 11));
System.out.println("===============================");
//9 —— static double random()
System.out.println("3.2 和 2.3中的最小值 = " + Math.min(3.2, 2.3));
System.out.println("-2.01 和 -1.99中的最小值 = " + Math.min(-2.01, -1.99));
System.out.println("2333 和 3333中的最小值 = " + Math.min(2333, 3333));
System.out.println("-666 和 11中的最小值 = " + Math.min(-666, 11));
}
}
运行结果 :
System类属于java.base模块,java.lang包下,如下 :
我们再来看看System类的源码,如下 :
同样,System类不可被继承(final修饰),不可被实例化(构造器私有)。
退出当前程序,结束正在运行的java虚拟机。形参= 0表示以正常状态退出。
以System_类为演示类,代码如下 :
package csdn.knowledge.api.System_Math;
public class System_ {
public static void main(String[] args) {
//演示 : System类常用方法
//1.exit()
System.out.println("CSDN yyds!");
System.exit(0);
System.out.println("这句话能否输出?");
}
}
运行结果 :
可以看到,在执行exit语句后,下面的输出语句未能执行。
第一眼看到这函数是不是有点懵?雀氏,我们平时并不常见这种形参有这么多的情况。
该方法可以用于数组的拷贝,可以将原数组中的指定内容拷贝到指定新数组中的指定位置。
PS : 平时我们拷贝数组更多使用的是Arrays类中的copyOf方法,实际上copyOf方法在底层调用的就是System类中的arraycopy方法。大家有兴趣可以去看看Arrays类的源码或者Debug一下,我这儿就不演示了,这个话题要是说起来就没完没了了。
具体每个形参有什么作用,源码中也作了批注,如下 :
/**
Params:
src – the source array.
srcPos – starting position in the source array.
dest – the destination array.
destPos – starting position in the destination data.
length – the number of array elements to be copied.
*/
当然,up还是相信大家的英文水平的。不过为了凑点字数,还是给大家翻译解读一下。如下 :
第一个形参src —— 代表了数据来源的数组,即原数组。
第二个形参srcPos —— 代表了你要从原数组的哪个位置(索引)处开始拷贝。
第三个形参dest —— 代表了接收数据的目的地数组,即新数组。
第四个形参destPos —— 代表了你想在新数组的哪个位置(索引)处存放拷贝过来的内容。
第五个形参length —— 代表了原数组中你想拷贝的内容的长度。
所以,该方法总的意思就是"把src数组中从srcPos索引开始共length个元素拷贝到dest数组中的从destPos索引开始处"。
实际上,我们往往使用"System.arraycopy(array1, 0, array2, 0, array1.length())"的格式,即将原数组中的内容全部拷贝至新数组。
仍以System_类为演示类,代码如下 :
package csdn.knowledge.api.System_Math;
import java.util.Arrays;
public class System_ {
public static void main(String[] args) {
//演示 : System类常用方法
//2.arraycopy()
int[] array1 = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] array2 = new int[array1.length];
System.arraycopy(array1, 0, array2, 0, array1.length);
System.out.println("拷贝后的新数组array2 = " + Arrays.toString(array2));
int[] array3 = new int[25];
System.arraycopy(array1, 0, array3, 11, 10);
System.out.println("拷贝后的新数组array3 = " + Arrays.toString(array3));
int[] array4 = new int[5];
System.arraycopy(array1, 2, array4, 0, 3);
System.out.println("拷贝后的新数组array4 = " + Arrays.toString(array4));
}
}
运行结果 :
PS :
①如果你的目的地数组(新数组)的长度小于你想拷贝的内容的长度,IDEA会报ArrayIndexOutOfBoundsException,如下图所示 :
②如果原数组与新数组类型不兼容,IDEA会报ArrayStoreException,如下图所示 :
返回当前时间点距离1970年1月1日午夜12:00时间点的毫秒数。
有小伙伴儿可能会有疑问,为啥子是1970-1-1捏?
诺,我直接把百度结果给你搬过来。如下图所示 :
以System_类为演示类,代码如下 :
package csdn.knowledge.api.System_Math;
import java.util.Arrays;
public class System_ {
public static void main(String[] args) {
//演示 : System类常用方法
//3.currentTimeMillis()
Long time_Start = System.currentTimeMillis();
System.out.println("当前时间距离1970-1-1-12:00的毫秒数 = " + time_Start);
for (int i = 0; i < 10; i++) {
System.out.print("牛逼 ");
}
Long time_End = System.currentTimeMillis();
System.out.println("\n执行完牛逼for循环用了多少毫秒?" + (time_End - time_Start));
}
}
运行结果 :
,以上就是关于Math类 和 System类的全部内容了。希望这篇博文的内容分享,能给大家带来帮助。总的来看,目前阶段这两个常用类对于大家来说,更多在于如何使用它,偏向于应用。大家不需要扣太细,有兴趣倒是可以把我们之前讲过的String类,StringBuffer类,StringBuilder类的底层去扣一扣,但现阶段也是浅尝辄止就好。API专题的下一小节,up准备来讲讲Date类 和 Calander类,我们不见不散 。 感谢阅读!