System

  • 属性说明
/**
* System 类包含了几个有用的字段和方法,并且不能被实例化。
*
* @author unascribed
* @since 1.0
*/
public final class System {
/* register the natives via the static initializer.
*
* VM will invoke the initializeSystemClass method to complete
* the initialization for this class separated from clinit.
* Note that to use properties set by the VM, see the constraints
* described in the initializeSystemClass method.
*/
private static native void registerNatives();
static {
registerNatives();
} /** Don't let anyone instantiate this class */
private System() {
} /**
* 标准输入流,默认为键盘
*/
public static final InputStream in = null; /**
* 标识输出流,默认为控制台
*/
public static final PrintStream out = null; /**
* 标准错误流,默认为控制台
*/
public static final PrintStream err = null; /**
* 此系统的安全管理器
*/
private static volatile SecurityManager security; /**
* 控制台
*/
private static volatile Console cons; /**
* 系统属性值
*
* The following properties are guaranteed to be defined:
* <dl>
* <dt>java.version <dd>Java version number
* <dt>java.version.date <dd>Java version date
* <dt>java.vendor <dd>Java vendor specific string
* <dt>java.vendor.url <dd>Java vendor URL
* <dt>java.vendor.version <dd>Java vendor version
* <dt>java.home <dd>Java installation directory
* <dt>java.class.version <dd>Java class version number
* <dt>java.class.path <dd>Java classpath
* <dt>os.name <dd>Operating System Name
* <dt>os.arch <dd>Operating System Architecture
* <dt>os.version <dd>Operating System Version
* <dt>file.separator <dd>File separator ("/" on Unix)
* <dt>path.separator <dd>Path separator (":" on Unix)
* <dt>line.separator <dd>Line separator ("\n" on Unix)
* <dt>user.name <dd>User account name
* <dt>user.home <dd>User home directory
* <dt>user.dir <dd>User's current working directory
* </dl>
*/
private static Properties props;
  • 输入输出流及控制台
    /**
* 重设标准输入流
*
* @since 1.1
*/
public static void setIn(InputStream in) {
checkIO();
setIn0(in);
} /**
* 重设标准输出流
*
* @param out PrintStream 实例
* @since 1.1
*/
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
} /**
* 重设标准错误流
*
* @param err PrintStream 实例
* @since 1.1
*/
public static void setErr(PrintStream err) {
checkIO();
setErr0(err);
} private static native void setIn0(InputStream in);
private static native void setOut0(PrintStream out);
private static native void setErr0(PrintStream err);
  • 读取系统属性和环境变量的值
    /**
* 读取当前系统时序性
*
* <tr><th scope="row"><code>java.version</code></th>
* <td>Java Runtime Environment version, which may be interpreted
* as a {@link Runtime.Version}</td></tr>
* <tr><th scope="row"><code>java.version.date</code></th>
* <td>Java Runtime Environment version date, in ISO-8601 YYYY-MM-DD
* format, which may be interpreted as a {@link
* java.time.LocalDate}</td></tr>
* <tr><th scope="row"><code>java.vendor</code></th>
* <td>Java Runtime Environment vendor</td></tr>
* <tr><th scope="row"><code>java.vendor.url</code></th>
* <td>Java vendor URL</td></tr>
* <tr><th scope="row"><code>java.vendor.version</code></th>
* <td>Java vendor version</td></tr>
* <tr><th scope="row"><code>java.home</code></th>
* <td>Java installation directory</td></tr>
* <tr><th scope="row"><code>java.vm.specification.version</code></th>
* <td>Java Virtual Machine specification version which may be
* interpreted as a {@link Runtime.Version}</td></tr>
* <tr><th scope="row"><code>java.vm.specification.vendor</code></th>
* <td>Java Virtual Machine specification vendor</td></tr>
* <tr><th scope="row"><code>java.vm.specification.name</code></th>
* <td>Java Virtual Machine specification name</td></tr>
* <tr><th scope="row"><code>java.vm.version</code></th>
* <td>Java Virtual Machine implementation version which may be
* interpreted as a {@link Runtime.Version}</td></tr>
* <tr><th scope="row"><code>java.vm.vendor</code></th>
* <td>Java Virtual Machine implementation vendor</td></tr>
* <tr><th scope="row"><code>java.vm.name</code></th>
* <td>Java Virtual Machine implementation name</td></tr>
* <tr><th scope="row"><code>java.specification.version</code></th>
* <td>Java Runtime Environment specification version which may be
* interpreted as a {@link Runtime.Version}</td></tr>
* <tr><th scope="row"><code>java.specification.vendor</code></th>
* <td>Java Runtime Environment specification vendor</td></tr>
* <tr><th scope="row"><code>java.specification.name</code></th>
* <td>Java Runtime Environment specification name</td></tr>
* <tr><th scope="row"><code>java.class.version</code></th>
* <td>Java class format version number</td></tr>
* <tr><th scope="row"><code>java.class.path</code></th>
* <td>Java class path</td></tr>
* <tr><th scope="row"><code>java.library.path</code></th>
* <td>List of paths to search when loading libraries</td></tr>
* <tr><th scope="row"><code>java.io.tmpdir</code></th>
* <td>Default temp file path</td></tr>
* <tr><th scope="row"><code>java.compiler</code></th>
* <td>Name of JIT compiler to use</td></tr>
* <tr><th scope="row"><code>os.name</code></th>
* <td>Operating system name</td></tr>
* <tr><th scope="row"><code>os.arch</code></th>
* <td>Operating system architecture</td></tr>
* <tr><th scope="row"><code>os.version</code></th>
* <td>Operating system version</td></tr>
* <tr><th scope="row"><code>file.separator</code></th>
* <td>File separator ("/" on UNIX)</td></tr>
* <tr><th scope="row"><code>path.separator</code></th>
* <td>Path separator (":" on UNIX)</td></tr>
* <tr><th scope="row"><code>line.separator</code></th>
* <td>Line separator ("\n" on UNIX)</td></tr>
* <tr><th scope="row"><code>user.name</code></th>
* <td>User's account name</td></tr>
* <tr><th scope="row"><code>user.home</code></th>
* <td>User's home directory</td></tr>
* <tr><th scope="row"><code>user.dir</code></th>
* <td>User's current working directory</td></tr>
* <p>
*
* @implNote In addition to the standard system properties, the system
* properties may include the following keys:
* <table class="striped">
* <caption style="display:none">Shows property keys and associated values</caption>
* <thead>
* <tr><th scope="col">Key</th>
* <th scope="col">Description of Associated Value</th></tr>
* </thead>
* <tbody>
* <tr><th scope="row">{@code jdk.module.path}</th>
* <td>The application module path</td></tr>
* <tr><th scope="row">{@code jdk.module.upgrade.path}</th>
* <td>The upgrade module path</td></tr>
* <tr><th scope="row">{@code jdk.module.main}</th>
* <td>The module name of the initial/main module</td></tr>
* <tr><th scope="row">{@code jdk.module.main.class}</th>
* <td>The main class name of the initial module</td></tr>
* </tbody>
* </table>
*/
public static Properties getProperties() {
final SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPropertiesAccess();
} return props;
} /**
* 读取指定名称的系统属性
*
* @param key 系统属性的名称
*/
public static String getProperty(String key) {
checkKey(key);
final SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPropertyAccess(key);
} return props.getProperty(key);
} /**
* 读取指定名称 key 的系统属性值,如果不存在,则使用默认值
*
* @param key 系统属性的名称
* @param def 默认值
*/
public static String getProperty(String key, String def) {
checkKey(key);
final SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPropertyAccess(key);
} return props.getProperty(key, def);
} /**
* 获取当前系统的环境变量映射
*
* @since 1.5
*/
public static java.util.Map<String,String> getenv() {
final SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission("getenv.*"));
} return ProcessEnvironment.getenv();
} /**
* 读取指定名称的环境变量
*
* @param name 环境变量名称
*/
public static String getenv(String name) {
final SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission("getenv."+name));
} return ProcessEnvironment.getenv(name);
}
  • 其他常用方法
    /**
* 将源数组的子数组拷贝到目标数组中
*
* @param src 源数组
* @param srcPos 源数组起始索引,包括
* @param dest 目标数组
* @param destPos 目标数组起始索引,包括
* @param length 从源数组拷贝的元素个数
*/
@HotSpotIntrinsicCandidate
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length); /**
* 返回当前 JVM 关联的控制台
*
* @since 1.6
*/
public static Console console() {
Console c;
if ((c = cons) == null) {
synchronized (System.class) {
if ((c = cons) == null) {
cons = c = SharedSecrets.getJavaIOAccess().console();
}
}
}
return c;
} /**
* 1970-01-01 UTC 午夜到此刻之间的毫秒数
*/
@HotSpotIntrinsicCandidate
public static native long currentTimeMillis(); /**
* 返回当前虚拟机高分辨率的时间源,以纳秒为单位,只能用于计算时间差
*
* @since 1.5
*/
@HotSpotIntrinsicCandidate
public static native long nanoTime(); /**
* 主动终止当前虚拟机,非 0 的退出状态表示异常终止。
*
* @param status 退出状态值
*/
public static void exit(int status) {
Runtime.getRuntime().exit(status);
} /**
* 主动运行垃圾收集器,不建议调用
*/
public static void gc() {
Runtime.getRuntime().gc();
} /**
* 计算指定对象的哈希值,null 对象为 0
*
* @param x 待计算哈希值的目标对象
* @since 1.1
*/
@HotSpotIntrinsicCandidate
public static native int identityHashCode(Object x);

