JAVA常用API

一、Math

public static int abs(int a)                    // 返回参数的绝对值
public static double ceil(double a)                // 返回大于或等于参数的最小整数
public static double floor(double a)            // 返回小于或等于参数的最大整数
public static int round(float a)                // 按照四舍五入返回最接近参数的int类型的值
public static int max(int a,int b)                // 获取两个int值中的较大值
public static int min(int a,int b)                // 获取两个int值中的较小值
public static double pow (double a,double b)    // 计算a的b次幂的值
public static double random()                    // 返回一个[0.0,1.0)的随机值

二、System类

public static long currentTimeMillis()            // 获取当前时间所对应的毫秒值(当前时间为0时区所对应的时间即就是英国格林尼治天文台旧址所在位置)
public static void exit(int status)                   // 终止当前正在运行的Java虚拟机,0表示正常退出,非零表示异常退出
public static native void arraycopy(Object src,  int  srcPos, Object dest, int destPos, int length);

// 进行数值元素copy 

   // src:      源数组
// srcPos:  源数值的开始位置
// dest:    目标数组
// destPos: 目标数组开始位置
// length:   要复制的元素个数

三、Runtime

Runtime表示Java中运行时对象,可以获取到程序运行时设计到的一些信息
常见方法如下所示:

public static Runtime getRuntime()                    //当前系统的运行环境对象
public void exit(int status)                                  //停止虚拟机
public int availableProcessors()                        //获得CPU的线程数
public long maxMemory()                                 //JVM能从系统中获取总内存大小(单位byte)
public long totalMemory()                                //JVM已经从系统中获取总内存大小(单位byte)
public long freeMemory()                                 //JVM剩余内存大小(单位byte)
public Process exec(String command)            //运行cmd命令

例:

//1.获取Runtime的对象
        //Runtime r1 =Runtime.getRuntime();

        //2.exit 停止虚拟机
        //Runtime.getRuntime().exit(0);
        //System.out.println("看看我执行了吗?");
        //3.获得CPU的线程数
        System.out.println(Runtime.getRuntime().availableProcessors());//8
        //4.总内存大小,单位byte字节
        System.out.println(Runtime.getRuntime().maxMemory() / 1024 / 1024);//4064
        //5.已经获取的总内存大小,单位byte字节
        System.out.println(Runtime.getRuntime().totalMemory() / 1024 / 1024);//254
        //6.剩余内存大小
        System.out.println(Runtime.getRuntime().freeMemory() / 1024 / 1024);//251

        //7.运行cmd命令
        //shutdown :关机
        //加上参数才能执行
        //-s :默认在1分钟之后关机
        //-s -t 指定时间 : 指定关机时间
        //-a :取消关机操作
        //-r: 关机并重启
        Runtime.getRuntime().exec("shutdown -s -t 3600");//一小时后关机

四、Object类

Object类所在包是java.lang包。Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类;换句话说,该类所具备的方法,其他所有类都继承了。

一般情况下我们很少去主动的创建Object类的对象,调用其对应的方法。更多的是创建Object类的某个子类对象,然后通过子类对象调用Object类中的方法。

常见方法如下:

public String toString()                //返回该对象的字符串表示形式(可以看做是对象的内存地址值)
public boolean equals(Object obj)        //比较两个对象地址值是否相等;true表示相同,false表示不相同
protected Object clone()                //对象克隆

toString() :

Object类中toString方法获取的是对象的内存地址值,没有太大的意义,获取对象的成员变量的字符串拼接形式才算有意义。此时我们就需要在Javabean类中重写Object的toString方法,如

@Override
public String toString() {
        return name + ", " + age;
    }

小结:

1. 在通过输出语句输出一个对象时,默认调用的就是toString()方法
2. 输出地址值一般没有意义,我们可以通过重写toString方法去输出对应的成员变量信息(快捷键:atl + insert , 空白处 右键 -> Generate -> 选择toString)
3. toString方法的作用:以良好的格式,更方便的展示对象中的属性值
4. 一般情况下Jdk所提供的类都会重写Object类中的toString方法

equals:

默认情况下equals方法比较的也是对象的地址值。比较内存地址值一般情况下是没有意义的,我们希望比较的是对象的属性,如果两个对象的属性相同,我们认为就是同一个对象;

那么要比较对象的属性,我们就需要在JavaBean类中重写Object类中的equals方法.

具体的操作如下所示:

1. 在空白处使用快捷键:alt + insert。此时会弹出如下的对话框

 ![1576056718392](assets/1576056718392.png) 

2. 选择equals() and hashCode()方法,此时会弹出如下的对话框

![1576057779458](assets/1576057779458.png) 

点击next,会弹出如下对话框:

![1576057813175](assets/1576057813175.png) 

选择neme和age属性点击next,此时就会弹出如下对话框:

![1576057892814](assets/1576057892814.png) 

取消name和age属性(因为此时选择的是在生成hashCode方法时所涉及到的属性,关于hashCode方法后期再做重点介绍),点击Finish完成生成操作。生成的equals方法和hashCode方法如下:
 

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student student = (Student) o;
    return Objects.equals(name, student.name) && Objects.equals(age, student.age);	// 比较的是对象的name属性值和age属性值
}

@Override
public int hashCode() {
    return 0;
}


此时equals方法比较的是对象的成员变量值.

小结:

1. 默认情况下equals方法比较的是对象的地址值
2. 比较对象的地址值是没有意义的,因此一般情况下我们都会重写Object类中的equals方法

 color:对象克隆

对象克隆的分类:深克隆和浅克隆

浅克隆(默认):

​    不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来 

​    基本数据类型拷贝过来的是具体的数据,引用数据类型拷贝过来的是地址值。

