Java-System工具類深度解析

Java-System工具類深度解析

  • 前言
  • 一、System 類概述
    • 1.1 基本定義與特點
    • 1.2 重要成員變量
  • 二、標準輸入輸出功能
    • 2.1 標準輸入(System.in)
    • 2.2 標準輸出(System.out)
    • 2.3 標準錯誤輸出(System.err)
  • 三、系統屬性與環境變量獲取
    • 3.1 獲取系統屬性
    • 3.2 獲取環境變量
  • 四、其他重要方法
    • 4.1 `exit(int status)`
    • 4.2 `gc()`
    • 4.3 `currentTimeMillis()`
  • 總結

前言

Java中的System工具類是一個不可或缺的存在,它提供了一系列與系統相關的操作方法,涵蓋標準輸入輸出、系統屬性獲取、內存管理等多個重要功能,在開發過程中頻繁被使用。無論是初學者搭建簡單控制臺程序,還是資深開發者進行復雜系統調試與性能優化,都離不開System類的支持。本文我將深入剖析System工具類的各個功能模塊,結合豐富的代碼示例,帶你全面掌握其使用方法與應用場景。

一、System 類概述

1.1 基本定義與特點

System類位于java.lang包下,是 Java 語言中一個特殊的、被final修飾的類,這意味著它不能被繼承。System類中的所有屬性和方法都是static的,因此無需創建System類的實例,直接通過類名調用即可,使用起來非常便捷。它就像是 Java 程序與操作系統之間的橋梁,通過它可以實現對系統資源的訪問與控制 。

1.2 重要成員變量

System類包含三個重要的static成員變量:

  • in:類型為InputStream,代表標準輸入流,通常對應鍵盤輸入。在控制臺程序中,我們常用它來接收用戶輸入的數據,例如通過Scanner類包裝System.in來讀取用戶在控制臺輸入的字符串、數字等。

  • out:類型為PrintStream,代表標準輸出流,用于將程序的輸出結果顯示在控制臺。我們最常用的System.out.println()方法就是通過這個輸出流將內容打印到控制臺。

  • err:同樣是PrintStream類型,代表標準錯誤流,用于輸出程序運行過程中產生的錯誤信息。與System.out不同,System.err的輸出通常會優先顯示,并且不受緩沖區的影響,方便開發者快速定位程序中的錯誤 。

二、標準輸入輸出功能

2.1 標準輸入(System.in)

通過System.in實現標準輸入時,由于System.in是字節流,在實際使用中,通常會將其包裝成更方便處理的字符流。常見的方式是使用Scanner類或BufferedReader類:

  • 使用 Scanner 類
import java.util.Scanner;public class SystemInExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請輸入你的名字: ");String name = scanner.nextLine();System.out.println("你好, " + name + "!");scanner.close();}
}

在上述代碼中,創建Scanner對象并傳入System.in,然后使用nextLine()方法讀取用戶在控制臺輸入的一行字符串。需要注意的是,使用完畢后要調用scanner.close()關閉Scanner,釋放資源。

  • 使用 BufferedReader 類
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class BufferedReaderExample {public static void main(String[] args) {try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {System.out.print("請輸入一個整數: ");String input = reader.readLine();int num = Integer.parseInt(input);System.out.println("你輸入的整數是: " + num);} catch (IOException e) {e.printStackTrace();} catch (NumberFormatException e) {System.err.println("輸入格式錯誤,請輸入有效的整數!");}}
}

這里通過InputStreamReaderSystem.in轉換為字符流,再用BufferedReader包裝,使用readLine()方法讀取輸入,同時對可能出現的IOExceptionNumberFormatException進行了異常處理。

2.2 標準輸出(System.out)

System.out提供了豐富的輸出方法:

  • print():輸出指定內容,不換行。例如System.out.print("Hello");會在控制臺輸出Hello,后續內容會接著輸出。

  • println():輸出指定內容并換行。System.out.println("World");輸出World后,光標會移到下一行。

  • printf():按照指定格式輸出內容,類似于 C 語言中的printf函數。例如:

public class SystemOutPrintfExample {public static void main(String[] args) {double pi = 3.1415926;System.out.printf("圓周率π約為: %.2f", pi);}
}

