文章目录
- 一、Object 类
- 二、Objects 工具类
- 三、Math 类
- 四、System 类
- 五、BigDecimal 类
一、Object 类
一个类要么默认继承了 Object 类,要么间接继承了 Object 类,Object 类是 java 中的祖宗类。Object 类的方法是一切子类都可以直接使用的。
因此,子类可以重写 Object 类的 toString() 与 equals(obj) 的方法。
子类重写 toString() 方法,是以便返回子类对象的内容。
子类重写 equals() 方法,是以便比较对象的内容是否相同。
Idea 快捷键 Alt + Enter 键生成官方提供的方法,方法如下:
public class Student {
private String name;
private char sex;
private int age;
// set 和 get 方法省略
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex=" + sex +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return sex == student.sex && age == student.age && Objects.equals(name, student.name);
}
}
官方提供的 equals 方法:首先判断是否为同一个对象,然后再判断对象是否为空或是否为学生类,最后判断学生类中的成员变量的值。
但也存在问题,如果一个空的学生类对象调用equals方法,则会报错,因此建议用 Objects 类进行比较。
二、Objects 工具类
Objects 是一个工具类,其与 Object 是继承关系,常用 API 如下:
equals() 方法源码:Objects多了一层判断 a 对象是否为空,因此会比较安全。
注: 如果 a 对象不为空,a.equals(b)方法还是会调用 Object 的 equals(obj) 方法,所以不论使用哪种比较方法,都需要重写 equals(obj) 方法,以防比较地址。
举例:假设 Student 类重写了 equals 方法。
public class Test {
public static void main(String[] args) {
Student s1 = null;
Student s2 = new Student("张三", '男', 19);
System.out.println(Objects.equals(s1, s2)); // false
System.out.println(s1.equals(s2)); // 报错,空指针异常
}
}
三、Math 类
Math 类包含执行基本数字运算的方法,Math类没有提供公开的构造器。
看类的成员是否都是静态的,如果是,通过类名就可以直接调用。
Math 类常用方法如下:
n - m 之间的随机数:(int)(Math.random() * (m-n+1)) + n
如:3 - 9 之间的随机数:(int)(Math.random()*7) + 3; // 原理:(0 - 6) + 3
四、System 类
System 的功能是通用的,都是直接用类名调用即可。由于私有构造器,所以System不能被实例化。
时间毫秒值起始时间:1970 年 1 月 1 日 00:00:00
currentTimeMills() 常用语进行时间的计算。
五、BigDecimal 类
用于解决浮点型运算精度失真的问题。
使用: 创建对象 BigDecimal 封装浮点型数据,但最好的方式是调用 valueOf 方法。
说明: BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。
如:BigDecimalg = new BigDecimal(0.1F),实际的存储值为:0.100000001490116119384765625。
BigDecimal 类常用方法如下:
举例:
public class Demo {
public static void main(String[] args) {
// 注意事项:BigDecimal是一定要精度运算的
BigDecimal a11 = BigDecimal.valueOf(10.0);
BigDecimal b11 = BigDecimal.valueOf(3.0);
// System.out.println(a11.divide(b11)); // 报错
/**
参数一:除数 参数二:保留小数位数 参数三:舍入模式
*/
BigDecimal c11 = a11.divide(b11, 2, RoundingMode.HALF_UP); // 3.33 四舍五入
BigDecimal c12 = a11.divide(b11, 2, RoundingMode.CEILING); // 3.34 向上取整
System.out.println(c11);
System.out.println(c12);
// BigDecimal 是手段,最后还需转换成double
double dd = c11.doubleValue();
System.out.println(dd); // 3.33
}
}
文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)