​    Object类默认的是浅克隆,如果需要深克隆需要重写方法或者使用第三方工具类。

深克隆:

​    基本数据类型拷贝过来,字符串复用,引用数据类型会重新创建新的

   细节:
        方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。
  书写细节:
        1.重写Object中的clone方法
        2.让javabean类实现Cloneable接口
        3.创建原对象并调用clone就可以了

以后一般会用第三方工具进行克隆:
        1.第三方写的代码导入到项目中
        2.编写代码
        Gson gson =new Gson();
        把对象变成一个字符串
        String s=gson.toJson(u1);
        再把字符串变回对象就可以了
        User user =gson.fromJson(s, User.class);

        int[] arr=u1.getData();
        arr[0] = 100;

        打印对象
        System.out.println(user);

五、Objects

Objects类所在包是在java.util包下,因此在使用的时候需要进行导包。并且Objects类是被final修饰的,因此该类不能被继承。

常见方法:

public static String toString(Object o)                     // 获取对象的字符串表现形式
public static boolean equals(Object a, Object b)            // 比较两个对象是否相等
public static boolean isNull(Object obj)                    // 判断对象是否为null
public static boolean nonNull(Object obj)                    // 判断对象是否不为null

equal细节:
1.方法的底层会判断s1是否为null,如果为null,直接返回false

2.如果s1不为null,那么就利用s1再次调用equals方法
3.此时s1是student类型,所以最终还是会调用student中的equals方法。

        如果没有重写,比较地址值,如果重写了,就比较属性值。

 六、BigInteger类


​    平时在存储整数的时候,Java中默认是int类型,int类型有取值范围:-2147483648 ~ 2147483647。如果数字过大,

就需要用到BigInteger,可以理解为:大的整数。

​    有多大呢?理论上最大到42亿的21亿次方,基本上在内存撑爆之前,都无法达到这个上限。

常见方法:

public BigInteger(int num, Random rnd)         //获取随机大整数,范围:[0 ~ 2的num次方-1]
public BigInteger(String val)                 //获取指定的大整数
public BigInteger(String val, int radix)     //获取指定进制的大整数
    
下面这个不是构造,而是一个静态方法获取BigInteger对象
public static BigInteger valueOf(long val)     //静态方法获取BigInteger的对象,内部有优化

BigInteger.valueOf细节:
        1.能表示范围比较小,只能在long的取值范围之内,如果超出long的范围就不行了。
        2.在内部对常用的数字: -16 ~ 16 进行了优化。
         提前把-16~16 先创建好BigInteger的对象,如果多次获取不会重新创建新的。

小结:

* 如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取。
* 如果BigInteger表示的超出long的范围,可以用构造方法获取。
* 对象一旦创建,BigInteger内部记录的值不能发生改变。
* 只要进行计算都会产生一个新的BigInteger对象

            public BigInteger add(BigInteger val) 加法
            public BigInteger subtract(BigInteger val) 减法
            public BigInteger multiply(BigInteger val) 乘法
            public BigInteger divide(BigInteger val) 除法,获取商
            public BigInteger[] divideAndRemainder(BigInteger val) 除法,获取商和余数
            public boolean equals(Object x) 比较是否相同
            public BigInteger pow(int exponent) 次幂
            public BigInteger max/min(BigInteger val) 返回较大值/较小值
            public int intValue(BigInteger val) 转为int类型整数,超出范围数据有误

底层存储方式:

实际存储的时候,先把具体的数字变成二进制,每32个bit为一组,存储在数组中。

理论上,BigInteger能表示的最大数字为:42亿的21亿次方。

但是还没到这个数字,电脑的内存就会撑爆,所以一般认为BigInteger是无限的。 

七、BigDecimal类

在使用float或者double类型的数据在进行数学运算的时候,很有可能会产生精度丢失问题。

1.通过传递double类型的小数来创建对象//细节;
这种方式有可能是不精确的,所以不建议使用
2.通过传递字符串表示的小数来创建对象

BigDecimal bd3 = new BigDecimal( val: "e.e1");
BigDecimal bd4 = new BigDecimal( val: "e.09" ) ;

system.out.print1n(bd3);
system.out.println( bd4);

3.通过静态方法获取对象

BigDecimal bd6 = BigDecimal.valueof(10);
system.out.print1n( bd6);

细节:
1.如果要表示的数字不大,没有超出double的取值范围,建议使用静态方法

2.如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法
3.如果我们传递的是e~10之间的整数,包含e,包含10,那么方法会返回已经创建好的对象,不会重新new

常见成员方法:

public BigDecimal add(BigDecimal value)                // 加法运算
public BigDecimal subtract(BigDecimal value)        // 减法运算
public BigDecimal multiply(BigDecimal value)        // 乘法运算
public BigDecimal divide(BigDecimal value)            // 除法运算

BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)//(除数,精确几位,舍入模式)

//除法运算

divisor:            除数对应的BigDecimal对象;
scale:                精确的位数;
roundingMode:        取入模式;
取舍模式被封装到了RoundingMode这个枚举类中(关于枚举我们后期再做重点讲解),在这个枚举类中定义了很多种取入方式。最常见的取舍方式有如下几个:
UP(直接进1) ,UP:远离零方向舍入的舍入模式

DOWN:向零方向舍入的舍入模式
CEILING:向正无限大方向舍入的舍入模式

FLOOR(直接删除) ,

HALF_UP(4舍五入),我们可以通过如下格式直接访问这些取舍模式:枚举类名.变量名

底层存储方式:
把数据看成字符串,遍历得到里面的每一个字符,把这些字符在ASCII码表上的值,都存储到数组中。

附:API帮助文档

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值