java.lang.System中系统属性

本文介绍了Java中的System类,包括其提供的各种有用的功能如标准输入输出、属性和环境变量的访问等,并详细列出了可通过System类获取的Java运行环境属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言


今天偶然看到系统中有获取到Java的运行环境,随即跟了下System类。


System类概要


System 类包含一些有用的类字段和方法,它不能被实例化。

System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。


属性和环境变量定义



相关值的描述
java.versionJava 运行时环境版本
java.vendorJava 运行时环境供应商
java.vendor.urlJava 供应商的 URL
java.homeJava 安装目录
java.vm.specification.versionJava 虚拟机规范版本
java.vm.specification.vendorJava 虚拟机规范供应商
java.vm.specification.nameJava 虚拟机规范名称
java.vm.versionJava 虚拟机实现版本
java.vm.vendorJava 虚拟机实现供应商
java.vm.nameJava 虚拟机实现名称
java.specification.versionJava 运行时环境规范版本
java.specification.vendorJava 运行时环境规范供应商
java.specification.nameJava 运行时环境规范名称
java.class.versionJava 类格式版本号
java.class.pathJava 类路径
java.library.path加载库时搜索的路径列表
java.io.tmpdir默认的临时文件路径
java.compiler要使用的 JIT 编译器的名称
java.ext.dirs一个或多个扩展目录的路径
os.name操作系统的名称
os.arch操作系统的架构
os.version操作系统的版本
file.separator文件分隔符(在 UNIX 系统中是“/”)
path.separator路径分隔符(在 UNIX 系统中是“:”)
line.separator行分隔符(在 UNIX 系统中是“/n”)
user.name用户的账户名称
user.home用户的主目录
user.dir用户的当前工作目录


获取方法


public static Properties getProperties()
可以通过getProperties()方法获取,

当然也可以通过如下方法将上表中的key传入获取。

public static String getProperty(String key)

demo:

package com.zp.test;
public class Env
{
	public static void main(String[] args)
	{
		String java_version = System.getProperty("java.version");
		String file_encoding = System.getProperty("file.encoding");
		String os_name = System.getProperty("os.name");
		System.out.println(java_version);
		System.out.println(file_encoding);
		System.out.println(os_name);
		System.out.println(System.getProperties().toString());
	}
}



