常用API描述(Math,System,Runtime,Object,Objects)
常用API
说明:
- API是用到哪个查哪个,只需要知道有这个类,看到它知道它是干什么的,下面罗列的仅仅是常见的一些API,如果需要API请上官网下载
Math
- 是一个帮助我们用于数学计算的工具类
- 私有化构造方法,所有的方法都是静态的
部分方法如下:
| public static double | random() | 返回为double类型的随机数,范围在[0.0,1.0) |
|---|---|---|
| public static int | abs(int a) | 获取参数的绝对值 |
| public static double | ceil(double a) | 向上取整 |
| public static double | floor(double a) | 向下取整 |
| public static int | round(float a) | 四舍五入 |
| public static int | max(int a.int b) | 获取最大值 |
| public static double | pow(double a,double b) | 计算a的b次幂 |
| public static double | sqrt(double a) | 返回a的平方根 |
| public static double | cbrt(double a) | 返回a的立方根 |
System
- 工具类,提供一些关于系统相关的方法
- 时间原点:1970年1月1日,我国在东八区,有八小时时差。(c语言诞生)
- 1秒=1000毫秒
- 常见方法:
- exit:停止虚拟机
- currenTimeMills:获取当前时间的毫秒值
- arraycopy:拷贝数组
currenTimeMills:获取当前时间的毫秒值,可以用于测试自己写的方法的时间复杂度
arraycopy(被拷贝数组,开始索引,需要拷贝的数组,开始索引,拷贝的个数)
Runtime
当前虚拟机的运行环境,这个类的方法不是静态的,需要创建对象
| 方法名 | 说明 |
|---|---|
| public static Runtime getRumtime() | 当前系统的运行环境对象 |
| public void exit(int status) | 停止虚拟机,就是System.exit()的底层源码 |
| public int avaliableProcessors() | 获取CPU的线程数 |
| public long maxMemory() | JVM能从系统中获取总内存大小(单位:byte) |
| public long totaMemory() | JVM已经系统中获取总内存大小(单位:byte) |
| public long freeMemory() | JVM剩余内存大小(单位:byte) |
补充一个:
public Process exec(String command) 运行cmd命令
试玩一下关机命令:
shutdowm:关机
加上参数才能执行
-s:默认一分钟后关机
-s -t 指定时间(单位秒)
-a:取消关机操作
-r:关机并重启
Object
Java中的顶级父类,也叫超类
所有的类直接或者间接继承与Object
public String toString() 返回对象的字符串表示形式
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
我们可以看到,@是一个固定格式,前半部分是该属性所在的类,后半部分是这个属性所在的地址值
例:
Object o=new Object();
System.out.println(o.toString());
控制台结果如下:
java.lang.Object@776ec8df
如果我们想获得一个类属性的属性值,就需要我们重写toString()方法
public boolean equals (Object obj)判断两个对象是否相等
经典一题
//public boolean equals (Object obj)判断两个对象是否相等
String a="abc";
StringBuilder b=new StringBuilder("abc");
//请问返回的是true还是false
System.out.println(a.equals(b));
System.out.println(b.equals(a));
首先Object的equals方法需要传递的是一个对象,那我们可以去看看Object中的源码
public boolean equals(Object obj) {
return (this == obj);
}
我们可以看到,这个方法的判断是直接判断你传进来的是不是一个对象,如果是直接返回true
那么现在可以开始阅读第一句输出语句,String类的equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
return (anObject instanceof String aString)
&& (!COMPACT_STRINGS || this.coder == aString.coder)
&& StringLatin1.equals(value, aString.value);
}
可以看到,先判断传进来的参数和a是不是同一个对象,明显不是,于是走了下面return这条语句,第一句判断传进来的参数是不是一个String类型的对象,在这里就直接已经返回false了
instanceof是Java中的二元运算符,作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型;
左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
注意一个小点:null用instanceof跟任何类型比较时都是false
接着我们阅读第二条输出语句
我们跟进源码后发现StringBuilder中没有equals方法,又因为它默认继承于超类,就会把超类(Object)中虚方法表(类中非static,非private,非final的方法就是虚方法)中的方法继承下来,所以返回值依旧是false
控制台输出结果如下

protected Object clone(int a) 对象克隆(默认:浅克隆)
细节:
方法在底层会帮我们创建一个对象,并把对象中的数组拷贝过去
如果克隆的时候被克隆的类与克隆类不一致,会将需要克隆的类进行强转
书写细节:
- 把Object中的clone方法重写
- 让javabean类实现Cloneable接口
- 创建原对象并调用clone就可以了
克隆方式一:(浅克隆)

其中对象属性,会被拷贝,其中基本数据类型就拷贝其数据值,其中引用数据类型拷贝的就是地址值
克隆方式二:(深克隆)

其中new出来的空间就会在创建一个对象,去拷贝
二者克隆方式区别
浅克隆:不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝
深克隆:基本数据类型直接拷贝过来
字符串就复用串池里面的
引用数据类型会重新创建新的
Objects工具类
成员方法
| 方法名 | 说明 |
|---|---|
| public static boolean equals(Object a,Object b) | 先左非空判断,比较两个对象 |
| public static boolean isNull(Object obj) | 判断对象是否为null,是null返回true,反之返回false |
| public static boolean noNull(Object obj) | 判断对象是否为null,是null返回false,反之返回true |

浙公网安备 33010602011771号