Java常用类:System

本文深入解析Java中的System类,探讨其不可实例化的特性,以及如何使用该类获取系统时间、系统属性和进行数组复制等核心功能。

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

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

System

System类是被final关键字修饰的类,不能被继承,构造方法是私有的,不能被实例化,这个类的方法更多是获取系统级别的信息,方法和成员变量都是static修饰。

public final class System { 
    /** Don't let anyone instantiate this class */
    private System() {
    }
}
//三个成员变量,in,out,err
public final static InputStream in = null;
public final static PrintStream out = null;
public final static PrintStream err = null;
//最常见的打印日志的方式
System.out.println("hello");
//err的区别是控制台是以红色字体打印
System.err.println("err");

结果:
在这里插入图片描述

常用方法

1.获取当前系统时间毫秒数,返回的是当前系统时间与1970年01月01日00:00点之前的毫秒差值

System.currentTimeMillis();

2.获取系统当前属性

public static String getProperty(String key)

在这里插入图片描述

System.out.println(System.getProperty("user.dir"));
System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("java.home"));

结果:

/Users/lilin/jdk_source_code_demo
1.8.0_211
/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/jre

3.复制数组

public static native void arraycopy(Object src,  int  srcPos,
Object dest, int destPos,int length);

Object src:要复制的原数组;

Int srcPos:数组源的起始索引;

Object dest:复制后的目标数组;

int destPos:目标数组起始索引;

int length,指定复制的长度;

int[] i1 = {11,22,33};
int[] i2 = {44,55,66};
System.arraycopy(i1,0,i2,0,2);
System.out.println(JSONObject.toJSONString(i2));

结果:

[11,22,66]
### Java `System` 常用方法 #### 获取当前时间毫秒 通过调用静态方法 `currentTimeMillis()` 可以获取自1970年1月1日午夜以来的时间,单位为毫秒。 ```java long startTime = System.currentTimeMillis(); // 执行某些操作... long endTime = System.currentTimeMillis(); System.out.println("耗时:" + (endTime - startTime) + " ms"); ``` 此方法广泛用于计算程序执行时间和性能评估[^1]。 #### 输出流控制 `out` 是一个标准输出对象,通常与 `println()`, `print()`, 和 `printf()` 方法一起使用来向控制台写入据。 ```java System.out.println("这是一个测试字符串"); // 向控制台打印一行文字并换行 System.out.print("这是另一条消息"); // 不会自动换行 System.err.println("错误信息!"); // 错误输出流, 一般显示红色字体 ``` 这些方法允许开发者方便地调试应用程序或将重要信息反馈给用户[^2]。 #### 输入重定向 可以利用 `setIn(InputStream)` 来改变默认的标准输入源。这使得可以从文件或其他外部资源读取据而不是键盘输入。 ```java FileInputStream fileInputStream; try { fileInputStream = new FileInputStream(new File("input.txt")); System.setIn(fileInputStream); } catch (FileNotFoundException e) { e.printStackTrace(); } ``` 该特性对于自动化批处理作业非常有用,在不需要人工干预的情况下完成大量重复性的任务[^3]。 #### 属性查询 借助于 `getProperty(String key)` 或者 `getProperties()` 能够访问系统的环境变量以及 JVM 的配置参。 ```java String javaVersion = System.getProperty("java.version"); String osName = System.getProperty("os.name"); System.out.println("Java版本:" + javaVersion); System.out.println("操作系统名称:" + osName); ``` 这对于跨平台开发尤其有价值,因为可以根据不同的运行环境调整应用行为[^4]。 #### 运行命令 最后值得一提的是 `exec(String command)` 函,它可以用来启动新的进程去执行指定的操作系统指令。 ```java Process process; try { process = Runtime.getRuntime().exec("notepad.exe"); } catch (IOException e) { e.printStackTrace(); } ``` 不过需要注意安全性和稳定性方面的问题,谨慎使用此功能[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值