news 2026/4/3 3:15:59

java学习--System

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java学习--System

Java 中的System类,它是java.lang包下的核心系统类,提供了大量与系统交互的静态方法和静态属性,用于访问系统环境、执行系统级操作(如输入输出、垃圾回收、系统退出等),下面从核心特性、静态属性、常用方法等方面全面讲解:

一、核心特性

  1. System类是最终类(final),不能被继承;
  2. 构造方法被private修饰,无法通过new关键字创建实例,所有属性和方法均为静态,直接通过System.属性/方法名()调用;
  3. 功能覆盖系统输入输出、环境变量获取、数组复制、垃圾回收、系统时间获取等核心场景。

二、核心静态属性

System类提供了 3 个标准的输入 / 输出 / 错误输出流,是 Java 基础 IO 操作的核心入口:

静态属性类型说明
System.inInputStream标准输入流(默认对应键盘输入),用于读取外部输入数据
System.outPrintStream标准输出流(默认对应控制台输出),用于打印正常信息
System.errPrintStream标准错误输出流(默认对应控制台输出),专门用于打印错误信息,输出内容通常为红色(控制台默认样式)

示例:使用静态属性进行输入输出

import java.util.Scanner; public class SystemDemo { public static void main(String[] args) { // 1. System.out:打印正常信息 System.out.println("这是标准输出流的正常信息"); // 2. System.err:打印错误信息 System.err.println("这是标准错误输出流的错误信息"); // 3. System.in:读取键盘输入(结合 Scanner 使用) Scanner scanner = new Scanner(System.in); System.out.print("请输入您的姓名:"); String name = scanner.nextLine(); System.out.println("您好," + name); scanner.close(); } }

三、常用静态方法分类详解

1. 系统退出:exit(int status)

用于终止当前 Java 虚拟机(JVM)的运行,是程序主动退出的核心方法。

  • 参数status:退出状态码,0表示正常退出,非 0 表示异常退出(通常用1表示通用异常);
  • 该方法执行后,JVM 立即终止,后续代码不再执行。
public static void main(String[] args) { System.out.println("程序开始执行"); // 模拟业务判断,满足条件则退出 boolean needExit = true; if (needExit) { System.out.println("程序准备退出"); System.exit(0); // 正常退出JVM } // 以下代码不会执行 System.out.println("程序继续执行"); }

2. 垃圾回收:gc()

用于主动触发 Java 垃圾回收器(GC)的执行,建议 JVM 回收那些不再被引用的对象所占用的内存。

  • 注意:gc()建议性方法,并非强制性触发。JVM 会根据当前内存使用情况,决定是否立即执行垃圾回收,可能会忽略该请求;
  • 垃圾回收的核心逻辑由 JVM 底层实现,无需手动干预,仅在特殊场景下(如大量临时对象创建后)可调用该方法辅助内存释放。
public static void main(String[] args) { // 创建大量临时对象 for (int i = 0; i < 10000; i++) { new Object(); } System.out.println("创建大量临时对象完成"); // 建议JVM执行垃圾回收 System.gc(); // 等价于 Runtime.getRuntime().gc() System.out.println("已触发垃圾回收建议"); }

3. 数组复制:arraycopy()

用于快速复制数组的指定区间元素,是 Java 中数组复制的高效底层方法(Arrays.copyOf()等方法底层也是基于arraycopy()实现)。

方法签名
public static void arraycopy( Object src, // 源数组 int srcPos, // 源数组的起始复制索引(包含) Object dest, // 目标数组 int destPos, // 目标数组的起始存放索引(包含) int length // 要复制的元素个数 )
示例:数组复制
public static void main(String[] args) { int[] srcArr = {1, 2, 3, 4, 5}; int[] destArr = new int[10]; // 目标数组长度为10 // 复制源数组索引1~3的元素(2,3,4)到目标数组索引2开始的位置 System.arraycopy(srcArr, 1, destArr, 2, 3); System.out.println("目标数组内容:"); for (int num : destArr) { System.out.print(num + " "); // 输出:0 0 2 3 4 0 0 0 0 0 } }
注意事项
  • 若源数组或目标数组为null,会抛出NullPointerException
  • 若索引越界(如srcPos + length超过源数组长度),会抛出ArrayIndexOutOfBoundsException
  • 支持基本类型数组和引用类型数组的复制。

4. 系统时间获取

(1)currentTimeMillis():获取当前时间戳(毫秒级)

返回从1970 年 1 月 1 日 00:00:00 GMT(格林威治标准时间)到当前时刻的毫秒数,类型为long

  • 常用于计算程序执行耗时、生成唯一标识(简单场景)、时间戳记录等。
public static void main(String[] args) { // 记录程序开始时间 long startTime = System.currentTimeMillis(); // 模拟耗时操作(循环计算) long sum = 0; for (long i = 0; i < 1000000000L; i++) { sum += i; } // 记录程序结束时间 long endTime = System.currentTimeMillis(); // 计算耗时(毫秒) System.out.println("计算结果:" + sum); System.out.println("程序耗时:" + (endTime - startTime) + " 毫秒"); }
(2)nanoTime():获取高精度时间戳(纳秒级)

返回 JVM 启动以来的纳秒数(相对时间,非绝对时间),精度远高于currentTimeMillis()(1 纳秒 = 10^-9 秒)。

  • 适用于高精度时间间隔测量(如微秒级 / 纳秒级耗时统计),不适合用于记录绝对时间。
public static void main(String[] args) { long startNano = System.nanoTime(); // 模拟短时间操作 String str = ""; for (int i = 0; i < 1000; i++) { str += i; } long endNano = System.nanoTime(); // 转换为微秒(1微秒 = 1000纳秒) long costMicro = (endNano - startNano) / 1000; System.out.println("操作耗时:" + costMicro + " 微秒"); }

5. 环境变量与系统属性

(1)getenv():获取系统环境变量
  • System.getenv():返回所有系统环境变量的Map<String, String>集合;
  • System.getenv(String name):根据环境变量名获取对应值(如PATHJAVA_HOME)。
public static void main(String[] args) { // 1. 获取指定环境变量(JAVA_HOME) String javaHome = System.getenv("JAVA_HOME"); System.out.println("JAVA_HOME 路径:" + javaHome); // 2. 获取所有环境变量并遍历 System.out.println("\n所有系统环境变量:"); System.getenv().forEach((key, value) -> { System.out.println(key + "=" + value); }); }
(2)getProperty():获取 Java 系统属性
  • System.getProperty(String key):根据属性名获取对应值;
  • System.getProperties():返回所有 Java 系统属性的Properties对象;
  • 常用系统属性:user.name(当前用户名)、user.dir(当前工作目录)、java.version(Java 版本)、os.name(操作系统名称)。
public static void main(String[] args) { // 获取常用系统属性 String userName = System.getProperty("user.name"); String userDir = System.getProperty("user.dir"); String javaVersion = System.getProperty("java.version"); String osName = System.getProperty("os.name"); System.out.println("当前用户名:" + userName); System.out.println("当前工作目录:" + userDir); System.out.println("Java 版本:" + javaVersion); System.out.println("操作系统:" + osName); // 输出所有系统属性 System.out.println("\n所有Java系统属性:"); System.getProperties().list(System.out); }
(3)setProperty(String key, String value):设置 Java 系统属性

用于手动设置自定义 Java 系统属性,仅在当前 JVM 进程中有效,进程结束后失效。

public static void main(String[] args) { // 设置自定义系统属性 System.setProperty("app.name", "JavaSystemDemo"); System.setProperty("app.version", "1.0.0"); // 获取自定义属性 String appName = System.getProperty("app.name"); String appVersion = System.getProperty("app.version"); System.out.println("应用名称:" + appName); System.out.println("应用版本:" + appVersion); }

四、完整使用示例

import java.util.Scanner; public class SystemCompleteDemo { public static void main(String[] args) { // 1. 标准输入输出 System.out.println("=== 标准输入输出演示 ==="); Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); int num = scanner.nextInt(); System.out.println("你输入的整数是:" + num); if (num < 0) { System.err.println("错误:你输入的是负数!"); } // 2. 数组复制 System.out.println("\n=== 数组复制演示 ==="); int[] src = {10, 20, 30, 40, 50}; int[] dest = new int[8]; System.arraycopy(src, 1, dest, 2, 3); System.out.println("目标数组内容:"); for (int i : dest) { System.out.print(i + " "); } System.out.println(); // 3. 时间戳与耗时统计 System.out.println("\n=== 耗时统计演示 ==="); long startMs = System.currentTimeMillis(); long sum = 0; for (long i = 0; i < 500000000L; i++) { sum += i; } long endMs = System.currentTimeMillis(); System.out.println("求和结果:" + sum); System.out.println("耗时(毫秒):" + (endMs - startMs)); // 4. 系统属性与环境变量 System.out.println("\n=== 系统信息演示 ==="); System.out.println("Java 版本:" + System.getProperty("java.version")); System.out.println("当前工作目录:" + System.getProperty("user.dir")); System.out.println("PATH 环境变量:" + System.getenv("PATH").substring(0, 50) + "..."); // 5. 垃圾回收与系统退出 System.out.println("\n=== 垃圾回收与程序退出演示 ==="); System.gc(); System.out.println("已触发垃圾回收建议"); scanner.close(); // 正常退出程序 System.exit(0); // 后续代码不会执行 System.out.println("这段代码不会被输出"); } }

五、核心总结

  1. Systemjava.lang包下的final 静态类,无法实例化,所有功能通过静态属性 / 方法调用;
  2. 核心静态属性:in(标准输入)、out(标准输出)、err(标准错误输出);
  3. 核心方法分类:
    • 系统控制:exit()(退出 JVM)、gc()(建议垃圾回收);
    • 数组操作:arraycopy()(高效数组复制);
    • 时间获取:currentTimeMillis()(毫秒时间戳)、nanoTime()(纳秒高精度时间);
    • 环境信息:getenv()(系统环境变量)、getProperty()/setProperty()(Java 系统属性);
  4. 注意事项:
    • gc()是建议性方法,不保证 JVM 立即执行垃圾回收;
    • arraycopy()需避免索引越界和空指针异常;
    • nanoTime()是相对时间,适合耗时统计,不适合记录绝对时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 12:06:44

Open-AutoGLM移动端推理优化秘籍(仅限内部流传的3种压缩算法)

第一章&#xff1a;Open-AutoGLM部署到手机将 Open-AutoGLM 部署到移动设备&#xff0c;是实现本地化、低延迟 AI 推理的关键一步。借助轻量化模型转换与移动端推理框架&#xff0c;可以在 Android 或 iOS 设备上高效运行该模型。环境准备 在开始前&#xff0c;确保开发环境中已…

作者头像 李华
网站建设 2026/3/28 10:54:42

钉钉DeepResearch:企业级多智能体深度研究框架全解析!

简介 Dingtalk-DeepResearch是钉钉推出的企业级多智能体深度研究框架&#xff0c;采用三层架构实现深度研究、异构表格推理和多模态报告生成。该框架通过多阶段强化学习训练&#xff0c;结合熵引导的自适应学习和结构感知的表格处理技术&#xff0c;解决了企业场景下的数据异构…

作者头像 李华
网站建设 2026/4/2 1:03:43

CAD二次开发中直线的绘制、颜色、图层、线型

Color.h#pragma onceclass ModelSpace { public://将实体添加到模型空间static AcDbObjectId AddToModelSpace(AcDbEntity* pEnt); };class CLine { public://创建直线static AcDbObjectId AddLine(const AcGePoint3d &ptStart, const AcGePoint3d &ptEnd); };class Co…

作者头像 李华
网站建设 2026/4/1 16:36:20

物联网企业知识管理挑战?试试anything-llm解决方案

物联网企业知识管理困局破局之道&#xff1a;基于 Anything-LLM 的智能解决方案 在智能制造车间的某个角落&#xff0c;一名新入职的工程师正焦急地翻找着某款传感器的故障排查手册。他手头有十几份PDF文档、几页内部Wiki笔记&#xff0c;还有两年前一位离职同事留下的会议纪要…

作者头像 李华
网站建设 2026/3/25 6:55:01

java计算机毕业设计物流配送服务推荐系统 基于SpringBoot的同城智能货运匹配平台 面向小微电商的物流运力推荐与比价系统

计算机毕业设计物流配送服务推荐系统010489&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 快递柜前排队、电话催派、空驶返程……这些看似琐碎的“最后一公里”每天都在吞噬商家…

作者头像 李华