当前位置: 首页 > news >正文

JDK 17 中 java.lang.System 常用方法及应用场景

概述

java.lang.System 在 JDK 17 中依然是最核心的系统交互类之一。以下是针对 JDK 17 的常用方法详解,包含新特性和最佳实践。

一、标准 I/O 流(更新至 JDK 17)

1. 控制台输出

// 传统输出方式(仍然可用)
System.out.println("Hello JDK 17");// 新增:使用文本块(Text Blocks,JDK 15 正式特性)
System.out.println("""This is a multi-linetext block in JDK 17.No more messy concatenation!""");

应用场景:日志输出、多行文本处理

2. 错误输出(新增格式化方法)

// JDK 17 增强的格式化错误输出
System.err.printf("Error at %s: %d%n", Instant.now(), errorCode);// 使用新的格式说明符
System.err.printf("Hex value: %#x %n", 255);  // 输出: Hex value: 0xff

二、系统属性操作(JDK 17 安全增强)

1. 获取系统属性(新增过滤检查)

// 传统方式
String javaHome = System.getProperty("java.home");// JDK 17 更安全的属性读取(避免NPE)
String nonExistent = System.getProperty("non.existent.prop", "default-value");// 获取模块化相关信息(JDK 9+)
System.out.println("Module path: " + System.getProperty("jdk.module.path"));

2. 只读系统属性视图(JDK 17)

// 获取不可修改的系统属性视图
Map<String,String> props = System.getProperties();
try {props.put("new.key", "value");  // 抛出 UnsupportedOperationException
} catch (UnsupportedOperationException e) {System.err.println("系统属性是只读的!");
}

三、时间测量(JDK 17 新增时间API整合)

1. 高精度时间测量

// 传统方式
long start = System.nanoTime();
// ...操作...
long duration = System.nanoTime() - start;// JDK 17 推荐结合 java.time
Instant startInstant = Instant.now();
// ...操作...
Duration elapsed = Duration.between(startInstant, Instant.now());
System.out.printf("耗时: %d ms %n", elapsed.toMillis());

四、数组操作(JDK 17 优化)

1. 数组复制(新增安全检查)

// 传统数组复制
int[] src = IntStream.range(1, 6).toArray();
int[] dest = new int[5];
System.arraycopy(src, 0, dest, 0, 5);// JDK 17 更安全的替代方案(推荐)
int[] copy = Arrays.copyOf(src, src.length);

五、环境变量访问(JDK 17 安全改进)

1. 读取环境变量

// 传统方式
String path = System.getenv("PATH");// JDK 17 更安全的访问方式
Optional<String> javaHome = Optional.ofNullable(System.getenv("JAVA_HOME"));
javaHome.ifPresentOrElse(home -> System.out.println("Java Home: " + home),() -> System.err.println("JAVA_HOME 未设置")
);

六、新增实用方法(JDK 11+)

1. System.console() 增强

// JDK 17 更健壮的控制台交互
Console console = System.console();
if (console != null) {String input = console.readLine("请输入密码: ");char[] password = console.readPassword();Arrays.fill(password, ' ');  // 安全清除
} else {System.err.println("无控制台环境");
}

2. System.Logger (JDK 9+)

// 系统统一日志接口
System.Logger logger = System.getLogger("MyApp");
logger.log(System.Logger.Level.INFO, "JDK 17 系统日志");// 输出示例:
// 六月 24, 2023 10:00:00 上午 MyApp INFO: JDK 17 系统日志

七、进程处理(JDK 17 新增)

1. 进程句柄 API

// 获取当前进程信息(JDK 9+)
ProcessHandle current = ProcessHandle.current();
System.out.println("PID: " + current.pid());
System.out.println("CPU 使用: " + current.info().cpuDuration());// 列出所有进程(JDK 17 增强)
ProcessHandle.allProcesses().filter(p -> p.info().command().isPresent()).limit(5).forEach(p -> System.out.println(p.info().command().get()));

八、内存管理(JDK 17 改进)

1. 内存状态查询

