当前位置: 首页 > news >正文

4.4java常用类

 在 Java 中,System 和 Runtime 类都是 java.lang 包下非常重要的类,它们提供了与系统交互以及管理 Java 虚拟机(JVM)运行时环境的功能。

System 类

System 类包含了一些有用的类字段和方法,它不能被实例化,其所有的方法都是静态的。以下是 System 类的一些常用功能和方法。

1. 标准输入输出流
  • System.in:标准输入流,通常与键盘输入相关联,类型为 InputStream
  • System.out:标准输出流,通常与控制台输出相关联,类型为 PrintStream
  • System.err:标准错误输出流,用于输出错误信息,同样是 PrintStream 类型。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class SystemIOExample {public static void main(String[] args) {try {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入一些内容:");String input = reader.readLine();System.out.println("你输入的内容是: " + input);} catch (IOException e) {System.err.println("读取输入时发生错误: " + e.getMessage());}}
}
2. 系统属性
  • System.getProperty(String key):用于获取指定键的系统属性值。
  • System.setProperty(String key, String value):用于设置指定键的系统属性值。
public class SystemPropertiesExample {public static void main(String[] args) {// 获取系统属性String osName = System.getProperty("os.name");System.out.println("操作系统名称: " + osName);// 设置系统属性System.setProperty("my.property", "my value");String myProperty = System.getProperty("my.property");System.out.println("自定义属性值: " + myProperty);}
}
3. 时间相关
  • System.currentTimeMillis():返回当前时间(以毫秒为单位),通常用于计算代码执行时间。
  • System.nanoTime():返回当前时间的纳秒数,提供更高精度的时间测量。
public class SystemTimeExample {public static void main(String[] args) {long startTime = System.currentTimeMillis();for (int i = 0; i < 1000000; i++) {// 模拟一些操作}long endTime = System.currentTimeMillis();System.out.println("代码执行时间: " + (endTime - startTime) + " 毫秒");}
}
4. 数组复制
  • System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length):用于将一个数组的指定部分复制到另一个数组中。
public class SystemArrayCopyExample {public static void main(String[] args) {int[] source = {1, 2, 3, 4, 5};int[] destination = new int[5];System.arraycopy(source, 0, destination, 0, 5);for (int num : destination) {System.out.print(num + " ");}}
}
5. 退出 JVM
  • System.exit(int status):用于终止当前正在运行的 Java 虚拟机,参数 status 为退出状态码,0 表示正常退出,非零值表示异常退出。
public class SystemExitExample {public static void main(String[] args) {System.out.println("程序开始执行");System.exit(0);System.out.println("这行代码不会被执行");}
}

Runtime 类

Runtime 类表示 Java 应用程序的运行时环境,每个 Java 应用程序都有一个单一的 Runtime 实例,通过 Runtime.getRuntime() 方法可以获取该实例。

1. 执行外部命令
  • Runtime.getRuntime().exec(String command):用于在 Java 程序中执行外部命令。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class RuntimeExecExample {public static void main(String[] args) {try {// 在 Windows 系统上执行 dir 命令,在 Linux 或 macOS 上执行 ls 命令String os = System.getProperty("os.name").toLowerCase();String command;if (os.contains("win")) {command = "cmd /c dir";} else {command = "ls";}Process process = Runtime.getRuntime().exec(command);BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}process.waitFor();} catch (IOException | InterruptedException e) {e.printStackTrace();}}
}
2. 内存管理
  • Runtime.getRuntime().totalMemory():返回 Java 虚拟机中的内存总量。
  • Runtime.getRuntime().freeMemory():返回 Java 虚拟机中的空闲内存量。
  • Runtime.getRuntime().maxMemory():返回 Java 虚拟机试图使用的最大内存量。
public class RuntimeMemoryExample {public static void main(String[] args) {Runtime runtime = Runtime.getRuntime();System.out.println("总内存: " + runtime.totalMemory() + " 字节");System.out.println("空闲内存: " + runtime.freeMemory() + " 字节");System.out.println("最大内存: " + runtime.maxMemory() + " 字节");}
}
3. 关闭钩子
  • Runtime.getRuntime().addShutdownHook(Thread hook):用于注册一个关闭钩子,当 JVM 正常关闭时,会执行该钩子线程。
public class RuntimeShutdownHookExample {public static void main(String[] args) {Runtime.getRuntime().addShutdownHook(new Thread(() -> {System.out.println("JVM 即将关闭,执行清理操作...");}));System.out.println("程序正在运行...");System.exit(0);}
}

综上所述,System 类主要提供了与系统相关的一些静态方法和属性,而 Runtime 类则提供了与 Java 虚拟机运行时环境交互的功能。

BigDecimal 

在 Java 中,BigDecimal 类位于 java.math 包下,用于进行高精度的十进制数运算。基本数据类型(如 float 和 double)在进行小数运算时会存在精度丢失的问题,而 BigDecimal 可以避免这种情况,适合用于需要精确计算的场景,如金融领域。

构造方法

BigDecimal 提供了多种构造方法,常用的有:

  • BigDecimal(String val):通过字符串来创建 BigDecimal 对象,这是推荐的方式,因为它能精确表示传入的数值。
  • BigDecimal(double val):通过 double 类型的值来创建对象,但可能会出现精度问题,因为 double 本身就存在精度误差。
  • BigDecimal(int val):通过 int 类型的值来创建对象。
  • BigDecimal(long val):通过 long 类型的值来创建对象。
import java.math.BigDecimal;public class BigDecimalConstructorExample {public static void main(String[] args) {// 使用字符串创建 BigDecimal 对象BigDecimal bd1 = new BigDecimal("0.1");System.out.println("通过字符串创建: " + bd1);// 使用 double 创建 BigDecimal 对象BigDecimal bd2 = new BigDecimal(0.1);System.out.println("通过 double 创建: " + bd2);// 使用 int 创建 BigDecimal 对象BigDecimal bd3 = new BigDecimal(10);System.out.println("通过 int 创建: " + bd3);}
}

常用方法

1. 基本运算方法
  • add(BigDecimal augend):加法运算,返回两个 BigDecimal 对象相加的结果。
  • subtract(BigDecimal subtrahend):减法运算,返回两个 BigDecimal 对象相减的结果。
  • multiply(BigDecimal multiplicand):乘法运算,返回两个 BigDecimal 对象相乘的结果。
  • divide(BigDecimal divisor, int scale, RoundingMode roundingMode):除法运算,scale 表示保留的小数位数,roundingMode 表示舍入模式。
import java.math.BigDecimal;
import java.math.RoundingMode;public class BigDecimalArithmeticExample {public static void main(String[] args) {BigDecimal num1 = new BigDecimal("10.5");BigDecimal num2 = new BigDecimal("2.5");// 加法BigDecimal sum = num1.add(num2);System.out.println("加法结果: " + sum);// 减法BigDecimal difference = num1.subtract(num2);System.out.println("减法结果: " + difference);// 乘法BigDecimal product = num1.multiply(num2);System.out.println("乘法结果: " + product);// 除法BigDecimal quotient = num1.divide(num2, 2, RoundingMode.HALF_UP);System.out.println("除法结果: " + quotient);}
}
2. 比较方法
  • compareTo(BigDecimal val):比较两个 BigDecimal 对象的大小,返回值为 -1(小于)、0(等于)或 1(大于)。
import java.math.BigDecimal;public class BigDecimalCompareExample {public static void main(String[] args) {BigDecimal num1 = new BigDecimal("10");BigDecimal num2 = new BigDecimal("20");int result = num1.compareTo(num2);if (result < 0) {System.out.println(num1 + " 小于 " + num2);} else if (result == 0) {System.out.println(num1 + " 等于 " + num2);} else {System.out.println(num1 + " 大于 " + num2);}}
}
3. 舍入模式

在进行除法运算或设置小数位数时,需要指定舍入模式,RoundingMode 枚举类提供了多种舍入模式,常用的有:

  • RoundingMode.HALF_UP:四舍五入,当舍弃部分的最高位大于等于 5 时进位。
  • RoundingMode.DOWN:直接舍弃后面的数字,不进行进位。
  • RoundingMode.UP:只要舍弃部分不为 0,就进位。
import java.math.BigDecimal;
import java.math.RoundingMode;public class BigDecimalRoundingExample {public static void main(String[] args) {BigDecimal num = new BigDecimal("3.14159");// 四舍五入保留两位小数BigDecimal roundedHalfUp = num.setScale(2, RoundingMode.HALF_UP);System.out.println("四舍五入结果: " + roundedHalfUp);// 直接舍弃保留两位小数BigDecimal roundedDown = num.setScale(2, RoundingMode.DOWN);System.out.println("直接舍弃结果: " + roundedDown);// 进位保留两位小数BigDecimal roundedUp = num.setScale(2, RoundingMode.UP);System.out.println("进位结果: " + roundedUp);}
}

  • 构造方法选择:尽量使用 BigDecimal(String val) 构造方法,避免使用 BigDecimal(double val) 以防止精度丢失。
  • 异常处理:在进行除法运算时,如果除不尽且未指定舍入模式,会抛出 ArithmeticException 异常,因此需要指定合适的舍入模式和小数位数。

BigDecimal 类为高精度的十进制数运算提供了强大的支持,在需要精确计算的场景中发挥着重要作用。

相关文章:

  • 2025年渗透测试面试题总结-渗透测试红队面试四(题目+回答)
  • Python+OpenCV实现手势识别与动作捕捉:技术解析与应用探索
  • 从需求到用例的AI路径:准确率与挑战
  • m个n维向量组中m,n的含义与空间的关系
  • 游戏引擎学习第270天:生成可行走的点
  • 什么是深拷贝什么是浅拷贝,两者区别
  • Linux基础(文件权限和用户管理)
  • 《Python星球日记》 第55天:迁移学习与预训练模型
  • Qt QCheckBox 使用
  • 多层嵌套子查询
  • 【Linux】线程的同步与互斥
  • unity通过transform找子物体只能找子级
  • TGRS | FSVLM: 用于遥感农田分割的视觉语言模型
  • 2025年PMP 学习七 -第5章 项目范围管理 (5.4,5.5,5.6 )
  • 1.短信登录
  • 【速通RAG实战:生成】8.智能生成引擎:大模型与Prompt工程黄金指南
  • 【Docker系列】docker inspect查看容器部署位置
  • (剪映)字幕实现卡拉OK效果
  • Java中Comparator排序原理详解
  • https,http1,http2,http3的一些知识
  • 王毅同印度国家安全顾问多瓦尔通电话
  • 多地再发网约车从业及投资风险提示:避免盲目花费大笔资金“购车”入行
  • 央行最新报告:积极落地5月推出的一揽子金融政策,促进经济供需平衡、物价合理回升
  • 新修订的《婚姻登记条例》明起施行,领证不用户口本了
  • 如此城市|上海老邬:《爱情神话》就是我生活的一部分
  • 习近平同俄罗斯总统普京举行会谈