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.pswp.cn/news/905525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905525.shtml
英文地址,請注明出處:http://en.pswp.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 的張量,它用于初始化…