System类

System是一个工具类,提供了一些与系统相关的方法。

计算机的时间原点

  • 1970年1月1日 00:00:00
  • 我们的位于东八区,实际上我们的时间原点会晚8个小时
  • 1970年1月1日 08:00:00

    方法一:返回系统时间

    返回当前系统的时间毫秒值.
    1
    2
    //返回当前系统的时间毫秒值
    public static long currentTimeMillis();
    可以利用这个方法来计算程序两处的时间差值,1秒=1000毫秒

    方法二:终止虚拟机

    终止当前运行的Java虚拟机.
    1
    2
    //status的值:0表示正常退出,非0表示程序异常终止。
    public static void exit(int status);

    方法三:拷贝数组

    拷贝数组.
    1
    2
    //括号里的参数:数据源数组,起始索引,目的数组,起始索引,拷贝个数
    public static void arraycopy();
    注意
  • 如果数组源数组和目的数组都是基本数据类型,那么两者的数据类型必须要保持一致,否则会报错。
  • 在拷贝的时候需要考虑数组的长度,如果超出范围也会报错。
  • 如果数据源数组和目的数组都是引用数据类型,那么子类类型可以赋值给父类类型(多态)。

Runtime类

Runtime表示当前虚拟机的运行环境

方法一:获取系统的运行环境对象

获取系统的运行环境对象

1
2
//获取系统的运行环境对象
public static Runtime getRuntime();

方法二:停止虚拟机

停止虚拟机

1
2
//status的值:0表示正常退出,非0表示程序异常终止。
public void exit(int status);

实际上System类中调用的exit方法就是这个方法,翻了一下源码
1
2
3
public static void exit(int status) {  
Runtime.getRuntime().exit(status);
}

方法三:获得CPU线程数

获得CPU线程数

1
public int availableProcessors();

方法四:JVM能从系统中获取的总内存的大小

JVM能从系统中获取的总内存的大小(最大内存)单位byte

1
public long maxMemory();

方法五:JVM能从系统中获取的总内存的大小

JVM能从系统中获取的总内存的大小(目前已用)单位byte

1
public long totalMemory();

方法六:JVM剩余内存大小

JVM剩余内存大小(单位byte)

1
public long freeMemory();

方法七:运行cmd命令

运行cmd命令

1
public Process exec(String command);

Object类

Object是Java中的顶级父类。所有的类都直接或间接继承于Object类。
Object类中的方法可以被所有子类访问。

方法一:空参构造

空参构造

1
public Object();

方法二:返回对象的字符串形式

返回对象的字符串形式

1
public String toString();

tips:

  • 当我们直接打印一个对象,翻看源码,其实是调用了toString()方法。打印的是对象的地址值。
  • 如果我们想在直接打印对象的时候打印的是属性值,我们可以在对象的类中重写toString()方法。
  • 如果我们想用equals()方法比较两个对象是否相等,实际上我们equals也是调用了toString()来比较,比的是地址值。
  • 如果我们不想比较地址值,而是想比较两个对象里面的某某属性是否相等,在实际开发中,我们可以在对象的类里面重写toString()方法,让equals()实现比较两个对象的属性值。

    方法六:比较两个对象是否相等

    比较两个对象是否相等
    1
    public boolean equals(Object obj);
    ### 方法七:对象克隆 对象克隆
    1
    protected Object clone(int a);
    注意:
  • clone()是一个protected的方法,不能够直接用其他对象调用(除非在lang包)
  • 我们需要在要被克隆的对象的类中重写clone()方法才可以调用
  • 然后用类实现Cloneable接口,该接口里没有抽象方法,是一个标记性接口,表示该接口已经被实现,则该类的对象能被克隆。
    代码实现
    1
    2
    3
    4
    5
    6
    public class Student implements Cloneable{
    @Override
    protected Object clone() throws CloneNotSupportedException {//抛出异常
    return super.clone();
    }
    }
    在Java中,存在浅克隆深克隆:
  • 浅克隆:不管对象内部属性是基本数据类型还是引用数据类型,都完全拷贝过来,记录其值。更改其中一个对象的数组内容,则另外一个也会跟着改变。
  • 深克隆:基本数据类型直接拷贝过来,字符串直接服用串池,引用数据类型则会重新创建新的,并记录其地址值。更改其中一个对象的数组内容,则另外一个不会跟着改变。
  • clone()是浅克隆,如果我们想深克隆,可以重写一个clone方法
  • 但是实际开发中,我们一般引用第三方工具。