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 类为高精度的十进制数运算提供了强大的支持,在需要精确计算的场景中发挥着重要作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【嵌入式笔记】Modbus TCP

1.概述 定义&#xff1a;Modbus TCP 是 Modbus 协议的变体&#xff0c;基于 TCP/IP 协议栈&#xff0c;用于通过以太网实现工业设备间的通信。 背景&#xff1a;由施耐德电气&#xff08;原 Modicon 公司&#xff09;在 1999 年发布&#xff0c;将传统的 Modbus RTU/ASCII 适配…

《解锁React Native与Flutter:社交应用启动速度优化秘籍》

React Native和Flutter作为当下热门的跨平台开发框架&#xff0c;在优化应用启动性能方面各有千秋。今天&#xff0c;我们就深入剖析它们独特的策略与方法。 React Native应用的初始包大小对启动速度影响显著。在打包阶段&#xff0c;通过精准分析依赖&#xff0c;去除未使用的…

R语言学习--Day02--实战经验反馈

最近在做需要用R语言做数据清洗的项目&#xff0c;在网上看再多的技巧与语法&#xff0c;都不如在项目中实战学习的快&#xff0c;下面是我通过实战得来的经验。 判断Rstudio是否卡死 很多时候&#xff0c;我们在运行R语言代码时&#xff0c;即使只是运行框选的几行代码&#…

How Sam‘s Club nudge customers into buying more

Here’s how Sam’s Club (or similar warehouse memberships) nudge customers into buying more: It’s a classic psychological strategy rooted in sunk cost fallacy and loss aversion. 1. Prepaid Membership Creates a “Sunk Cost” Once you’ve paid the annual …

OpenHarmony系统HDF驱动开发介绍(补充)

一、HDF驱动简介 HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架&#xff0c;为驱动开发者提供驱动框架能力&#xff0c;包括驱动加载、驱动服务管理、驱动消息机制和配置管理。 简单来说&#xff1a;HDF框架的驱动和Linux的驱动比较相似都是由配置文件和驱动…

自然语言处理 (NLP) 入门:NLTK 与 SpaCy 的初体验

自然语言处理入门&#xff1a;NLTK 与 SpaCy 的初体验 在当今数字化飞速发展的浪潮中&#xff0c;自然语言处理&#xff08;NLP&#xff09;已经成为了极具热度的技术领域。自然语言处理的核心目标是让计算机能够理解、分析并生成人类语言&#xff0c;其应用场景极为广泛&…

LLaVA:开源多模态大语言模型深度解析

一、基本介绍 1.1 项目背景与定位 LLaVA(Large Language and Vision Assistant)是由Haotian Liu等人开发的开源多模态大语言模型,旨在实现GPT-4级别的视觉-语言交互能力。该项目通过视觉指令微调技术,将预训练的视觉编码器与语言模型深度融合,在多个多模态基准测试中达到…

如何利用大模型对文章进行分段,提高向量搜索的准确性?

利用大模型对文章进行分段以提高向量搜索准确性,需结合文本语义理解、分块策略优化以及向量表示技术。以下是系统性的解决方案: 一、分块策略的核心原则 语义完整性优先 分块需确保每个文本单元在语义上独立且完整。研究表明,当分块内容保持单一主题时,向量嵌入的语义表征能…

Java高频面试之并发编程-17

volatile 和 synchronized 的区别 在 Java 并发编程中&#xff0c;volatile 和 synchronized 是两种常用的同步机制&#xff0c;但它们的适用场景和底层原理有显著差异。以下是两者的详细对比&#xff1a; 1. 核心功能对比 特性volatilesynchronized原子性不保证复合操作的原…

技术债务积累,如何进行有效管理

识别和评估技术债务、明确技术债务的优先级、制定系统的还债计划、持续监控与预防技术债务产生是有效管理技术债务积累的重要策略。其中尤其要注重识别和评估技术债务&#xff0c;只有准确识别技术债务的种类和严重程度&#xff0c;才能制定出高效且有针对性的解决方案&#xf…

安装windows版本的nacos

一、下载nacos安装包 浏览器搜索nacos&#xff0c;进入nacos官网 https://nacos.io/docs/latest/overview/ 选择下载windows版本的nacos 二、解压缩 三、进入bin目录&#xff0c;cmd命令行窗口 四、启动nacos 查看日志 五、打开可视化页面查看 以上&#xff0c;就是安装wind…

小结:Android系统架构

https://developer.android.com/topic/architecture?hlzh-cn Android系统的架构&#xff0c;分为四个主要层次&#xff1a;应用程序层、应用框架层、库和运行时层以及Linux内核层。&#xff1a; 1. 应用程序层&#xff08;Applications&#xff09; 功能&#xff1a;这一层包…

鸿蒙5.0项目开发——鸿蒙天气项目的实现(欢迎页)

【高心星出品】 文章目录 欢迎页面效果数据字典创建数据库表格Splash页面页面功能欢迎页代码亮点 项目按照从数据库连接层–视图层–业务逻辑层这种三层架构开发&#xff0c;所以先设计了数据库表格的结构&#xff0c;在EntryAbility中创建表格。 欢迎页面效果 数据字典 sear…

使用谱聚类将相似度矩阵分为2类

使用谱聚类将相似度矩阵分为2类的步骤如下&#xff1a; 构建相似度矩阵&#xff1a;提供的1717矩阵已满足对称性且对角线为1。 计算度矩阵&#xff1a;对每一行求和得到各节点的度&#xff0c;形成对角矩阵。 计算归一化拉普拉斯矩阵&#xff1a;采用对称归一化形式 LsymI−D…

MySQL 8.0 OCP 英文题库解析(三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题16~25 试题16:…

【SQL】如何在 SQL 中统计结构化字符串的特征频率

在数据分析场景中&#xff0c;我们经常会遇到需要解析结构化字符串并统计特征出现次数的需求。本文将以常用数据库为例&#xff0c;探讨如何高效处理类似 [特征A][特征B][特征C] 格式的字符串数据&#xff0c;并实现特征频率统计。以下是完整的实现思路和解决方案。 一、问题场…

Docker Compose 的安装方法

以下是 Docker Compose 的安装方法整理&#xff0c;综合了多篇指南的推荐步骤和注意事项&#xff1a; 一、安装前准备 确保已安装 Docker Docker Compose 依赖 Docker 引擎运行&#xff0c;需先安装 Docker。若未安装&#xff0c;可通过以下命令一键安装&#xff08;国内服…

配置Nginx解决http host头攻击漏洞【详细步骤】

前言 大概内容&#xff1a; 安全系统渗透测试出host头攻击漏洞&#xff0c;下面是解决步骤&#xff0c;本人已测过无问题。 server_name aaabbb.com; if ($http_Host !~* ^127.0.0.1|aaabbb.com|localhost$){return 403;}

自研时序大模型讲解(4月29日)直播回顾

4 月 29 日&#xff0c;清华团队揭秘&#xff1a;时序大模型如何让数据“活”起来线上直播圆满结束。清华大学软件学院博士生&#xff0c;IoTDB 原生机器学习引擎 AINode 研发同学刘雍在线上面向数千人次的时序数据分析人员与 AI 大模型行业关注者&#xff0c;就时序大模型的发…

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第二维度,第三维度

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第1 维度,第二维度 attention_weights = torch.ones_like(prompt_embedding[:, :, 0]) 这行代码的作用是创建一个与 prompt_embedding[:, :, 0] 形状相同且所有元素都为 1 的张量,它用于初始化…