上述代碼中,使用printf()方法按照%.2f的格式輸出圓周率pi,保留兩位小數,輸出結果為圓周率π約為: 3.14

2.3 標準錯誤輸出(System.err)

當程序出現錯誤時,使用System.err輸出錯誤信息有助于快速定位問題:

public class SystemErrExample {public static void main(String[] args) {try {int result = 10 / 0;} catch (ArithmeticException e) {System.err.println("發生錯誤: 除數不能為0");e.printStackTrace(System.err);}}
}

在上述代碼中,由于進行了除以 0 的操作會拋出ArithmeticException異常,通過System.err.println()輸出自定義錯誤提示,e.printStackTrace(System.err)將異常堆棧信息輸出到標準錯誤流,方便開發者查看詳細的錯誤信息 。

三、系統屬性與環境變量獲取

3.1 獲取系統屬性

System類提供了getProperties()方法用于獲取系統的所有屬性,返回一個Properties對象;getProperty(String key)方法用于獲取指定屬性的值。常見的系統屬性有:

  • os.name:操作系統名稱,如Windows 10Linux等。

  • user.dir:用戶當前工作目錄。

  • java.version:Java 運行時環境版本。

import java.util.Properties;public class SystemPropertiesExample {public static void main(String[] args) {// 獲取所有系統屬性Properties properties = System.getProperties();properties.list(System.out);// 獲取指定系統屬性String osName = System.getProperty("os.name");System.out.println("操作系統名稱: " + osName);String javaVersion = System.getProperty("java.version");System.out.println("Java版本: " + javaVersion);}
}

上述代碼先使用getProperties()獲取所有系統屬性并打印,再通過getProperty()分別獲取操作系統名稱和 Java 版本并輸出。

3.2 獲取環境變量

可以使用System.getenv()方法獲取所有環境變量,返回一個MapSystem.getenv(String name)方法獲取指定名稱的環境變量值。例如,獲取系統的PATH環境變量:

import java.util.Map;public class SystemEnvExample {public static void main(String[] args) {// 獲取所有環境變量Map<String, String> envMap = System.getenv();for (Map.Entry<String, String> entry : envMap.entrySet()) {System.out.println(entry.getKey() + " = " + entry.getValue());}// 獲取指定環境變量String path = System.getenv("PATH");System.out.println("PATH環境變量: " + path);}
}

這段代碼先遍歷輸出所有環境變量,再獲取并輸出PATH環境變量的值。

四、其他重要方法

4.1 exit(int status)

該方法用于終止當前運行的 Java 虛擬機。參數status表示程序的退出狀態,一般status = 0表示正常退出,非 0 值表示異常退出。例如:

public class SystemExitExample {public static void main(String[] args) {boolean isError = false;// 模擬某種條件判斷if (isError) {System.err.println("程序出現錯誤,即將退出...");System.exit(1);}System.out.println("程序正常運行結束");}
}

isErrortrue時,程序輸出錯誤信息后調用System.exit(1)異常退出;否則正常輸出信息后結束程序。

4.2 gc()

System.gc()方法用于請求 Java 虛擬機進行垃圾回收。需要注意的是,調用該方法只是發出垃圾回收請求,虛擬機不一定立即執行垃圾回收操作,具體執行由虛擬機的垃圾回收機制決定 。

public class SystemGcExample {public static void main(String[] args) {// 創建一些對象,占用內存for (int i = 0; i < 100000; i++) {new Object();}System.gc();System.out.println("已請求垃圾回收");}
}

上述代碼創建了大量對象占用內存后,調用System.gc()請求垃圾回收。

4.3 currentTimeMillis()

System.currentTimeMillis()方法返回當前時間與協調世界時 1970 年 1 月 1 日午夜之間的時間差,以毫秒為單位。常用于計算程序執行時間、生成時間戳等場景。

public class SystemTimeMillisExample {public static void main(String[] args) {long startTime = System.currentTimeMillis();// 模擬一段耗時操作for (int i = 0; i < 100000000; i++) {// 空循環}long endTime = System.currentTimeMillis();long elapsedTime = endTime - startTime;System.out.println("程序執行耗時: " + elapsedTime + " 毫秒");}
}

在上述代碼中,通過記錄操作前后的時間戳,計算出循環操作的執行時間。

總結

System工具類作為 Java 中與系統交互的重要橋梁,其豐富的功能涵蓋了輸入輸出、系統屬性獲取、程序控制等多個方面。從標準輸入輸出的靈活使用,到系統屬性與環境變量的便捷獲取,再到程序退出控制、垃圾回收請求和時間戳生成等操作,System類在各類 Java 程序中都發揮著關鍵作用。

若這篇內容幫到你,動動手指支持下!關注不迷路,干貨持續輸出!
ヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノ

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80880.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

刪除用戶憑證

Git 部分倉庫無法操作&#xff0c;部分倉庫沒問題 問題出現 我用個人電腦修改了項目&#xff0c;提交了git。然后第二天在公司電腦git pull的時候失敗&#xff0c;只有部分倉庫&#xff0c;git colne直接失敗&#xff0c;部分倉庫無問題。 解決方式 刪除git相關憑證&#xff…

19. 結合Selenium和YAML對頁面實例化PO對象改造

19. 結合Selenium和YAML對頁面實例化PO對象改造 一、架構升級核心思路 1.1 改造核心目標 # 原始PO模式&#xff1a;顯式定義元素定位 username (id, ctl00_MainContent_username)# 改造后PO模式&#xff1a;動態屬性訪問 self.username.send_keys(Tester) # 自動觸發元素定…

鴻蒙App開發學習路徑

以下是一份系統的鴻蒙&#xff08;HarmonyOS&#xff09;App開發學習路徑&#xff0c;適合從零開始逐步掌握相關技能&#xff1a; 1. 基礎知識儲備 1.1 理解鴻蒙系統 鴻蒙核心特性&#xff1a;分布式能力、一次開發多端部署、原子化服務、ArkUI框架。與Android/iOS的區別&…

spring boot啟動報錯:2002 - Can‘t connect to server on ‘192.168.10.212‘ (10061)

錯誤代碼 10061 通常表明無法建立到指定服務器的網絡連接。這個錯誤屬于 Windows Sockets 錯誤代碼&#xff0c;具體指的是無法建立網絡連接&#xff0c;通常是因為目標地址不可達。以下是一些解決此問題的步驟&#xff1a; 檢查 IP 地址和端口&#xff1a; 確保你輸入的 IP …

ARMv7的NVIC中斷優先級

1. 優先級模型 數值規則:數值越小,優先級越高(例如優先級0的異常比優先級1的異常更高);若多個異常的優先級相同,則 異常號(Exception Number) 較小的異常優先執行。固定優先級異常(不可配置):異常類型 優先級值 說明 Reset -3 最高優先級(系統復位) NMI -2 不可屏…

gitee錯誤處理總結

背景 如上圖&#xff0c;根據圖片中的 Git 錯誤提示&#xff0c;我們遇到的問題是 ?本地分支落后于遠程分支&#xff0c;導致 git push 被拒絕。 ?問題原因? 遠程倉庫的 master 分支有其他人推送的新提交&#xff0c;而您的本地 master 分支未同步這些更新&#xff08;即本…

阿里云合集(不定期更新)

一、阿里云申請免費域名證書流程&#xff1a;https://blog.csdn.net/humors221/article/details/143266059 二、阿里云發送國內短信怎樣編程&#xff1a;https://blog.csdn.net/humors221/article/details/139544193 三、阿里云ECS服務器磁盤空間不足的幾個文件&#xff1a;h…

leetcode239 滑動窗口最大值deque方式

這段文字描述的是使用單調隊列&#xff08;Monotonic Queue&#xff09; 解決滑動窗口最大值問題的優化算法。我來簡單解釋一下&#xff1a; 核心思路 問題分析&#xff1a;在滑動窗口中&#xff0c;若存在兩個下標 i < j 且 nums[i] ≤ nums[j]&#xff0c;則 nums[i] 永遠…

小白的進階之路系列之三----人工智能從初步到精通pytorch計算機視覺詳解下

我們將繼續計算機視覺內容的講解。 我們已經知道了計算機視覺,用在什么地方,如何用Pytorch來處理數據,設定一些基礎的設置以及模型。下面,我們將要解釋剩下的部分,包括以下內容: 主題內容Model 1 :加入非線性實驗是機器學習的很大一部分,讓我們嘗試通過添加非線性層來…

elementUI 單選框存在多個互斥的選項中選擇的場景

使用 el-radio-group 來使用單選框組&#xff0c;代碼如下&#xff1a; <el-radio-group input"valueChangeHandler" v-model"featureForm.type"><el-radio name"feature" label"feature">業務對象</el-radio><…

Qt項目開發中所遇

講述下面代碼所表示的含義&#xff1a; QWidget widget_19 new QWidget(); QVBoxLayout *touchAreaLayout new QVBoxLayout(widget_19);QWidget *buttonArea new QWidget(widget_19); 1、新建一個名為widget_19的QWidget&#xff0c;將給其應用垂直管路布局。 2、新建一個…

相機標定與圖像處理涉及的核心坐標系

坐標系相互關系 #mermaid-svg-QxaMjIcgWVap0awV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QxaMjIcgWVap0awV .error-icon{fill:#552222;}#mermaid-svg-QxaMjIcgWVap0awV .error-text{fill:#552222;stroke:#552…

CICD編譯時遇到npm error code EINTEGRITY的問題

場景 CICD編譯時拋出npm error code EINTEGRITY的錯誤 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…

使用Spring Boot與Spring Security構建安全的RESTful API

使用Spring Boot與Spring Security構建安全的RESTful API 引言 在現代Web應用開發中&#xff0c;安全性是一個不可忽視的重要方面。Spring Boot和Spring Security為開發者提供了一套強大的工具&#xff0c;用于構建安全的RESTful API。本文將詳細介紹如何結合Spring Boot和Sp…

機器人拖動示教控制

機器人拖動示教控制 機器人拖動視角控制與軌跡記錄 1. 知識目標 體驗ES機器人拖動視角操作體驗ES機器人拖動軌跡記錄 2. 技能目標 掌握ES機器人拖動視角操作掌握ES機器人拖動軌跡記錄 3. ES機器人拖動視角操作 3.1 操作步驟 點擊“拖動視角”按鈕長按“啟用”鍵約3秒進入…

RuoYi-Vue3-FastAPI框架的功能實現(上)

RuoYi-Vue3-FastAPI框架的功能實現&#xff08;上&#xff09; 感謝大佬給出關于python后端的若依框架&#xff0c;希望這個簡單文檔能幫助到大家。 安裝與運行&#xff1a; 下載地址&#xff1a;Vue2版本&#xff1a; Gitte倉庫地址&#xff1a;RuoYi-Vue-FastAPI: 基于Vu…

Paimon和Hive相集成

Paimon版本1.17 Hive版本3.1.3 1、Paimon集成Hive 將paimon-hive-connector.jar復制到auxlib中&#xff0c;下載鏈接Index of /groups/snapshots/org/apache/https://repository.apache.org/snapshots/org/apache/paimon/ 通過flink進入查看paimon /opt/softwares/flink-1…

【Leetcode 每日一題】3362. 零數組變換 III

問題背景 給你一個長度為 n n n 的整數數組 n u m s nums nums 和一個二維數組 q u e r i e s queries queries&#xff0c;其中 q u e r i e s [ i ] [ l i , r i ] queries[i] [l_i, r_i] queries[i][li?,ri?]。 每一個 q u e r i e s [ i ] queries[i] queries[i]…

計算機視覺與深度學習 | 用于圖像分割的自監督學習(Self-Supervised Learning)方法綜述

圖像分割 用于圖像分割的自監督學習(Self-Supervised Learning)方法綜述**1. 背景與意義****2. 方法演進****3. 圖像分割子任務與SSL策略****4. 自監督預訓練任務分類****5. 基準數據集與評估指標****6. 挑戰與未來方向****總結**用于圖像分割的自監督學習(Self-Supervised …

Jenkins集成Docker與K8S構建

Jenkins 是一個開源的持續集成和持續交付(CI/CD)工具,廣泛用于自動化軟件開發過程中的構建、測試和部署任務。它通過插件系統提供了高度的可擴展性,支持與多種開發工具和技術的集成。 Jenkins 的核心功能 Jenkins 的主要功能包括自動化構建、測試和部署。它能夠監控版本控…