Java 程序设计基础(第6章第4节)|System类的使用
一、整体概述
java.lang.System是系统内置工具类,构造方法私有,无法new创建实例;所有属性、方法全部static静态修饰,直接System.xxx()调用,无需导包。
它是Java应用和操作系统、JVM交互的桥梁,覆盖标准IO、时间获取、数组复制、进程控制、环境变量读取、GC触发等底层能力,项目随处可见。
二、三大标准IO流(常用成员变量)
1. System.out:标准输出流,控制台打印
◦ print():不换行输出
◦ println():输出后自动换行
调试、日志打印最基础用法。
2. System.in:标准输入流,控制台键盘录入
常配合Scanner封装键盘输入:
Scanner sc = new Scanner(System.in);
String input = sc.next();
3. System.err:标准错误输出流,控制台红色字体打印,专门输出异常错误信息,不受日志重定向影响。
三、时间相关方法
1)currentTimeMillis()
返回从1970-01-01 00:00:00 UTC至今的毫秒时间戳,long类型。
经典用途:统计一段代码执行耗时
long start = System.currentTimeMillis();
// 待测试代码
for(int i=0;i<100000;i++){}
long end = System.currentTimeMillis();
System.out.println("执行耗时:"+(end-start)+"ms");
2)nanoTime()
纳秒级时间戳,精度更高,仅适合计算时间差,不能用来转日期。
四、数组高效拷贝 arraycopy()
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
参数说明:
src:源数组;srcPos:源数组起始下标;
dest:目标数组;destPos:目标数组起始存放下标;
length:复制元素个数。
底层native本地方法实现,C语言级拷贝,性能远高于for循环遍历赋值,适合大批量数组迁移,支持数组扩容、截取。
五、进程退出 exit(int status)
终止当前JVM虚拟机,整个程序直接结束。
• System.exit(0):正常退出,无异常;
• System.exit(非0整数):异常终止程序,常用于参数校验失败、强制终止业务流程。
注意:该方法会直接关闭虚拟机,谨慎在循环、工具方法内随意调用。
六、系统属性与环境变量读取
1. getProperty(String key):读取JVM系统属性,常用key:
◦ user.dir:当前项目工作目录
◦ java.version:JDK版本号
◦ os.name:操作系统名称(Windows/Linux/Mac)
◦ file.separator:系统文件路径分隔符(Windows\、Linux/)
可用来做跨系统路径兼容、环境判断。
2. getenv():读取操作系统环境变量(JAVA_HOME、PATH等)。
七、垃圾回收 gc()
System.gc();
作用:主动向JVM发送建议执行垃圾回收的请求,仅仅是提醒,JVM可以忽略该请求,无法强制立刻回收。
通常配合System.runFinalization()一起使用,极少主动手动调用GC,JVM会自动判定时机执行。
八、其他补充方法
1. setOut()/setIn():重定向标准输入输出流,可以把控制台打印内容写入本地文件;
2. identityHashCode():获取对象原生哈希值,不受重写hashCode()方法影响。
九、小节总结
1. System类无实例、全静态方法,是底层系统交互工具类;
2. out/in/err三大IO流负责控制台输入输出,是调试必备;
3. arraycopy高性能数组拷贝、currentTimeMillis统计耗时是高频业务场景;
4. exit直接关闭JVM,编码中慎用;系统属性读取可实现跨操作系统适配;
5. gc()只是GC建议,不能强制回收垃圾,日常开发无需手动调用。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)