Java学习_12_常用API(一)


前言

记录一些常用的API
在这里插入图片描述

博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao


一、将图形化代码打包成EXE

在这里插入图片描述

在这里插入图片描述

二、Math

方法都是用static修饰的,可以用类名直接引用
常用方法:
在这里插入图片描述
注意,如果超出方法的提示范围会报错。
在这里插入图片描述
向上取整实际上是向右取整,向下取整实际上是向左取整。
在这里插入图片描述
练习:
1、找质数,代码如下:

     public static boolean isPrime(int number) {
         for (int i = 2; i <= Math.sqrt(number); i++) {
             if (number%i == 0) {
                 return false;
             }
         }
         return true;
     }

2、在这里插入图片描述
代码如下:

    public static ArrayList<Integer> isSelfPower(int number) {
        ArrayList<Integer> intgerArrayList = new ArrayList<>();
        for (int i = (int)Math.pow(10, number - 1); i < (int)Math.pow(10, number); i++) {
            String str = "" + i;
            char[] chars = str.toCharArray();
            double num = 0;
            for (int j = 0; j < str.length(); j++) {
                num = num + Math.pow((double)(chars[j]-'0'), (double) number);
            }
            if((int)num == i){
                intgerArrayList.add(i);
            }
        }
        return  intgerArrayList;
    }

三、System

在这里插入图片描述

在这里插入图片描述

exit函数就是停止虚拟机的运行,后续代码都不再执行。
currentTime返回的是当前系统的毫秒时间,指的是1970年1月1日后到当前时间的总时间。
常用于判断程序运行的时间,例如:在这里插入图片描述
在这里插入图片描述
参数二和参数五表示了拷贝的范围,参数一和参数三是数组头部的指针,参数四指的是目的数组中,想让被拷贝的数据开始的位置。
在这里插入图片描述
细节:
1.如果拷贝的时候原数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错。
2.如果在拷贝数组的时候超过长度也会报错。
3.如果拷贝的数组都是引用数据类型(自定义类的指针),相同时可以直接拷贝。不同时只要来源的两个类是继承关系,那么子类的数组可以赋值给父类数组 ,但需要强制转换(反之不行,因为父类的对象可能不包含子类的成员属性,给子类赋值后有些成员属性缺失不能实例化。)

四、Runtime

表示当前虚拟机的运行环境。
在这里插入图片描述

Runtime的构造函数时私有对象,不能由外界构造对象。使用final和static修饰的自身成员表示从始至终都只有这一个虚拟环境。
在这里插入图片描述
r1==r2
在这里插入图片描述

五、Object

object是所有类的父类(顶层父类) ,其中只有一个无参构造,没有成员变量,和一些通用的成员方法。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

细节:System.out.println();
System:类名
out:静态变量
System.out:获取打印的对象
println(): 方法
参数:打印的内容
核心逻辑:当我们打印一个对象的时候,println()的底层代码会调用对象的toString方法,把对象变成字符串。
然后再打印到控制台上。打印完再换行处理。默认情况下因为Obeject类中的toString方法返回的是地址值的拼接,所以会打印地址值,如果需要打印目标属性值,就应重写目标类的toString方法。再重写的方法中,将想显示的属性值拼接成字符串。
在这里插入图片描述

equals也是一个道理,重写之后的equals方法就可以比较目标对象内部的属性值了。
如果没有重写的话,比较的默认是地址值,源代码如下:
在这里插入图片描述
在这里插入图片描述
因为第一个equals是String类的方法,String方法的equals需要先确定是不是String类,如果是就比较内部属性,如果不是则直接返回False。
第二个equals是StringBuilder类的方法,而StringBuiler没有equals方法,往上面两层父类都没有重写该方法,所以默认调用的是object方法,比较的是两个值是地址值,故返回False。

克隆的应用场景:游戏角色存档的转移 。
在这里插入图片描述
在这里插入图片描述

需要特别标记Cloneable来提示该类可以被克隆。
重写(递归至底层,会帮我们复制所有的数据成员),继承自Object的clone方法来对该类的各个对象进行赋值。
在这里插入图片描述
细节:
object类的clone在底层会帮我们创建一个对象,其成员属性会包括clone回传需要被克隆的那个对象的所有可访问的成员属性,然后将这些数据拷贝到那个被创建的对象上,最后使用强制转换将该对象转换成当前被克隆的对象类型。
1.重写object的clone方法
2.让JavaBean类实现cloneable接口
3.创建原对象并调用clone就可以了

浅克隆

