Java Math类核心用法全解析

七、Math类

( 一 ) 、核心特性

  1. final 修饰:不可被继承,无法创建子类。
  2. 构造器私有不能实例化对象 ,所有方法都是静态方法 (直接用 类名.方法名() 调用)。
  3. 常量字段 :内置常用数学常量 PI(圆周率)、E(自然对数底数)。
  4. 线程安全:所有方法都是线程安全的,多线程环境可直接使用。

( 二 ) 、常用常量

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

( 四 ) 、使用注意事项

  1. 调用方式 :所有方法 / 常量直接用 Math.xxx 调用,不能 new Math ()(构造器私有)。
  2. 返回值类型 :大部分方法返回 double 类型,需要整数时记得强转。
  3. 参数合法性
    • sqrt()log() 不能传入负数,否则返回 NaN(非数字)。
    • 无穷大运算会返回 Infinity
  4. 精度问题 :浮点运算存在微小精度误差,高精度计算建议用 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());
    }
}

总结

  1. Math静态工具类,无需实例化,直接调用静态方法;
  2. 核心掌握:取整、随机数、绝对值、最大 / 最小值、幂 / 开方
  3. 三角函数需注意角度转弧度,浮点运算注意精度问题。

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类

( 一 ) 、核心特性

  1. final 类:不能被继承
  2. 构造私有不能 new 对象 ,全部用静态方法 / 常量System.xxx
  3. final 字段inouterr 是标准流对象
  4. 系统级功能:操作 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");// 文件分隔符 \ /

( 五 ) 、使用注意事项

  1. 不能实例化new System() 会报错
  2. arraycopy 必须注意边界:索引越界会抛数组越界异常
  3. exit 会直接终止程序:慎用
  4. gc 只是建议 JVM 回收:不是立即执行
  5. 时间单位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);
    }
}

总结

  1. System 是静态工具类 ,直接 System.xxx 调用
  2. 最常用System.outcurrentTimeMillis()arraycopy()
  3. 作用:系统时间、输入输出、数组拷贝、退出程序、获取系统信息
  4. 禁止实例化,全部是静态资源

接下来,学习一个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语言的生日
相关推荐
踏着七彩祥云的小丑2 小时前
开发中用到的注解
java
小梦爱安全2 小时前
Ansible剧本1
java·网络·ansible
jieyucx2 小时前
Go 语言运算符与控制台输入输出详解
开发语言·后端·golang
Ulyanov2 小时前
《玩转QT Designer Studio:从设计到实战》 QT Designer Studio的定位革命与技术架构
开发语言·python·qt·系统仿真·雷达电子对抗仿真
pupudawang2 小时前
Spring Boot 热部署
java·spring boot·后端
我登哥MVP2 小时前
【SpringMVC笔记】 - 9 - 异常处理器
java·spring boot·spring·servlet·tomcat·maven
下地种菜小叶2 小时前
Spring Boot 2.x 升级 3.x / 4.x 怎么做?一次讲清 JDK、Jakarta、依赖兼容与上线策略
java·spring boot·后端
iiiiyu2 小时前
常用API(StringJoiner类 & Math类 & System类)
java·大数据·开发语言·数据结构·编程语言
有梦想的小何3 小时前
`Java并发排障实录:没有报错,却把正确数据覆盖错了`
java·spring boot·mysql·spring cloud