Class -- 01 -- System类常用方法解析

原文链接:Class – 01 – System类常用方法解析


相关文章:


这次主要整理下 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值