在这里插入图片描述
这样的方式会导致指针类(引用数据类型,如数组)的数据指向同一块地址,其中一个对象进行改变的时候,另一个对象也会随之改变,无法产生存档的效果。
object中的clone方法是浅克隆。

深克隆

在这里插入图片描述

在引用数据类型上,会额外开辟一个新的引用数据类型对应的对象,然后将这些引用数据类型后续的数据一一复制过来,再拷贝完成后修改互不干扰。但是字符串作为特殊的引用数据类型,如果不是主动new的都是static类,还是会clone地址。
如果现在需要使用深克隆,需要手动重载clone方法。
在浅克隆的基础上,将引用数据类型手动的创建并复制,最后把这些地址复制给浅克隆来的对象。
在这里插入图片描述
但是这还不是最优解,因为二维数组甚至跟维度的数组,其数值本身就是地址,要手动一层一层的做clone处理,非常不方便。
之后会用到第三方工具Gson实现深克隆。
在这里插入图片描述

在这里插入图片描述
Objects
是一个工具类,提供了一些方法去完成一些功能。
在这里插入图片描述
在这里插入图片描述
作为一个工具类,可以直接使用类名来调用方法。
如果s1和s2作比较,s1是null,就会返回false。如果s1不是null,就会调用s1的equals方法,如果没有重写就是地址值比较,如果重写了就是属性值比较。
当前对象
一般用来省略自己手写非空判断。
在这里插入图片描述

六、BigInteger

如果超出了int的整型上限,就可以使用大整数biginteger。
(大学时总是在手写大数加减乘,现在想想大数除不就是大数减吗?当时觉得好难,现在想想也还好。)
在这里插入图片描述
在这里插入图片描述
最常使用:
在这里插入图片描述
本质是将字符串转换成整型(大整型)用于参与运算。但是字符串本身有要求,需要全是数字,符号只能在头部出现+或者-。
在这里插入图片描述
这个方法只是把long范围内的整型转换成大整形。并且内部会对常用数字进行优化(提前创建好),多次用大整形来获取的时候,不会创建新的-16~16内的数据。如下:
在这里插入图片描述
对象一旦创建,内部数据不能发生改变,和String就很像。
在这里插入图片描述
在这里插入图片描述
常用方法:
在这里插入图片描述
注意除余法需要返回的余数,所以返回的是一个数组(大小为2),分别存储商和余数。

底层原理:

在这里插入图片描述
signum表示符号。
mag表示被拆分的小段。
代码首先将字符串用某种方法转换成整型(二进制),每32位分一组,再将二进制转换成十进制整型,最后取补码存入数组,数组中存储的是十进制有符号整型(补码)
处理只需要注意每组之间的进位信息,组内的进位信息交给计算机。
在这里插入图片描述
计算机中的数据都是转换成二进制计算的,具体过程可以参考《计算机组成原理》
很多十进制的小数是无法使用二进制精确表示的(需要舍入)。
在这里插入图片描述

七、BigDecima

不可变的,任意精度的十进制小数。

直接使用double构造会导致精度不准确,是因为底层逻辑赋值导致的。
在这里插入图片描述
在这里插入图片描述
通过字符串构造的长小数是准确的。
在这里插入图片描述
在这里插入图片描述

通过静态方法(valueof)也不会导致精度错误,但是数据范围只有基本的double范围。
在这里插入图片描述
和BigInteger一样,有预构造的数字,为1~10。注意预构造的数字是整数。

注意,除法中如果出现除不尽的情况,需要提前设置舍入模式,否则会报错。
在这里插入图片描述
在这里插入图片描述
现在会使用枚举类来修饰。
HALF_UP:四舍五入,但是大于等于0.5舍入。(最近数舍入)
HALP_DPWN: 四舍五入,但是大于0.5舍入。
在这里插入图片描述
其他常用舍入模式:
UP:远离零方向的舍入模式(正负相反)
DOWN:向零方向的舍入模式(正负相反)
CEILING:向数轴正方向的舍入模式(向右舍入)
FLOOR:向数轴负方向的舍入模式(向左舍入)

总结

常用API需要熟练使用,很多面试题都会有涉及。
特别是大数,这种字符串转换的运算可以节省很多代码量,不用每次都是手动接收输入流了。
克隆的运用很需要熟练,因为JAVA的引用类型变量和C的指针确实有不小的区别,在想使用克隆后的数据来进行测试更改等操作每次都是和原引用数据一起赋值,非常繁琐,现在可以使用克隆方法来创建数据副本了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值