学习日记(常用类之 Object、Objects、StringBuilder、Math、System、BigDecimal)
一、Object 类
- 一个类要么默认继承了 Object 类,要么间接继承了 Object 类,Object 类是 java 中的祖宗类。
- Object 类的方法是一切子类都可以直接使用的,所以要学习 Object 类的方法。
方法名 | 说明 |
---|---|
toString() | 默认返回当前对象在堆内存中的地址信息:类的全限名@地址信息,返回值类型为 String 类型 |
equals(Object o) | 默认比较当前对象与另一对象的地址是否相同,返回值类型为 boolean 型 |
1. toString 方法
开发中输出对象变量,更多的是希望看到对象的内容数据而不是地址,因此 toString 方法存在的意义就是为了被子类重写(快捷键:Alt + Insert),以便返回对象的内容信息。
2. equals 方法
父类 equals 方法存在的意义就是为了被子类重写(快捷键:Alt + Insert),以便子类来自己制定规则。
二、Objects 类
Objects 类与 Object 类还是继承关系,Objects 类是从 JDK1.7 开始之后才有的。Objects 类的 equals 方法更安全。
方法名 | 说明 |
---|---|
equals(Object a, Object b) | 比较两个对象内容是否相等,会先进行非空判断,static 方法,返回值为 boolean 类型 |
isNull(Object obj) | 判断变量是否为 null,static 方法,返回值为 boolean 类型 |
1. equals 方法
2. isNull 方法
三、StringBuilder 类
- StringBuilder 是一个可变的字符串类,我们可以把它看成是一个对象容器。
- 作用:提高字符串的操作效率,如拼接、修改等。
方法名 | 说明 |
---|---|
append(任意类型) | 添加数据,返回值类型为 StringBuilder 类型(支持链式编程) |
reverse() | 将对象的内容反转,返回值类型为 StringBuilder 类型(支持链式编程) |
length() | 返回对象内容长度,返回值类型为 int 类型 |
toString() | 将 StringBuilder 类型转换为 String 类型,返回值类型为 String 类型 |
1. 各种方法演示
2. 案例:打印整形数组内容
需求:设计一个方法用于输出任意整形数组的内容,需要输出以下格式:“该数组内容为:[11, 22, 33, 44, 55]”。
运行结果
更优美的代码
package com.residue.manyclass;
public class StringBuilderDemo04 {
public static void main(String[] args) {
int[] array = {11, 22, 33, 44, 55};
String result = new StringBuilderDemo04().printIntArray(array);
System.out.println(result);
}
public String printIntArray(int[] array) {
if (array != null) {
StringBuilder s = new StringBuilder();
s.append("该数组内容为:[");
for (int i = 0; i < array.length; i++) {
s.append(array[i]).append(i == (array.length - 1) ? "" : ", ");
}
s.append("]");
return s.toString();
} else {
return null;
}
}
}
四、Math 类
- 包含执行基本数字运算的方法,Math 类没有提供公开的构造器。
- 通过类名可以直接调用静态方法。
常用方法名 | 说明 |
---|---|
abs(int a) | 获取绝对值,返回值为 int 类型 |
ceil(double a) | 向上取整,返回值为 double 类型 |
floor(double a) | 向下取整,返回值为 double 类型 |
round(float a) | 四舍五入,返回值为 int 类型 |
max(int a, int b) | 获取最大值,返回值为 int 类型 |
pow(double a, double b) | 返回 a 的 b 次幂,,返回值为 double 类型 |
random() | 返回一个范围为 [0.0, 1.0) 的随机数(左闭右开),返回值为 double 类型 |
五、System 类
System 类的功能是通用的,都是直接用类名调用即可,所以 System 不能被实例化。
方法名 | 说明 |
---|---|
exit(int status) | 终止当前运行的 java 虚拟机,status 非零表示异常终止 |
currentTimeMillis() | 返回当前系统的时间毫秒值形式,返回值为 long 类型 |
arraycopy(数组源数组,起始索引,目的地数组,起始索引,拷贝个数) | 数组拷贝 |
1. exit 方法
2. currentTimeMillis 方法
3. arraycopy 方法(了解)
六、BigDecimal 类
用于解决浮点型数据运算精度失真的问题。包装浮点型数据成为大数据对象方法:
- 入参为 String 的构造方法:
BigDecimal a = new BigDecimal("0.1");
- (最好)使用 BigDecimal 的 valueOf 方法:
BigDecimal a = BigDecimal.valueOf(0.1);
。
方法名 | 说明 |
---|---|
valueOf() | 包装各种数据成为大数据对象 |
add(BigDecimal b) | 加法,返回值类型为 BigDecimal 类型 |
subtract(BigDecimal b) | 减法,返回值类型为 BigDecimal 类型 |
multiply(BigDecimal b) | 乘法,返回值类型为 BigDecimal 类型 |
divide(BigDecimal b) | 除法,返回值类型为 BigDecimal 类型 |
divide(另一个 BigDecimal 对象,精确几位,舍入模式) | 除法,返回值类型为 BigDecimal 类型 |
doubleValue() | 把大数据类型转换为 double 类型 |
1. 各种方法演示
注意:BigDecimal 一定是要精度运算的!
2. 把大数据类型转换为 double 或 int 类型
注意:
- 比较对象内容时建议使用 Objects 提供的 equals 方法,原因:比较结果相同,但更安全。
- 拼接、反转字符串建议用 StringBuilder,因为 String 类内容不可变、拼接字符串性能差;StringBuilder 类内容可变、拼接字符串性能好、代码优雅。但是,要注意,StringBuilder 类是提高效率的手段,String 类是目的,最后仍要把 StringBuilder 类转换为 String 类。
- BigDecimal 类型可以解决浮点型数据运算精度失真的问题,但是 BigDecimal 只是手段,最后还要转化为 int 类型或 double 类型。
- BigDecimal 一定是要精度运算的,否则如下所示。
- 重要的是理解!