Math 的继承结构:
图1
Math 在源码中的定义方式:
图2
Math 类的字段摘要, 即属性:
图3
继承自 Object, 被 final 修饰, 即不能再被继承.
Math 类属于 lang 包, 是不需要导包的.
是一个帮助我们用于进行数学计算的工具类, 私有化构造方法, 所有的方法都是静态方法.
常用方法:
-
max
-
min
-
ceil
-
floor
-
round
-
pow
-
random
-
sqrt
-
cbrt
-
pow
package MathDemo;
public class Demo1 {
public static void main(String[] args) {
// bug:
// 以 int 类型为例, 取值范围: -2147483648 - 2147483647
// 如果没有正数与负数对应, 那么传递负数结果有误
// -2147483648 没有正数与之对应, 所以 abs 结果产生 bug
System.out.println(Math.abs(-2147483647)); // 2147483647
System.out.println(Math.abs(-2147483648)); // -2147483648
// 建议用 JDK 15 才开始有的一个方法: absExact(), 这样如果找不到对应的正整数, 程序会报错.
// System.out.println(Math.absExact(-2147483648)); // Exception in thread "main" java.lang.ArithmeticException: Overflow to represent absolute value of Integer.MIN_VALUE
}
}
下面这两个常量在 Math 类中:
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
对于静态方法和静态变量(包括常量)可以用 Math.方法名
或 Math.变量名
的方式直接调用, 但是也可以导入 Math 类而不用写 Math.
就能直接使用方法或变量.
在源文件的最上方加上:
import static java.lang.Math.*;
程序示例:
import static java.lang.Math.*;
public class MathDemo {
public static void main(String[] args) {
System.out.println(PI); // 3.141592653589793
System.out.println(E); // 2.718281828459045
System.out.println(cbrt(8)); // 2.0
}
}
在 Math 类中, 为了达到最佳的性能, 所有的方法都使用计算机浮点单元中的例程. 如果得到一个完全可预测的结果比运行速度更重要的话, 就应该使用 StrictMath 类. 它实现了 "可自由分发数学库(Freely Distributable Math Library, FDLIBM)" 的算法, 确保在所有平台上得到相同的结果.
Math 类提供了一些方法使整数运算更安全. 如果一个计算溢出, 数学运算符只是悄悄地返回错误的结果而不做任何提醒. 例如, 10 亿乘以 3(1000000000 * 3)的计算结果将是 -1 294 967 296, 因为最大的 int 值也只是刚刚超过 20 亿. 不过, 如果调用 Math.multiplyExact(1000000000, 3)
, 就会生成一个异常. 你可以捕获这个异常或者让程序终止, 而不是允许它给出一个错误的结果然后悄无声息地继续运行. 另外, 还有一些方法(addExact, subtractExact, incrementExact, decrementExact, negateExact 和 absExact)也可以正确地处理 int 和 long 参数.
如果想舍入(round)一个浮点数来得到最接近的整数, 可以使用 Math.round 方法. round 方法的返回值是 long 类型.
程序示例:
public class MathDemo2 {
public static void main(String[] args) {
double a = 9.98;
int b = (int) Math.round(a);
System.out.println(b); // 10
}
}
程序示例:
public class MathDemo1 {
public static void main(String[] args) {
/*
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 double pow(double a,double b) 返回a的b次幂的值
public static double random() 返回值为double的随机值, 范围[0.0,1.0)
*/
// abs 获取参数绝对值
System.out.println(Math.abs(88));
System.out.println(Math.abs(-88));
// bug:
// 以int类型为例, 取值范围: -2147483648~ 2147483647
// 如果没有正数与负数对应, 那么传递负数结果有误
//-2147483648 没有正数与之对应, 所以abs结果产生bug
// system.out.println(Math.abs(-2147483647));//2147483647
// System.out.println(Math.absExact(-2147483648));
// 进一法, 往数轴的正方向进一
System.out.println(Math.ceil(12.34));// 13.0
System.out.println(Math.ceil(12.54));// 13.0
System.out.println(Math.ceil(-12.34));//-12.0
System.out.println(Math.ceil(-12.54));//-12.0
System.out.println("-------------------------------");
// 去尾法,
System.out.println(Math.floor(12.34));// 12.0
System.out.println(Math.floor(12.54));// 12.0
System.out.println(Math.floor(-12.34));//-13.0
System.out.println(Math.floor(-12.54));//-13.0
System.out.println("-------------------------------");
// 四舍五入
System.out.println(Math.round(12.34));// 12
System.out.println(Math.round(12.54));// 13
System.out.println(Math.round(-12.34));//-12
System.out.println(Math.round(-12.54));//-13
System.out.println("-------------------------------");
// 获取两个整数的较大值
System.out.println(Math.max(20, 30));// 30
// 获取两个整数的较小值
System.out.println(Math.min(20, 30));// 20
System.out.println("-------------------------------");
// 获取a的b次幂
System.out.println(Math.pow(2, 3));// 8
// 细节:
// 如果第二个参数 0~ 1之间的小数
// system.out.println(Math.pow(4,0.5));//2.0
// System.out.println(Math.pow(2,-2));//0.25
// 建议:
// 第二个参数:一般传递大于等于1的正整数.
System.out.println(Math.sqrt(4));// 2.0
System.out.println(Math.cbrt(8));// 2.0
System.out.println("-------------------------------");
for (int i = 0; i < 1; i++) {
System.out.println(Math.floor(Math.random() * 100) + 1);
// Math.random() [0.0 1.0)
//* 100 [0.0 100.0)
// floor 去掉了后面的小数
//+1 [1 100.e]
}
}
}
标签:System,static,println,public,Math,out
From: https://www.cnblogs.com/Chengkai730/p/18538398