专栏首页Java典籍Java中System类详解

Java中System类详解

还记得你们的第一个Java入门程序“hello world!”吗?它的输出语句是:System.out.println("hello world!");请问大家对这条语句知道多少呢?out是一个变量还是一个内部类呢?有的时候看起来比较简单的东西,越容易被我们所忽略。下面开始剖析System类。

1、System类简介

System类代表当前Java程序的运行平台,位于java.lang包下,该类被private修饰,所以不能创建System类的对象,System类提供了一些类变量和方法,允许直接通过System类来调用这些类变量和方法。

System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法。

2、访问操作系统的环境变量和系统属性

首先看下下面的程序:

上面程序通过调用System类的System.getenv()、System.getProperties()、System.getProperty()等方法来访问程序所在的平台的环境变量和系统属性,程序运行的结果会输出操作系统所有的环境变量,并输出JAVA_HOME环境变量,以及os.name系统属性的值,运行结果由于太多,这里就不展示了,大家可以自己动手执行下代码看具体的运行结果。

该程序运行结束后,还会在当前路径下生成一个props.txt文件,该文件记录了当前平台的所有系统属性。

3、获取系统当前时间

System类还有两个获取系统当前时间的方法:System.currentTimeMillis();System.nanoTime();它们都返回一个long型的整数,前者以毫秒为单位,后者以纳秒为单位。必须指出的是,这两个方法的时间粒度取决于底层的操作系统。

4、标准输入、输出和错误输入流

System类的in、out和err分别代表系统的标准输入(通常是键盘)、标准输出(通常是显示器)和错误输出流,并提供了setIn()、setOut()和setErr()方法来改变系统的标准输入、标准输出和标准错误输入流。

5、identityHashCode()

System类还提供了一个identityHashCode(Object x)方法,该方法返回指定对象的精确hashCode值,也就是根据该对象的地址计算得到的hashCode值。当某个类的hashCode()方法被重写后,该类实例的hashCode()方法就不能唯一地标识该对象;但通过identityHashCode()方法返回的hashCode值,依然是根据该对象的地址计算得到的hashCode值。所以,如果两个对象的identityHashCode值相等,则两个对象绝对是同一个对象。

6、gc()

调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象或失去了所有引用的对象,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。

7、exit()

exit(int)方法终止当前正在运行的 Java 虚拟机,参数解释为状态码。根据惯例,非 0 的状态码表示异常终止。这是唯一一个能够退出程序并不执行finally的情况。说明:退出虚拟机会直接终止整个程序,这时的程序已经不是从代码的层面来终止程序。

本文分享自微信公众号 - Java典籍(helloHBLing),作者:冰湖一角

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java的初始化块及执行过程详解

    针对上面的问题,想必大家脑海中首先浮现出的答案是构造器,没错,构造器是Java中常用的对象初始化方式。

    硕人其颀
  • Java实现将中文转成拼音和ASCII码

    最近项目上遇到一个需求:模糊搜索姓名时既可以输入汉字也可以输入拼音进行搜索,这就要求在保存姓名时也要将其拼音保存起来。

    硕人其颀
  • 浅谈Java中switch分支语句

    在程序中遇到多分支选择的时候,想必大家都喜欢用if...else if...else...语句,尤其是初学者,因为在了解switch语句之前,我也是只会用if....

    硕人其颀
  • 【小家java】聊聊Java中的System类

    Java程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特点功能。Java提供了System类和Runtime类来与程序的运行平台...

    YourBatman
  • dotnet Framework 源代码 类库的意思

    System 命名空间包含基本类和基类,这些类定义常用的值和引用数据类型、事件和事件处理程序、接口、属性和异常处理。

    林德熙
  • 第3章 System V IPC

    System V IPC: ·System V消息队列 ·System V信号量 ·System V共享内存区 ?

    _gongluck
  • C#2C++数据类型对照

    Pulsar-V
  • Spacebuilder在Mono上运行修改备忘

    Spacebuilder 是一个asp.net mvc3项目,使用到了Combres,Combres依赖于dotless,然后在Spacebuilder的项目没...

    张善友
  • 利用message queue实现aspx与winform通信, 并附完整示例

    先在本机(本文中的计算机名为jimmyibm)安装message queue(消息队列),别告诉我你不会安装.(就跟安装IIS差不多的) 安装好后,打开 "计算...

    菩提树下的杨过
  • WPF 类型的构造函数执行符合指定的绑定约束的调用时引发了异常

    本文告诉大家如果遇到类型“Foo.MainWindow”的构造函数执行符合指定的绑定约束的调用时引发了异常的时候可以如何知道是哪个不清真代码

    林德熙

扫码关注云+社区

领取腾讯云代金券