java.lang.System

答: 系统类即java.lang.System是一个特殊的类,它是Object类的子类。其最主要的特点是使用前不需要用new语句进行初始化,因为在系统启动时,已自动对系统类进行初始化,分配了相应的内存区。系统类是专门为用户程序而设置的,它为用户程序提供当前环境下的系统资源。
     系统类主要提供下述功能:
     ①标准的输入/输出
     System类通过三个对象System.in,System.out和System.err提供输入/输出功能和出错指示功能。这三个对象的名字在表示上比较特殊,只是为了便于程序员调用。
     System.in最主要的功能是提供方法 read()用来读字符。若没有读到字符,则返回值为-1。
     System.out最主要的功能是提供print(),println()和write()三个方法。print()方法和println()方法的功能基本相同,都是打印字符串,只是后者自动在字符串后面加一个换行符而前者没有加。所以,下面二个语句是等效的:
         System.out.println(“We are students.”);

         System.out.print(“We are students.\n”);
由于 print语句没有换行功能,所以在字符串后加“\n”,增添了换行动作。
     在使用println()方法和print()方法时,程序中不需要创建System类的对象,而是直接用如上语句调用这两个方法。
     println()方法也可以这样使用:
         String sir= “We are students.”;
         System.out.println(str);
这两个语句和上述语句功能相同。
     在以后的章节中,我们将看到许多例子使用println()方法。
     事实上,对于系统类的任何方法,都可以这样调用。这无疑为应用程序使用系统资源带来很多方便。
     下面的例子中既用了read方法,又用了println方法:
          1  class Count{
          2      public static void main(String sir[]){
          3           int c=0;
          4           while(System.in.read()! == -1)
          5                 c++;
          6           System.out.println(“There are”+ c +”chars”);
          7      }
          8  }
上述程序中,第4行语句用read()方法读取字符。只要返回值不是-1,即读到了字符,则使 c加1。第6行语句则打印出信息,两对引号中是要打印的字符串,中间的“c”是程序运行中统计的字符数。
     System.err的功能是为用户程序显示出错信息。
     ②系统属性的获取和设置
     系统类提供了getProPerty方法用来获取系统的属性,包括Java版本号、操作系统号和用户目录等。
     比如:
         System.getProperty(“OS.name”);
上述语句可获得当前系统的操作系统名字。
     又比如:
         system.getProperty(“Java.version”);
上述语句执行后返回Java版本号。
     如果在getProgerty的入口参数中采用下列关键字,将获得相应属性:
     user.dir 用户目录
     user.name 用户名
     path.seParator 当前操作系统的路径分隔符
     OS.name 当前操作系统的名字
     Java.version Java版本号
     Java.name Java安装目录
     File.separator 文件分隔符
     System类的setProperties方法用来设置或修改系统的属性。不过,经过用户程序修改的系统属性是暂时性的,如果系统重新启动,那么,系统属性又将是其原始属性了。
     比如:
         System.setProperties(p);
上述语句将系统属性按对象P的内容来设置,p是此前已经创建的一个属性对象。
     由于一般程序员并不需要设置系统属性,所以,这里不再对此作详述。如果作为系统管理员需要这方面的技术,可查阅相关的资料。
     ③获取当前时间
     System类提供currentTimeMillis()方法来获取当前时间,这个功能常用在一些系统管理程序中。比如,笔者从事的科研项目“Java远程教学系统”要统计用户在系统上的学习时间,便是在用户开始学习和结束时分别获取当前时间,再据此计算学习时间。
     ④退出系统
     System类提供exit方法使程序退出系统。就是说,如程序中用如下语句:
         System.exit()
则退出程序,也退出Java解释器。 
<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、付费专栏及课程。

余额充值