System 源码阅读的更多相关文章

  1. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  2. [Erlang 0119] Erlang OTP 源码阅读指引

      上周Erlang讨论群里面提到lists的++实现,争论大多基于猜测,其实打开代码看一下就都明了.贴出代码截图后有同学问这代码是哪里找的?   "代码去哪里找?",关于Erla ...

  3. Android源码阅读 – Zygote

    @Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...

  4. EventBus源码解析 源码阅读记录

    EventBus源码阅读记录 repo地址: greenrobot/EventBus EventBus的构造 双重加锁的单例. static volatile EventBus defaultInst ...

  5. 如何阅读Java源码 阅读java的真实体会

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比 ...

  6. SparkConf加载与SparkContext创建(源码阅读一)

    即日起开始spark源码阅读之旅,这个过程是相当痛苦的,也许有大量的看不懂,但是每天一个方法,一点点看,相信总归会有极大地提高的.那么下面开始: 创建sparkConf对象,那么究竟它干了什么了类,从 ...

  7. java8 ArrayList源码阅读

    转载自 java8 ArrayList源码阅读 本文基于jdk1.8 JavaCollection库中有三类:List,Queue,Set 其中List,有三个子实现类:ArrayList,Vecto ...

  8. CI框架源码阅读笔记5 基准测试 BenchMark.php

    上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功 ...

  9. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