<think>我们被要求详细解释java.lang.System类。根据引用[1]和引用[2],我们知道:-java.lang.System类是一个final类,位于java.lang包(无需导入),不能实例化(构造方法私有),所有方法都是静态方法。-它提供标准I/O流、访问系统属性、环境变量、加载文件和库的方法,以及一些实用方法(如数组复制)。接下来,我们将详细说明System类的常用方法和功能。##一、标准I/O流1.**标准输入流(System.in)**:通常对应键盘输入,是`InputStream`类型。2.**标准输出流(System.out)**:通常对应控制台输出,是`PrintStream`类型。3.**标准错误流(System.err)**:也是`PrintStream`类型,用于输出错误信息。示例:```java//从标准输入读取一个字节intdata=System.in.read();//输出到标准输出System.out.println("Hello,World!");//输出错误信息System.err.println("Erroroccurred!");```##二、系统属性System类提供访问和修改系统属性的方法。系统属性是JVM启动时通过`-D`选项设置的键值对。常用方法:-`staticStringgetProperty(Stringkey)`:获取指定键的系统属性。-`staticStringgetProperty(Stringkey,Stringdef)`:获取指定键的系统属性,如果不存在则返回默认值。-`staticPropertiesgetProperties()`:获取所有系统属性。-`staticvoidsetProperty(Stringkey,Stringvalue)`:设置系统属性。示例:```java//获取操作系统名称Stringos=System.getProperty("os.name");System.out.println("OS:"+os);//设置自定义属性System.setProperty("my.app.version","1.0");```常用系统属性键:-`java.version`:Java运行时环境版本-`java.home`:Java安装目录-`os.name`:操作系统名称-`user.name`:用户账户名称-`user.dir`:用户当前工作目录##三、环境变量通过`getenv`方法获取环境变量(操作系统级别的变量)。方法:-`staticStringgetenv(Stringname)`:获取指定环境变量的值。-`staticMap<String,String>getenv()`:获取所有环境变量。示例:```java//获取PATH环境变量Stringpath=System.getenv("PATH");//获取所有环境变量Map<String,String>env=System.getenv();```##四、加载文件和库-`staticvoidload(Stringfilename)`:加载指定文件名的本地库(如DLL或SO文件)。-`staticvoidloadLibrary(Stringlibname)`:加载由`libname`指定的系统库。示例:```java//加载名为"mylib"的库System.loadLibrary("mylib");```##五、实用方法1.**数组复制**:`staticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)`从源数组的指定位置复制指定长度的元素到目标数组的指定位置。示例:```javaint[]src={1,2,3,4,5};int[]dest=newint[5];System.arraycopy(src,0,dest,0,src.length);```2.**获取当前时间**:-`staticlongcurrentTimeMillis()`:返回当前时间(毫秒),从1970年1月1日UTC开始。-`staticlongnanoTime()`:返回当前时间(纳秒),用于高精度时间测量(如性能测试)。示例:```javalongstart=System.nanoTime();//执行一些操作longduration=System.nanoTime()-start;```3.**垃圾回收**:-`staticvoidgc()`:提示JVM运行垃圾回收器(但不保证立即执行)。-`staticvoidrunFinalization()`:运行挂起finalization的对象终止方法。4.**安全相关**:-`staticSecurityManagergetSecurityManager()`:获取系统安全管理器。-`staticvoidsetSecurityManager(SecurityManagers)`:设置系统安全管理器。5.**退出JVM**:`staticvoidexit(intstatus)`:终止当前运行的JVM,非零状态码表示异常终止。##六、示例:综合使用```javapublicclassSystemExample{publicstaticvoidmain(String[]args){//1.标准输出System.out.println("Starting...");//2.获取属性StringuserDir=System.getProperty("user.dir");System.out.println("Currentdir:"+userDir);//3.环境变量StringjavaHome=System.getenv("JAVA_HOME");System.out.println("JAVA_HOME:"+javaHome);//4.时间测量longstart=System.currentTimeMillis();//模拟耗时操作for(inti=0;i<1000000;i++){}longend=System.currentTimeMillis();System.out.println("Elapsedtime:"+(end-start)+"ms");//5.数组复制int[]a={1,2,3,4,5};int[]b=newint[5];System.arraycopy(a,0,b,0,a.length);System.out.println("Copiedarray:"+Arrays.toString(b));}}```##七、注意事项-`System.gc()`只是建议JVM进行垃圾回收,不保证立即执行。-`System.exit()`会终止整个JVM进程,谨慎使用。-系统属性和环境变量不同:系统属性是JVM内部的,环境变量是操作系统的。-`nanoTime()`用于测量时间间隔,与系统时间无关,且可能溢出(但间隔很长才会)。##总结`java.lang.System`是Java核心类,提供系统级操作功能。它封装了标准I/O流、系统属性访问、环境变量访问、时间获取、数组复制等重要功能[^1][^2]。§§相关问题§§1.System.arraycopy与Arrays.copyOf的性能对比?2.如何通过System类实现重定向标准输出流?3.System.getSecurityManager()的作用及实际应用场景?4.System.nanoTime()和System.currentTimeMillis()的区别及适用场景?5.如何通过System类加载动态链接库(DLL/SO)?</think>### Java.lang.System 类详解 `java.lang.System` 是 Java 核心类库中的关键工具类,提供与系统交互的基础功能。作为 `java.lang` 包的成员,它**无需显式导入**即可使用。以下是详细解析: #### 一、基础特性 1. **类声明** ```java public final class System // final类,不可继承 ``` 2. **构造方法** 私有化(禁止实例化): ```java private System() {} // 无法创建对象 ``` 3. **方法特性** 所有方法均为静态方法(直接通过类名调用) #### 二、核心功能详解 ##### 1. 标准 I/O 流 | 字段 | 类型 | 作用 | |--------------|---------------|----------------------| | `System.in` | `InputStream` | 标准输入流(键盘输入)| | `System.out` | `PrintStream` | 标准输出流(控制台) | | `System.err` | `PrintStream` | 错误输出流(红色文本)| **示例代码**: ```java // 读取用户输入 Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); // 输出到控制台 System.out.println("正常输出"); // 错误输出(IDE中通常显示红色) System.err.println("错误信息"); ``` ##### 2. 系统属性访问 ```java // 获取所有系统属性 Properties props = System.getProperties(); // 获取特定属性 String osName = System.getProperty("os.name"); // 操作系统名 String javaVer = System.getProperty("java.version"); // Java版本 String userDir = System.getProperty("user.dir"); // 当前工作目录 ``` **常用系统属性**: - `os.name`:操作系统名称 - `java.home`:JRE 安装路径 - `user.name`:当前用户名称 - `file.separator`:文件分隔符(如 `/` 或 `\`) ##### 3. 时间获取方法 ```java // 获取当前时间戳(毫秒,从1970-01-01开始) long currentTime = System.currentTimeMillis(); // 高精度计时(纳秒,适合性能测试) long start = System.nanoTime(); // ...执行代码... long duration = System.nanoTime() - start; ``` ##### 4. 数组操作 **高效数组拷贝**: ```java int[] src = {1, 2, 3, 4, 5}; int[] dest = new int[5]; System.arraycopy(src, 0, dest, 0, src.length); // 参数:源数组, 源起始位置, 目标数组, 目标起始位置, 拷贝长度 ``` ##### 5. 系统资源管理 ```java // 强制垃圾回收(仅建议JVM执行) System.gc(); // 运行挂起的finalization方法 System.runFinalization(); // 终止JVM(0表示正常退出) System.exit(0); ``` ##### 6. 环境变量访问 ```java // 获取PATH环境变量 String path = System.getenv("PATH"); // 获取所有环境变量 Map<String, String> env = System.getenv(); ``` #### 三、高级用法示例 ##### 1. 重定向标准输出 ```java // 将控制台输出重定向到文件 PrintStream fileOut = new PrintStream("output.log"); System.setOut(fileOut); // 重定向System.out System.out.println("此内容将写入文件"); ``` ##### 2. 性能测试模板 ```java long startTime = System.nanoTime(); // 被测试的代码块 for (int i = 0; i < 1000000; i++) { Math.sqrt(i); } long elapsedNanos = System.nanoTime() - startTime; double elapsedMillis = elapsedNanos / 1_000_000.0; System.out.printf("执行耗时: %.3f 毫秒%n", elapsedMillis); ``` #### 四、注意事项 1. **资源管理** 重定向流后需调用 `flush()` 确保数据写入 2. **时间方法选择** - `currentTimeMillis()`:适合时间戳需求 - `nanoTime()`:适合短时间间隔测量 3. **退出代码规范** 非零退出码表示异常终止(如 `System.exit(1)`) 4. **安全限制** 安全管理器可能限制 `setProperties()` 等敏感操作 #### 五、与 Runtime 类的区别 | 功能 | System 类 | Runtime 类 | |------------------|--------------------------|-------------------------| | 实例化方式 | 纯静态方法 | 需通过 `getRuntime()` 获取实例 | | 垃圾回收触发 | `gc()` | `gc()` | | 进程管理 | 无 | `exec()` 执行外部命令 | | 内存信息 | 无 | `totalMemory()`/`freeMemory()` | > 提示:基础系统操作优先使用 `System`,进程管理需用 `Runtime`[^2] --- ### 总结 `System` 类提供: - 标准 I/O 流访问 - 系统属性和环境变量获取 - 精确时间测量能力 - 高效数组拷贝方法 - JVM 生命周期控制 它是 Java 系统级编程的基石类,适用于控制台交互、性能分析、系统信息获取等场景[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值