// JDK 17 更精确的内存报告
Runtime runtime = Runtime.getRuntime();
System.out.printf("""内存使用情况:总内存: %d MB可用内存: %d MB最大内存: %d MB""",runtime.totalMemory() / (1024 * 1024),runtime.freeMemory() / (1024 * 1024),runtime.maxMemory() / (1024 * 1024)
);

最佳实践建议(JDK 17)

1、替代弃用方法

  1. 使用 Instant.now() 替代 System.currentTimeMillis()

  2. 使用 Arrays.copyOf() 替代 System.arraycopy() 简单场景

2、安全增强

// 不推荐(可能暴露敏感信息)
System.getProperties().list(System.out);// 推荐方式(JDK 17)
Set<String> sensitiveKeys = Set.of("user.name", "user.home");
System.getProperties().entrySet().stream().filter(e -> !sensitiveKeys.contains(e.getKey())).forEach(e -> System.out.println(e.getKey() + "=" + e.getValue()));

3、模块化兼容

// 检查模块系统
if (System.getProperty("jdk.module.main") != null) {System.out.println("运行在模块模式下");
}

完整示例:JDK 17 系统信息工具

public class SystemInfoTool {public static void main(String[] args) {printSystemInfo();checkJavaVersion();}private static void printSystemInfo() {String osInfo = """OS 信息:名称: %s版本: %s架构: %s""".formatted(System.getProperty("os.name"),System.getProperty("os.version"),System.getProperty("os.arch"));System.out.println(osInfo);}private static void checkJavaVersion() {Runtime.Version version = Runtime.version();System.out.printf("""Java 版本信息:Feature: %dInterim: %dUpdate: %dPatch: %dLTS: %b""",version.feature(),version.interim(),version.update(),version.patch(),version.feature() == 17  // JDK 17 是 LTS);}
}

输出示例:

OS 信息:
名称: Windows 10
版本: 10.0
架构: amd64

Java 版本信息:
Feature: 17
Interim: 0
Update: 5
Patch: 0
LTS: true

http://www.lqws.cn/news/500977.html

相关文章:

  • 对于高考边界的理解以及未来就业层级的学习与思考
  • 鸿蒙HarmonyOS 5开发:AlphabetIndexer组件在通讯录中的高效索引实现(附:代码)
  • Linux环境下MariaDB如何实现负载均衡
  • 华为云Flexus+DeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践
  • C++修炼:异常
  • Excel学习04
  • 代理模式:控制对象访问的守门员[特殊字符],优雅实现功能增强与访问控制!
  • 嵌入式Linux驱动开发基础-1 hello驱动
  • 【大模型问题】ms-swift微调时,显存持续增长原因分析与解决方案
  • 【CS创世SD NAND征文】基于全志V3S与CS创世SD NAND的物联网智能路灯网关数据存储方案
  • Nginx负载均衡
  • Docker 数据持久化完全指南:Volume、Bind Mount 与匿名卷
  • OpenCV CUDA模块设备层-----创建一个“常量指针访问器” 的工具函数constantPtr()
  • Docker Compose与私有仓库部署
  • Vue3+TypeScript移动端H5播放器选型指南:M3U8与主流播放器深度解析
  • 聚宽量化——股票时间序列函数
  • 传统消防演练与 VR 消防演练的区别有哪些
  • Unreal5从入门到精通之如何录制360°VR全景视频
  • Python-3-数据结构(列表)
  • Android edge-to-edge兼容适配
  • 监管报送面试回答思路和示例
  • Learning Dynamic Prompts for All-in-One Image Restoration
  • 利用 Python 脚本批量查找并删除指定 IP 的 AWS Lightsail 实例
  • 数据采集合规安全是品牌控价基石
  • 【unitrix】 4.3 左移运算(<<)的实现(shl.rs)
  • Jupyter Notebook 完全指南:从入门到生产力工具
  • 【格与代数系统】示例2
  • 在训练词编码模型使用mask还是自回归,在训练生成大模型采用mask还是自回归?
  • 【格与代数系统】示例
  • linux 下 Doris 单点部署