随机推荐

  1. Thymeleaf初探

    Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...

  2. ios系统保存校园网密码

    相信ios用户每次登陆时无法保存必须要重新输入账号密码的问题困扰了很多同学,特别是苹果5用户(不要问为什么,屏幕本来就小) 现在我们就一起想办法来解决它吧! 首先,我们进入设置->Safari浏 ...

  3. mongo批量插入问题(insert_many,bulk_write),spark df转json传入mongo

    https://blog.csdn.net/nihaoxiaocui/article/details/95060906 https://xuexiyuan.cn/article/detail/173. ...

  4. web页面ios浏览器img图片的坑

    大家都知道ios浏览器有个默认的内置事件,就是长按屏幕,会放大预览你点击的内容. 不同浏览器效果各异,有的浏览器弹出提示框,预览图片或保存图片.主要呈下面2中形式.体验最差的就是后者,会直接将页面中的 ...

  5. BZOJ4353 Play with tree[树剖]

    复习几乎考不到的树剖.维护min以及min个数,打set和add标记即可,注意set优先级优于add. #include<iostream> #include<cstdio> ...

  6. 【Layui】Layui模板引擎生成下拉框不显示

    首先让我震惊了一下,layui引擎模板居然是支持ajax操作的 博主的需求是需要在数据表格内放入下拉框而下拉框的数据是数据库内查出来的(详见上一篇博客),但是下拉框怎么也显示不出来 找了四个小时的问题 ...

  7. Can't specify target table for update in FROM clause

    UPDATE tbl SET col = ( SELECT ... FROM (SELECT.... FROM) AS x); 额外嵌套了一个 SELECT 语句 例如LeetCode 中的 Dele ...

  8. webpack-dev-server 和 html-webpack-plugin的使用

    webpack-dev-server的作用:自动编译 1.webpack-dev-server的使用 1)cnpm i webpack-dev-server -D 2)在package.json中配置 ...

  9. 【Python之路】特别篇--Python面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  10. fish-redux快速创建文件夹模板 FishReduxTemplate

    推荐一款插件: 在插件plugins中搜  FishReduxTemplate