Java System类之浅析

1 篇文章 0 订阅
1 篇文章 0 订阅

System


1.System简介

System 类是一个代表程序所在系统工具类,位于 java.lang 包下,其中封装了一些系统信息和操作。


2.System的成员

system 中包含了三个公开的类变量( static 修饰的成员变量又称为类变量 ) :

/*
 * “标准”输入流。这个流已经打开并准备接收输入数据。通常,这个流对应于键盘输入或
 * 主机环境/用户指定的另一个输入源。简单理解就是监听键盘的输入。
 */
public final static InputStream in;
/*
 * “标准”输出流。该流已经打开并且准备接受输出数据。通常,此流对应于显示输出
 * 或由主机环境/用户指定的另一个输出目标。简单点可以理解为用来在显示器上显示
 * 输出的。
 */
public final static PrintStream out;
/*
 * 类似 out,区别在于,此输出流用于显示错误信息或其他信息。
 */
public final static PrintStream err;

我们都知道 InputStream 是抽象类,因此不能直接实例化对象,in 的具体类型是 BufferedInputStream,源码分析如下:
在这里插入图片描述在这里插入图片描述

简单使用示例:

public static void main(String[] args) {
    System.out.println("请输入一个数字:");
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
    for (char c : input.toCharArray()) {
        if(!Character.isDigit(c)){
            System.err.println("你输入的不是纯数字");
            return;
        }
    }
    System.out.println("你输入的数字为:" + input);
}

测试:

请输入一个数字:
100
你输入的数字为:100

请输入一个数字:
10o
你输入的不是纯数字



3.System的常用方法


3.1.System.arrayCopy

数组拷贝,源码如下:

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

从源数组 srcsrcPos位置开始,拷贝到目标数组 dest ,从目标数组的 destPos 位置开始,共拷贝 length 个: src ( [srcPos,srcPos + length] ) → dest ( [destPos,destPos + length ] ) ,其中如果超出数组的范围,就按数组下标的最大值计算。


3.2.System.currentTimeMillis

该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

源码如下:

public static native long currentTimeMillis();

注意:返回值类型为 long 类型


3.3.getProperty

该方法的作用是获得系统中属性,具体的定义如下:

public static String getProperty(String key)

系统中常见的属性名以及属性的说明如下表所示:

属性名属性说明示例
java.versionJava 运行时环境版本1.8.0_121
java.homeJRE 主目录C:\java\jdk1.8\jre
java.runtime.nameJava运行时环境名称Java™ SE Runtime Environment
java.runtime.versionJava运行时环境版本1.8.0_121-b13
java.vm.versionJava 虚拟机版本25.121-b13
java.vm.vendorJava 虚拟机供应商Oracle Corporation
java.vm.nameJava 虚拟机名称Java HotSpot™ 64-Bit Server VM
java.vm.infoJava 虚拟机信息mixed mode
java.vendor.urlJava供应商链接http://java.oracle.com/
java.io.tmpdir本地临时目录C:\Users\Admin\AppData\Local\Temp\
java.library.pathpath环境变量C:\java\jdk1.8\bin;C:\java\jdk1.8\jre\bin;…
os.name操作系统的名称Windows 10
os.version操作系统的版本10.0
os.arch操作系统的版本amd64
user.name用户的账户名称Admin
user.home用户的主目录C:\Users\Admin
user.dir用户的当前工作目录E:\Java_workspace
user.country用户所属国家CN
user.language用户使用的语言zh
sun.boot.library.pathjre的bin路径C:\java\jdk1.8\jre\bin
file.encoding文件编码格式UTF-8
file.separator文件夹分隔符\

3.4.exit

源码:

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

这个方法是用来结束当前正在运行中的java虚拟机。如果 status 是非零参数,那么表示是非正常退出。 而且,该方法永远不会正常返回 (官方解释)。 而且指的注意的是,此方法执行后,会终止正在运行的虚拟机,释放内存,其后的所有代码将不执行,可能有人会有疑问,就算退出虚拟机也是需要时间的,难道后面的代码一点都不会执行吗?是的一点都不会执行,可以理解为 return origin; 即返回到虚拟机启动之前的状态,所以,之后的一切代码都不会执行。

示例:

public static void main(String[] args) {
    try {
        System.out.println("before exit");
        System.exit(0);
        System.out.println("after exit");
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        System.out.println("finally");
    }
}

这段程序最后只会输出 before exit 这一句话,而不会输出 after exit 和 finally 。这可能是唯一一个能够不执行 finally 块的情况了。


3.5.gc

源码:

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

调用 gc 方法建议 Java 虚拟机将精力花在回收未使用的对象上,以便使当前占用的内存能够快速重用。当方法调用返回控件时,Java虚拟机已经尽最大努力从所有被丢弃的对象中回收空间。但是此方法只是对虚拟机的一个建议,而不能保证虚拟机会立即进行垃圾回收。

还有一些关于 system.gc() 的知识点

  • system.gc 执行的是普通的 full gc,STS(stop the world)意味着暂停所有线程,效率低。
  • system.gc 一般情况可以使用-XX:+DisableExplicitGC 禁用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值