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

JDK源码之System

基本概念

System 类是一个位于java.lang包下的核心工具类,提供了多种与系统相关的实用方法和字段。这个类的特殊之处在于它不能被实例化,其构造方法是私有的,所有成员(字段和方法)都是静态的,因此可以通过类名直接调用。

System 类的主要作用是为 Java 程序提供与运行时环境交互的能力,包括标准输入输出、系统属性访问、环境变量读取、时间获取、数组操作等。是 Java 中常用的系统级工具集。

System 中的大多数方法都是线程安全的,因为它们使用静态同步方法或内部同步机制,但是需要注意标准流混合输出会出现交错的情况,设置和获取系统属性时要注意线程之间的可见性

主要静态字段

// 标准输入流,默认对应键盘输入
public final static InputStream in = null;
// 标准输出流,默认向控制台输出信息
public final static PrintStream out = null;
// 标准错误流,用于输出错误信息,与标准输出分开便于识别处理
public final static PrintStream err = null;

使用方法简单示例

public class Test {public static void main(String[] args) {// 使用System.in接收输入Scanner scanner = new Scanner(System.in);System.out.println("请输入内容:");String s = scanner.nextLine();// 使用System.out正常输出System.out.println("你输入了:" + s);// 使用System.err输出错误信息if (s.trim().isEmpty()) {System.err.println("错误,不能输入空");}}
}

常用方法

重定向标准流的方法

System 类提供了重定向这些标准流字段的方法,在日志记录和系统调试中非常有用

// 重新分配标准输入流
public static void setIn(InputStream in) {checkIO();setIn0(in);
}
// 重新分配标准输出流
public static void setOut(PrintStream out) {checkIO();setOut0(out);
}
// 重新分配标准错误输出流
public static void setErr(PrintStream err) {checkIO();setErr0(err);
}

时间获取方法

currentTimeMillis用于返回当前时间与 UTC 1970 年 1 月 1 日午夜的时间差,单位为毫秒,主要用于日常时间记录、代码性能监控。nanoTime 用于返回 JVM 高精度时间源,单位是纳秒,主要用于高精度性能测试、算法效率测量。这两个方法都是 native 方法

public static native long currentTimeMillis();
public static native long nanoTime();

数组复制方法

主要用于高效复制数组元素,使用 native 实现

参数:

  • src:源数组
  • srcPos:源数组起始位置
  • dest:目标数组
  • destPos:目标数组起始位置
  • length:复制元素数量
public static native void arraycopy(Object src,  int  srcPos,Object dest, int destPos,int length);

环境变量和系统属性

// 获取环境变量
// 获取所有环境变量
public static java.util.Map<String,String> getenv() {SecurityManager sm = getSecurityManager();if (sm != null) {sm.checkPermission(new RuntimePermission("getenv.*"));}return ProcessEnvironment.getenv();
}
// 获取指定环境变量
public static String getenv(String name) {SecurityManager sm = getSecurityManager();if (sm != null) {sm.checkPermission(new RuntimePermission("getenv."+name));}return ProcessEnvironment.getenv(name);
}
// 获取所有系统属性
public static Properties getProperties() {SecurityManager sm = getSecurityManager();if (sm != null) {sm.checkPropertiesAccess();}return props;
}
// 获取指定的系统属性
public static String getProperty(String key) {checkKey(key);SecurityManager sm = getSecurityManager();if (sm != null) {sm.checkPropertyAccess(key);}return props.getProperty(key);
}
// 获取属性,未找到时返回默认值
public static String getProperty(String key, String def) {checkKey(key);SecurityManager sm = getSecurityManager();if (sm != null) {sm.checkPropertyAccess(key);}return props.getProperty(key, def);
}
// 设置系统属性
public static String setProperty(String key, String value) {checkKey(key);SecurityManager sm = getSecurityManager();if (sm != null) {sm.checkPermission(new PropertyPermission(key,SecurityConstants.PROPERTY_WRITE_ACTION));}return (String) props.setProperty(key, value);
}

程序退出方法

用于终止当前运行的 JVM,status 为退出状态码,0 表示正常退出,非零表示异常退出。一般是命令行工具、服务器应用启动脚本会使用

public static void exit(int status) {Runtime.getRuntime().exit(status);
}

垃圾回收方法

gc作用是建议 JVM 进行垃圾回收,这里只是建议,JVM 不一定执行。runFinalization 作用是运行对象终结方法

public static void gc() {Runtime.getRuntime().gc();
}
public static void runFinalization() {Runtime.getRuntime().runFinalization();
}

其他实用方法

lineSeparator 用于返回当前系统的行分隔符,Windows 返回\r\n,Linux 或 MAC 返回\n。identityHashCode 用于返回对象原始哈希码,无视 hashCode 重写

public static String lineSeparator() {return lineSeparator;
}
public static native int identityHashCode(Object x);
http://www.dtcms.com/a/432507.html

相关文章:

  • 专门做婚纱儿童摄影网站wordpress装多个博客
  • Mosquitto Broker源码分析
  • 重庆公司网站seowordpress主题的使用
  • 上海电子商务网站开发用文本文档做网站
  • 熊掌号做网站推广的注意事项怎么做网页站点
  • C#基础03-JIT和GC
  • 安徽省建设工程造价信息网站wordpress 删除小工具
  • 网站推广计划方法如何查询网址的注册信息
  • 太原网站制作优化seo调整百度对网站的最大天级抓取频次值
  • 重庆知名网站建设公司网站设计方案案例分析
  • 一般做个网站需要多少钱wordpress显示缩略图
  • Drawio 在软件开发中的应用实践
  • InfiniBand技术解析(3):解码 IB “黑话”—— 核心术语与架构概览
  • 专做水果的社区网站重庆建设岗位证书查询网
  • 【复习】计网强化第二章
  • iis7发布网站教程网站创意模板
  • 建设网站的报告wordpress安装虚拟主机
  • 做商业网站是否要备案网站开发费用报价表百度
  • 汉中做网站的公司wordpress适合做什么网站吗
  • 淮南城乡建设局网站沈阳房产网
  • 东莞市网站建设怎么样自建电商平台
  • 嘉兴企业网站制作手机网站竞价单页
  • P1447题解
  • 用node.js可以做网站吗用爱奇艺会员做视频网站违法吗
  • 做网站找八埏东莞网络推广服务平台
  • 网站导航条制作组织建设方面
  • 安徽省工程建设安全协会网站WordPress三栏资讯主题
  • 做网站为什么要租服务器深圳搜索竞价账户托管
  • 常州建行网站北京网站seo外包
  • 简单大气的成品网站网站加关键词代码