美文网首页Android基础Java 基础
Java 常用类 10. Java System类

Java 常用类 10. Java System类

作者: yjtuuige | 来源:发表于2021-12-19 08:02 被阅读0次

    简介:

    • 主要用于获取系统的属性数据和其他操作,构造方法(私有的)
    • 实际上 System 类是一些与系统相关属性和方法的集合,而且在System 类中所有的属性,都是静态的,要想引用这些属性和方法,直接使用 System 类调用即可。

    常用方法:

    方法名 说明
    static void arraycopy(...); 复制数组
    static long currentTimeMillis(); 获取当前系统时间,返回毫秒值 (常用来计算一个程序执行时间)
    static void gc(); 建议 jvm 赶快启动垃圾回收期器回收垃圾
    static void exit(int status); 退出 jvm 如果参数是 0 表示正常退出 jvm 非 0 表示异常退出
    getProperties(); 确定当前的系统属性。
    getProperty(String key); 获取系统某一属性。key - 系统属性的名称。
    • 可以使用的 key 及其相关的描述。
    相关值的描述
    java.version Java 运行时环境版本
    java.vendor Java 运行时环境供应商
    java.vendor.url Java 供应商的 URL
    java.home Java 安装目录
    java.vm.specification.version Java 虚拟机规范版本
    java.vm.specification.vendor Java 虚拟机规范供应商
    java.vm.specification.name Java 虚拟机规范名称
    java.vm.version Java 虚拟机实现版本
    java.vm.vendor Java 虚拟机实现供应商
    java.vm.name Java 虚拟机实现名称
    java.specification.version Java 运行时环境规范版本
    java.specification.vendor Java 运行时环境规范供应商
    java.specification.name Java 运行时环境规范名称
    java.class.version Java 类格式版本号
    java.class.path Java 类路径
    java.library.path 加载库时搜索的路径列表
    java.io.tmpdir 默认的临时文件路径
    java.compiler 要使用的 JIT 编译器的名称
    java.ext.dirs 一个或多个扩展目录的路径
    os.name 操作系统的名称
    os.arch 操作系统的架构
    os.version 操作系统的版本
    file.separator 文件分隔符(在 UNIX 系统中是“/”)
    path.separator 路径分隔符(在 UNIX 系统中是“:”)
    line.separator 行分隔符(在 UNIX 系统中是“/n”)
    user.name 用户的账户名称
    user.home 用户的主目录
    user.dir 用户的当前工作目录
    • 实例 1:System.arraycopy(src, srcPos, dest, destPos, length);
    package com.base.demo05;
    
    import java.util.Arrays;
    
    public class Demo07 {
        public static void main(String[] args) {
            // 1.arraycopy(src, srcPos, dest, destPos, length)
            /*
            src-原数组
            srcPos-从哪个位置开始复制0
            dest-目标数组
            destPos-目标数组的位置
            length-复制的长度
            */
            // 原数组
            int[] arr = {12, 6, 30, 18, 22, 55, 98, 3, 36};
            // 目标数组
            int[] dest = new int[9];
            // Arrays.copyOf(original, newLength); 实际调用 System.arraycopy();
            System.arraycopy(arr, 0, dest, 0, arr.length);  // 本地方法,效率高
    
            for (int i = 0; i < dest.length; i++) {
                System.out.println(dest[i]);
            }
        }
    }
    
    • 实例 2:
    package com.base.demo05;
    
    public class Demo08 {
        public static void main(String[] args) {
            // 开始时间
            long begin = System.currentTimeMillis();
            int sum = 0;
            for (int i = 0; i < 100000; i++) {
                sum += i;
            }
            // 结束时间
            long end = System.currentTimeMillis();
            // 循环所用时间
            System.out.println("用时:" + (end - begin) + "ms");
            // 获取本机操作系统
            System.out.println("操作系统的名称:" + System.getProperty("os.name"));
            // 获取本机的全部环境属性
            System.out.println(System.getProperties());
        }
    }
    

    垃圾对象的回收

    • Java 中用垃圾的自动收集机制,可以不定期地释放 Java 中的垃圾空间。在 System 类中有一个 System.gc(); 方法,此方法可以进行垃圾的收集。

    什么是垃圾对象?

    • 一个对象,如果不再被任何栈内存所引用,那么此对象就可以称为垃圾对象,等待被回收。实际上,等待的时间是不确定的,所以直接调用System.gc(); 方法进行垃圾的回收。
    • 提示:开发中的垃圾收集,基本上都是由系统自动完成的,除非特殊情况,一般很少直接去调用 System.gc(); 方法。
    • 实例:
    package com.base.demo05;
    
    public class Demo10 {
        public static void main(String[] args) {
            Student a = new Student("xiaoming", 10);
            // 断开引用释放空间
            a = null;
            // 直接new,没用引用
            new Student("lihua", 11);
            // 进行垃圾回收
            System.gc();
            // 退出 JVM
            System.exit(0);
             // 已经退出 JVM,不会被执行
            System.out.println("程序结束了!");
        }
    
        static class Student {
            private String name;
            private int age;
    
            public Student(String name, int age) {
                this.name = name;
                this.age = age;
            }
    
            public String toString() {
                return "姓名:" + name + " 年龄:" + age;
            }
            // 对象释放空间时默认调用此方法
            // finalize() Java 8 以后弃用
            public void finalize() throws Throwable {
                // 直接打印对象调用toString
                System.out.println("对象被释放:" + this);
            }
        }
    }
    
    • 运行结果

    总结

    • 在 System 类中的 currentTimeMillis(); 方法,常用来计算一个程序执行的时间,非常实用。
    • 通过 System 类中的 getProperties(); 方法,不仅可以获取用户工作目录,还可以获取系统用户名。
    • 关于 System.gc(); 方法,不是调用这个方法,就一定会回收对象,具体还是由 JVM 确认(要判断是否为垃圾对象,如果不是垃圾对象,即使调用,也不会回收的)

    相关文章

      网友评论

        本文标题:Java 常用类 10. Java System类

        本文链接:https://www.haomeiwen.com/subject/sdgefrtx.html