七、Math类
( 一 ) 、核心特性
- final 修饰:不可被继承,无法创建子类。
- 构造器私有 :不能实例化对象 ,所有方法都是静态方法 (直接用
类名.方法名()调用)。 - 常量字段 :内置常用数学常量
PI(圆周率)、E(自然对数底数)。 - 线程安全:所有方法都是线程安全的,多线程环境可直接使用。
( 二 ) 、常用常量
java
运行
// 圆周率 π(3.141592653589793)
Math.PI;
// 自然对数底数 e(2.718281828459045)
Math.E;
( 三 ) 、高频方法分类(必记)
1. 绝对值运算
返回参数的非负值,支持 int/long/float/double
java
运行
Math.abs(-10); // 返回 10
Math.abs(-3.14); // 返回 3.14
2. 取整运算(面试常考)
表格
| 方法 | 作用 | 示例 |
|---|---|---|
Math.round() |
四舍五入取整(返回 long) | Math.round(3.6) → 4 |
Math.floor() |
向下取整(返回 double) | Math.floor(3.9) → 3.0 |
Math.ceil() |
向上取整(返回 double) | Math.ceil(3.1) → 4.0 |
3. 最大 / 最小值
返回两个数中的最大值 / 最小值,支持所有数值类型
java
运行
Math.max(10, 20); // 返回 20
Math.min(5.5, 3.3); // 返回 3.3
4. 幂运算与开方
java
运行
// 计算 a 的 b 次方(a^b)
Math.pow(2, 3); // 2³ = 8.0
// 开平方(平方根)
Math.sqrt(16); // 返回 4.0
// 开立方根
Math.cbrt(8); // 返回 2.0
5. 随机数
生成 [0.0, 1.0) 区间的随机 double 数(包含 0,不包含 1)
java
运行
Math.random();
// 常用技巧:生成 [1, 100] 之间的随机整数
int num = (int)(Math.random() * 100) + 1;
6. 符号与符号函数
java
运行
// 判断正负:正数返回1,负数返回-1,0返回0
Math.signum(5); // 1
Math.signum(-3); // -1
7. 三角函数(角度用弧度表示)
注意:Math 类三角函数接收弧度值 ,角度需用
toRadians()转换
java
运行
// 角度转弧度
Math.toRadians(90); // 90度 → π/2 弧度
// 正弦、余弦、正切
Math.sin(Math.PI/2); // 1.0
Math.cos(0); // 1.0
8. 对数运算
java
运行
// 自然对数 ln(x)(以e为底)
Math.log(Math.E); // 返回 1.0
// 以10为底的对数 log10(x)
Math.log10(100); // 返回 2.0
( 四 ) 、使用注意事项
- 调用方式 :所有方法 / 常量直接用
Math.xxx调用,不能 new Math ()(构造器私有)。 - 返回值类型 :大部分方法返回
double类型,需要整数时记得强转。 - 参数合法性 :
sqrt()、log()不能传入负数,否则返回NaN(非数字)。- 无穷大运算会返回
Infinity。
- 精度问题 :浮点运算存在微小精度误差,高精度计算建议用
BigDecimal。
( 五 ) 、简单示例
java
运行
public class MathTest {
public static void main(String[] args) {
// 常量
System.out.println("π:" + Math.PI);
// 运算
System.out.println("绝对值:" + Math.abs(-99));
System.out.println("四舍五入:" + Math.round(5.8));
System.out.println("最大值:" + Math.max(18, 25));
System.out.println("随机数:" + Math.random());
}
}
总结
Math是静态工具类,无需实例化,直接调用静态方法;- 核心掌握:取整、随机数、绝对值、最大 / 最小值、幂 / 开方;
- 三角函数需注意角度转弧度,浮点运算注意精度问题。
Math是数学的意思,该类提供了很多个进行数学运算的方法,如求绝对值,求最大值,四舍五入等。
Math类提供的常见方法:

