常用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

  1. 工具类,提供一些关于系统相关的方法
  2. 时间原点:1970年1月1日,我国在东八区,有八小时时差。(c语言诞生)
  3. 1秒=1000毫秒
  4. 常见方法:
  5. exit:停止虚拟机
  6. currenTimeMills:获取当前时间的毫秒值
  7. 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) 对象克隆(默认:浅克隆)

细节:

方法在底层会帮我们创建一个对象,并把对象中的数组拷贝过去

如果克隆的时候被克隆的类与克隆类不一致,会将需要克隆的类进行强转

书写细节:

  1. 把Object中的clone方法重写
  2. 让javabean类实现Cloneable接口
  3. 创建原对象并调用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
posted @ 2022-11-09 14:27  喜欢七岁就很浪  阅读(55)  评论(0)    收藏  举报