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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 的主要功能包括自动化构建、测试和部署。它能够监控版本控…