相关文章:
这次主要整理下 Java 中 System 类的常用方法
一、System 类定义
-
System 类为 Java 的系统类,位于 java.lang 包中
-
System 类的构造方法由 private 进行修饰,因此无法被实例化
-
System 类提供了标准输入流、标准输出流和错误输出流;此外还提供了访问操作系统环境变量、访问虚拟机环境变量、复制数组、垃圾回收等一系列实用方法
二、System 类常用方法
-
System.currentTimeMillis()
- 获取当前时间戳,单位为毫秒
-
System.nanoTime()
- 获取当前时间戳,单位为纳秒
-
System.lineSeparator()
- 行分隔符,等同于 System.getProperty(“line.separator”)
-
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
-
拷贝数组,共五个参数
参数 含义 src 源数组 srcPos 源数组开始截取的位置,从 0 开始 dest 目标数组 destPos 目标数组开始拷贝的位置,从 0 开始 length 截取长度
-
-
System.gc()
-
内部调用了 Runtime.getRuntime().gc() 方法,在回收垃圾对象前调用其 finalize() 方法,释放占用的内存资源
-
告诉虚拟机准备进行 GC,但什么时候进行 GC,由虚拟机根据内存情况自主决定
-
-
System.runFinalization()
-
内部调用了 Runtime.getRuntime().runFinalization() 方法
-
虚拟机会尽最大努力去调用垃圾对象的 finalize() 方法,但不能保证其一定执行
-
-
System.load(String filepath)
-
用于加载库文件,参数为库文件的绝对路径
-
库文件 (动态链接库(ddl: Dynamic Link Library))
- 是一个包含可由多个程序同时使用的代码和数据的库,实现了程序模块化
-
-
System.loadLibrary(String libname)
-
用于加载库文件,参数为库文件名
-
该库文件必须在 java.library.path 所指向的路径中
-
-
System.mapLibraryName(String libname)
- 将库名称映射到特定的字符串中
-
System.exit(int status)
-
终止目前正在运行的Java虚拟机
-
参数为 0:正常终止
-
参数非 0:异常终止
-
-
System.getenv()
-
获取操作系统的环境变量 (即本地系统中的环境变量)
-
参数为空:获取操作系统的所有环境变量
-
参数不为空:获取操作系统的指定环境变量 (例如:参数为 “path”)
-
-
System.getProperties()
- 获取虚拟机 (JVM) 的所有环境变量
-
System.getProperty(String key)
-
获取虚拟机 (JVM) 的指定环境变量
数 含义 ava.version 获取 java 运行环境版本 ava.vendor 获取 java 运行环境供应商 ava.vendor.url 获取 java 运行环境供应商的URL ava.home 获取 java 安装路径 ava.vm.specification.version 获取 java 虚拟机规范版本 ava.vm.specification.vendor 获取 java 虚拟机规范供应商 ava.vm.specification.name 获取 java 虚拟机规范名称 ava.vm.version 获取 java 虚拟机实现版本 ava.vm.vendor 获取 java 虚拟机实现供应商 ava.vm.name 获取 java 虚拟机实现名称 ava.specification.version 获取 java 运行时环境规范版本 ava.specification.vender 获取 java 运行时环境规范供应商 ava.specification.name 获取 java 运行时环境规范名称 ava.class.version 获取 java 类格式版本号 ava.class.path 获取 java 类路径 ava.library.path 获取加载库时搜索的路径列表 ava.io.tmpdir 获取默认的临时文件路径 ava.ext.dirs 获取一个或多个扩展目录的路径 s.name 获取操作系统的名称 s.arch 获取操作系统的构架 s.version 获取操作系统的版本 ile.separator 获取文件分隔符 ath.separator 获取路径分隔符 ine.separator 获取行分隔符 ser.name 获取用户名称 ser.home 获取用户主目录 ser.dir 获取用户当前工作目录
-
System.setProperties(Properties props)
-
设置虚拟机 (JVM) 的环境变量 (批量)
Properties prop = new Properties(); prop.setProperty("aaa", "bbb"); System.setProperties(prop); System.out.println(System.getProperty("aaa"));
-
-
-
System.setProperty(String key, String value)
-
设置虚拟机 (JVM) 的环境变量 (单个)
System.setProperty("aaa", "bbb"); System.out.println(System.getProperty("aaa"));
-
-
System.clearProperty(String key)
- 清除设置的虚拟机 (JVM) 的环境变量
-
System.console()
-
从控制台设备读取字符信息,只能通过命令执行,在 IDE 中会报错
Console console = System.console(); System.out.println("please input your name:"); String name = console.readLine(); System.out.println("please input password:"); char[] chars = console.readPassword(); String password = String.valueOf(chars); System.out.println("your name:" + name + " your password:" + password);
-
在cmd中先用 javac 命令进行编译,再用 java 命令进行运行
-
-
System.setIn(InputStream in)
- 重新分配标准输入流
-
System.setErr(PrintStream err)
- 重新分配标准错误输出流
-
System.setOut(PrintStream out)
- 重新分配标准输出流
-
System.err
- 标准错误输出流,没有缓存,会立即输出
-
System.out
- 标准输出流,有缓存,不一定会立即输出
-
System.identityHashCode(Object obj)
-
根据对象内存地址来计算得到哈希值
-
注意,这里需要与 hashCode() 方法进行区分
-
当一个类没有重写 Object 类的 hashCode() 方法时,其 hashCode() 方法与 identityHashCode() 方法得到的值是一致的
-
当一个类重写了 Object 类的 hashCode() 方法时,则其 hashCode() 方法得到的值由其实现逻辑决定,一般不再与 identityHashCode() 方法得到的值相同
-
当 null 调用 hashCode() 方法时,会报空指针异常;当调用 identityHashCode(null) 方法时,会返回 0
// 由于Apple并没有覆盖hashCode()方法,所以两方法得到的哈希值相等 Apple apple = new Apple(); System.out.println(apple.hashCode()); // 21685669 System.out.println(System.identityHashCode(apple)); // 21685669
// 由于String类覆盖了hashCode()方法,所以两方法得到的哈希值不相等 String str = "123"; System.out.println(str.hashCode()); // 48690 System.out.println(System.identityHashCode(str)); // 21685669
// 由于str1和str2两者的值相同,所以两者hashCode()方法得到的哈希值相等 // 由于str1和str2两者指向的是常量池中的同一对象,所以两者identityHashCode()方法得到的哈希值相等 String str1 = "123"; String str2 = "123"; System.out.println(str1.hashCode()); // 48690 System.out.println(str2.hashCode()); // 48690 System.out.println(System.identityHashCode(str1)); // 21685669 System.out.println(System.identityHashCode(str2)); // 21685669
// 由于str1和str2两者的值相同,所以两者hashCode()方法得到的哈希值相等 // 由于str1和str2两者是不同的两个对象,所以两者identityHashCode()方法得到的哈希值不相等 String str1 = new String("123"); String str2 = new String("123"); System.out.println(str1.hashCode()); // 48690 System.out.println(str2.hashCode()); // 48690 System.out.println(System.identityHashCode(str1)); // 21685669 System.out.println(System.identityHashCode(str2)); // 2133927002
-
-
-
System.setSecurityManager(SecurityManager securityManager)
- 设置安全管理器,接收一个 SecurityManager 类型的参数
-
System.getSecurityManager()
- 获取安全管理器
-
System.inheritedChannel()
- 返回从创建此 Java 虚拟机的实体继承得到的 channel