news 2026/6/10 7:54:33

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/6/9 20:54:19

你用的AI生成模型安全吗?Open-AutoGLM隐私漏洞让人细思极恐,

第一章&#xff1a;你用的AI生成模型安全吗&#xff1f;Open-AutoGLM隐私漏洞让人细思极恐近年来&#xff0c;开源大模型的普及极大推动了AI应用的发展&#xff0c;但随之而来的安全隐患也逐渐浮出水面。Open-AutoGLM作为一款基于AutoGLM架构的开放生成模型&#xff0c;因其高效…

作者头像 李华
网站建设 2026/6/10 12:53:24

2026年数据工程师的AI转型之路:从传统ETL到智能体架构师,薪资提升与晋升加速的升维之战!

当大模型浪潮席卷全球时&#xff0c;数据工程师正站在一个独特的十字路口。一边是日益自动化的传统数据处理工作&#xff0c;另一边是新兴的AI工程领域带来的巨大机遇。2025年的职场现实是&#xff1a;掌握大模型技能的数据工程师&#xff0c;平均薪资比传统数据工程师高出35-5…

作者头像 李华
网站建设 2026/6/10 12:50:58

python玉米病虫害远程咨询系统的设计与实现_bydat7w3_Pycharm vue django flask

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现截图 同行可拿货,招校园代理 python玉米病虫害远程咨询系统的设计与实现_bydat7w3_Pycharm…

作者头像 李华
网站建设 2026/6/10 12:50:58

破解信创DevOps落地三大痛点:嘉为蓝鲸如何助力企业平稳落地?

信创 DevOps 落地过程中&#xff0c;工具兼容碎片化、人员技能不匹配、流程重构不彻底 三大痛点常导致项目延期、效能不达标、合规风险爆发。多数企业在国产化改造中&#xff0c;要么陷入 “工具拼凑难协同” 的困境&#xff0c;要么因团队不会用、流程不适配导致平台闲置。嘉为…

作者头像 李华
网站建设 2026/6/10 12:57:07

【紧急通知】Open-AutoGLM核心功能即将停用!只因缺少这个插件

第一章&#xff1a;【紧急通知】Open-AutoGLM核心功能即将停用&#xff01;只因缺少这个插件近日&#xff0c;Open-AutoGLM 项目团队发布紧急通告&#xff1a;自下个版本起&#xff0c;其核心自动化推理功能将被强制停用&#xff0c;原因竟是系统检测到关键依赖插件 GLM-Integr…

作者头像 李华