话不多说,直接上代码。
public class MathTest {
public static void main(String[] args) {
// 目标:了解下Math类提供的常见方法。
// 1、public static int abs(int a):取绝对值(拿到的结果一定是正数)
// public static double abs(double a)
System.out.println(Math.abs(-12)); // 12
System.out.println(Math.abs(123)); // 123
System.out.println(Math.abs(-3.14)); // 3.14
// 2、public static double ceil(double a): 向上取整
System.out.println(Math.ceil(4.0000001)); // 5.0
System.out.println(Math.ceil(4.0)); // 4.0
// 3、public static double floor(double a): 向下取整
System.out.println(Math.floor(4.999999)); // 4.0
System.out.println(Math.floor(4.0)); // 4.0
// 4、public static long round(double a):四舍五入
System.out.println(Math.round(3.4999)); // 3
System.out.println(Math.round(3.50001)); // 4
// 5、public static int max(int a, int b):取较大值
// public static int min(int a, int b):取较小值
System.out.println(Math.max(10, 20)); // 20
System.out.println(Math.min(10, 20)); // 10
// 6、 public static double pow(double a, double b):取次方
System.out.println(Math.pow(2, 3)); // 2的3次方 8.0
System.out.println(Math.pow(3, 2)); // 3的2次方 9.0
// 7、public static double random(): 取随机数 [0.0 , 1.0) (包前不包后)
System.out.println(Math.random());
}
}
八、System类
( 一 ) 、核心特性
- final 类:不能被继承
- 构造私有 :不能 new 对象 ,全部用静态方法 / 常量 (
System.xxx) - final 字段 :
in、out、err是标准流对象 - 系统级功能:操作 JVM、系统信息、环境、资源
( 二 ) 、三大标准流
java
运行
// 1. 标准输入:读取控制台输入(Scanner底层依赖它)
System.in
// 2. 标准输出:控制台打印
System.out.print("不换行");
System.out.println("自动换行"); // 最常用
// 3. 标准错误输出:打印错误信息(红色字体)
System.err.println("报错啦!");
( 三 ) 、高频方法(必背)
1. 获取系统时间
java
运行
// 1. 当前时间戳(毫秒):1970-01-01 到现在的毫秒数
long now = System.currentTimeMillis();
// 2. 高精度计时(纳秒),适合计算代码耗时
long start = System.nanoTime();
long end = System.nanoTime();
2. 数组快速拷贝(高效!)
System.arraycopy() 是原生方法,比循环拷贝快很多。
java
运行
// 参数:源数组、起始索引、目标数组、起始索引、拷贝长度
int[] src = {1,2,3,4};
int[] dest = new int[4];
System.arraycopy(src, 0, dest, 0, 4);
3. 退出 JVM 程序
java
运行
// 0 = 正常退出
// 非0 = 异常退出
System.exit(0);
4. 垃圾回收提醒(建议不要手动调用)
java
运行
System.gc();
5. 获取系统环境信息
java
运行
// 获取系统属性(如操作系统、Java版本)
System.getProperty("os.name"); // Windows 10
System.getProperty("java.version");// 1.8.0_301
// 获取环境变量
System.getenv("PATH");
6. 控制台字符清空
java
运行
// 打印换行,实现简单清屏(非严格清屏)
System.out.flush();
( 四 ) 、常用系统属性值
java
运行
System.getProperty("os.name"); // 操作系统
System.getProperty("user.name"); // 用户名
System.getProperty("user.dir"); // 当前项目路径
System.getProperty("file.separator");// 文件分隔符 \ /
( 五 ) 、使用注意事项
- 不能实例化 :
new System()会报错 - arraycopy 必须注意边界:索引越界会抛数组越界异常
- exit 会直接终止程序:慎用
- gc 只是建议 JVM 回收:不是立即执行
- 时间单位 :
currentTimeMillis()是毫秒,nanoTime()是纳秒
( 六 ) 、简单示例
java
运行
public class SystemTest {
public static void main(String[] args) {
// 打印
System.out.println("Hello System");
// 时间戳
System.out.println(System.currentTimeMillis());
// 系统信息
System.out.println(System.getProperty("os.name"));
// 数组拷贝
int[] a = {10,20};
int[] b = new int[2];
System.arraycopy(a,0,b,0,2);
}
}
总结
- System 是静态工具类 ,直接
System.xxx调用 - 最常用 :
System.out、currentTimeMillis()、arraycopy() - 作用:系统时间、输入输出、数组拷贝、退出程序、获取系统信息
- 禁止实例化,全部是静态资源
接下来,学习一个System类,这是系统类,提供了一些获取系统数据的方法。比如获取系统时间。
System类提供的常见方法:

/**
* 目标:了解下System类的常见方法。
*/
public class SystemTest {
public static void main(String[] args) {
// 1、public static void exit(int status):
// 终止当前运行的Java虚拟机。
// 该参数用作状态代码; 按照惯例,非零状态代码表示异常终止。
System.exit(0); // 人为的终止虚拟机。(不要使用)
// 2、public static long currentTimeMillis():
// 获取当前系统的时间
// 返回的是long类型的时间毫秒值:指的是从1970-1-1 0:0:0开始走到此刻的总的毫秒值,1s = 1000ms
long time = System.currentTimeMillis();
System.out.println(time);
for (int i = 0; i < 1000000; i++) {
System.out.println("输出了:" + i);
}
long time2 = System.currentTimeMillis();
System.out.println((time2 - time) / 1000.0 + "s");
}
}
时间毫秒值: 指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数,应该是很大的。 1s = 1000ms。
为啥选择“1970年1月1日 00:00:00” 作为时间的起点?
1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。1970年1月1日 算C语言的生日