Java笔记_11(常用API)
Java笔记_11
- 一、常用的API
-
- 1.1、Math
-
- Math练习
- 1.2、System
- 1.3、Runtime
- 1.4、Object
- 1.5、浅克隆、深克隆
- 1.6、对象工具类的Objects
一、常用的API
1.1、Math
- 是一个帮助我们进行数学计算的工具类
- 私有化构造方法,所有的方法都是静态的
Math类的常用方法
方法名 | 说明 |
---|---|
public static int abs(int a) | 获取参数绝对值 |
public static doublie ceil(double a) | 向上取整 |
public static doublie floor(double a) | 向下取整 |
public static int round(float a) | 四舍五入 |
public static int max(int a,int b) | 获取两个int值中的较大值 |
public static doublie pow(double a,double b) | 返回a的b次幂的值 |
public static doublie random() | 返回为double的随机值,范围[0.0,1.0) |
public static doublie sqrt(double a) | 返回平方根 |
public static doublie cbrt(double a) | 返回立方根 |
Math练习
- 判断是否为质数
public static boolean isProme(int a){for (int i = 1; i <Math.sqrt(a) ; i++) {if(a%i==0){return false;}}return true;}
- 获取四叶玫瑰数
int count = 0;for (int i = 1000; i < 9999; i++) {int ge = i%10;int shi = i/10%10;int bai = i/100%10;int qian = i/1000%10;double sum = Math.pow(ge,4)+Math.pow(shi,4)+Math.pow(bai,4)+Math.pow(qian,4);if(sum==i){count++;System.out.println(i);}}System.out.println(count);
1.2、System
- System也是工具类,提供一些与系统相关的方法
计算机中的时间原点
1970年1月1日 08:00:00
我国在东八区,有八小时的时差
原因:
1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会。开始着手创造一个全新的革命性的操作系统。他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。
1970年1月1日 算C语言的生日
- 1秒 = 1000毫秒
- 1毫秒 = 1000微秒
- 1微秒 = 1000纳秒
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前运行的Java虚拟机 |
public static long currentTimeMillis() | 返回当前系统的时间毫秒值形式 |
public static void arraycopy(数据源数组,起始索引,目的地索引,起始索引,拷贝个数) | 数组拷贝 |
使用arraycopy
时注意事项:
- 如果数据源数组和目的地数组两者都是基本数据类型,两者的数据类型必须保持一致,否则会进行报错
- 在拷贝的时候需要考虑数组的长度,如果超出范围也会报错
- 如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型
1.3、Runtime
- Runtime表示当前虚拟机的运行环境
方法名 | 说明 |
---|---|
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命令 |
exec
命令关机 shutdown(加上参数才能执行)
- -s :默认在1分钟之后关机
- -s -t 指定时间:指定关机时间
- -a :取消关机操作
- -r :关机并重启
1.4、Object
- Object是Java中的顶级父类。所有的类都直接或间接的继承于Object类。
- Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法
方法名 | 说明 |
---|---|
public String toString() | 返回对象的字符串表示形式 |
public boolean equals(object obj) | 比较两个对象是否相等 |
protected object clone(int a) | 对象克隆 |
println()
:方法
- 参数:表示打印的对象
- 核心逻辑:当我们打印一个对象的时候,底层会调用对象的toString方法,把对象变成字符串。然后再打印在控制台上,打印完毕换行处理。
toString
方法结论:
- 如果我们打印一个对象,想要看到属性值的话,那么就重写tostring方法就可以了。
- 在重写的方法中,把对象的属性值进行拼接。
equals
方法结论:
- 如果没有重写equals方法,那么默认使用object中的方法进行比较,比较的是地址值是否相等
- 一般来讲地址值对于我们意义不大,所以我们会重写,重写之后比较的就是对象内部的属性值了。
String
中的equals
方法
- 先判断参数是否为字符串如果是字符串,再比较内部的属性
- 但是如果参数不是字符串,直接返回false
StringBulider
中的equals
方法
- 在StringBuilder当中,没有重写equals方法使用的是object中的在Object当中默认是使用
==
号比较两个对象的地址值
1.5、浅克隆、深克隆
- 把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制
细节:
方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去
书写细节:
- 重写Object中的clone方法
- 让javabean类实现Cloneable接口
- 创建原对象并调用clone就可以了。
Cloneable
- 如果一个接口里面没有抽象方法表示当前接口是一个标志性接口,现在
Cloneable
表示一旦实现了,那么当前类的对象就可以被克隆
- 浅克隆
Object中的克隆是浅克隆
重写的代码块
protected Object clone() throws CloneNotSupportedException{//调用父类中的clone方法//相当于让java帮我们克隆一个对象,并把克隆之后的对象返回return super clone();}
- 深克隆
重写的clone()方法
protected Object clone() throws CloneNotSupportedException{//调用父类中的clone方法//相当于让java帮我们克隆一个对象,并把克隆之后的对象返回int[] data = this.data;int[] data2 = new int[data.length];for (int i = 0; i < data.length; i++) {data2[i] = data[i];}User u =(User) super.clone();u.data = data2;return u;}
1.6、对象工具类的Objects
方法名 | 说明 |
---|---|
public static boolean equals(Object a,Object b) | 先做非空判断,比较两个对象 |
public static boolean isNull(Object obj) | 判断对象是否为null,为null返回true,反之 |
public static boolean nonNull(Object obj) | 判断对象是否为null,跟isNull的结果相反 |
细节:
- 方法的底层会判断 第一个对象 是否为null,如果为null,直接返回false
- 如果 第一个对象 不为null,那么就利用 第一个对象 再次调用equals方法
- 此时 第一个对象 是 设置的对象 类型,所以最终还是会调用 设置的对象 中的equals方法。
- 如果没有重写,比较地址值,如果重写了,就比较属性值。