当前位置:首页 > 技术 > 正文内容

Java核心工具类与常用API深度解析

访客 技术 2026年7月11日 4

Math类关键方法详解

Math类提供了丰富的数学运算静态方法,但在使用中需要注意精度与边界问题。

绝对值方法的陷阱

以int类型为例,其取值范围为-2147483648到2147483647。当传入-2147483648时,由于没有对应的正数值,Math.abs()会返回错误的负值。

System.out.println(Math.abs(-2147483648)); // 输出 -2147483648,结果错误
System.out.println(Math.abs(-2147483647)); // 输出 2147483647,结果正确  

平方根与立方根计算

Math.sqrt(4)   // 返回 2.0,计算平方根
Math.cbrt(8)   // 返回 2.0,计算立方根 

生成随机数

// 生成1到100之间的随机整数
System.out.println(Math.floor(Math.random() * 100 + 1));

System类实用方法

System类作为工具类,提供了和系统环境交互的功能。

// 终止当前运行的Java虚拟机
System.exit(0);

// 获取当前时间戳(毫秒)
long currentMillis = System.currentTimeMillis();
System.out.println(currentMillis);

// 数组拷贝
int[] sourceArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] destArr = new int[10];
System.arraycopy(sourceArr, 0, destArr, 0, sourceArr.length);
// 注意事项:
// 1. 源数组和目标数组若均为基本类型,则类型必须一致
// 2. 拷贝时需确保目标数组长度足够,否则会抛异常
// 3. 若涉及引用类型,子类类型可赋给父类类型

Runtime类核心功能

// 获取Runtime实例(单例模式)
Runtime runtime = Runtime.getRuntime();

// 立即关闭虚拟机
Runtime.getRuntime().exit(0);

// 获取可用处理器核心数
System.out.println(Runtime.getRuntime().availableProcessors());

// 最大可用内存(字节)
System.out.println(Runtime.getRuntime().maxMemory());

// 已分配总内存
System.out.println(Runtime.getRuntime().totalMemory());

// 剩余可用内存
System.out.println(Runtime.getRuntime().freeMemory());

// 执行系统命令
Runtime.getRuntime().exec("notepad");
Runtime.getRuntime().exec("shutdown -a");  // 取消关机

Object类核心方法

Object是所有类的根父类,其方法可被任意子类继承和重写。

equals()方法比较逻辑

默认实现比较对象内存地址。重写后可实现基于内容的比较。

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Person person = (Person) obj;
    return age == person.age && Objects.equals(name, person.name);
}

toString()方法

默认返回"类名@哈希码十六进制"。重写后可展示对象属性值。

@Override
public String toString() {
    return "Person{name='" + name + "', age=" + age + "}";
}

clone()方法与深浅拷贝

浅拷贝仅复制引用地址,深拷贝会递归复制引用对象。

public class User implements Cloneable {
    private String username;
    private int[] scores;
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        User clonedUser = (User) super.clone();  // 执行浅拷贝
        clonedUser.scores = this.scores.clone(); // 手动深拷贝数组
        return clonedUser;
    }
}

Objects工具类

Objects.equals()

可安全处理null值,避免空指针异常。

String str1 = null;
String str2 = "world";
System.out.println(Objects.equals(str1, str2));  // false
System.out.println(Objects.equals(str1, null));  // true

Objects.isNull()与Objects.nonNull()

提供语义化的null检查。

Object obj = new Object();
boolean isNull = Objects.isNull(obj);   // 等价于 obj == null
boolean nonNull = Objects.nonNull(obj); // 等价于 obj != null

hashCode()方法

重写equals时必须同时重写hashCode,以保证哈希表数据结构的正常运作。

@Override
public int hashCode() {
    return Objects.hash(name, age);
}

BigInteger大整数操作

对象创建方式

// 通过字符串创建(推荐处理超大数值)
BigInteger bigVal = new BigInteger("99999999999999999999");

// 通过valueOf创建(内部缓存 -16 到 16 的值)
BigInteger cachedVal = BigInteger.valueOf(10);

常用运算方法

BigInteger x = new BigInteger("1234567890");
BigInteger y = new BigInteger("9876543210");

BigInteger sum = x.add(y);           // 加法
BigInteger diff = x.subtract(y);     // 减法
BigInteger product = x.multiply(y);  // 乘法
BigInteger quotient = x.divide(y);   // 除法
BigInteger remainder = x.mod(y);     // 取模
BigInteger power = x.pow(5);         // 幂运算
BigInteger gcd = x.gcd(y);           // 最大公约数
BigInteger[] divAndRem = x.divideAndRemainder(y); // 同时获取商和余数

BigDecimal高精度小数

创建建议

// 推荐使用字符串构造,避免精度丢失
BigDecimal preciseNum = new BigDecimal("123.456");

// 或使用静态方法valueOf
BigDecimal safeNum = BigDecimal.valueOf(123.456);

运算与舍入模式

BigDecimal a = new BigDecimal("10.5");
BigDecimal b = new BigDecimal("3.2");

BigDecimal sum = a.add(b);
BigDecimal diff = a.subtract(b);
BigDecimal product = a.multiply(b);

// 除法必须指定舍入模式
BigDecimal quotient = a.divide(b, RoundingMode.HALF_UP);  // 四舍五入
标签: MathSystem

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。