一、Object
- 说明: 所有类都直接或间接的继承了【Object类】
返回值 | 方法 | 描述 |
---|
String | toString() | 返回对象的字符串表示形式。默认返回地址 (返回对象的地址值: <包名+类名 @ 对象地址值> ) |
boolean | equals(Object obj) | 比较对象是否相等。默认比较地址,重写可以比较内容 |
protected Object | clone() | 创建并返回此对象的副本。(分为【浅】克隆和【深】克隆) |
protected void | finalize() | 返回此 Object的运行时类。 |
Class<?> | getClass() | |
int | hashCode() | 返回对象的哈希码值。 (根据对象的【属性值/地址值】生成一个十进制的数) |
void | notify() | 唤醒正在等待对象监视器的单个线程。 |
void | notifyAll() | 唤醒正在等待对象监视器的所有线程。 |
void | wait() | 使当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。 |
toString() 方法
- **说明:**返回调用者的字符串表示形式,默认返回对象的地址值,重写后可以返回对象的内容
- 格式: String str = 对象.toStirng(); //将 对象 转为String类型后 赋值给变量str
- 当 toString() 的调用者没有重写 toString() 方法时,会调用Object中的 toString() 方法
equals() 方法
- 说明: 比较调用者和对象的地址值,重写后可比较内容
- 格式: boolean b = 对象1.equals(对象2) // 判断 对象1 与 对象2 是否相等,相等返回【true】,否则返回【false】
- 当 equals() 的调用者没有重写 equals() 方法时,会调用Object中的
- 该方法默认比较地址值,但两个地址值必然不相同,作比较没有意义
- 建议重写后使用
clone() 方法
- 说明: 比较调用者和对象的地址值,重写后可比较内容
- 格式: 类型 对象1名 = 对象2.clone() //将 对象2 克隆到 对象1,克隆又分【浅】克隆和【深】克隆
- 浅克隆: 基本类型属性克隆其【内容】,引用类型属性克隆其【地址】;对象2 中的引用类型属性发生更改时,【会】影响到对象1
- 深克隆: 基本类型属性克隆其【内容】,引用类型属性克隆其【内容】;对象2 中的引用类型属性发生更改时,【不会】影响到对象1
public void Demo() throws CloneNotSupportedException {
OldObject oldObject = new OldObject();
OldObject newObject = (OldObject) oldObject.clone();
System.out.println(oldObject);
System.out.println(newObject);
System.out.println("oldObject.age == newObject.age -> " + (oldObject.age == newObject.age));
System.out.println(oldObject.getStrHashAdd());
System.out.println(newObject.getStrHashAdd());
}
- 从上面可以看出,继承自【Object】类的clone()方法是【浅】克隆
finalize() 方法
final - finally - finalize 三者之间的有何关系?各自有什么作用?
- 答: 没有任何关系,只是长得像而已!!!
- 【final(最终):】可以修饰<修饰符, 方法, 变量>
- 使用【final】修饰 <类> 时,被修饰的类将无法拥有子类,但可以被调用
- 使用【final】修饰 <方法> 时,被修饰的方法将无法被重写,但可以被调用
- 使用【final】修饰 <变量> 时,被修饰的变量将变成常量
- 当修饰的变量为【基本类型】时,其值无法修改
- 当修饰的变量为【引用类型】时,其地址值不可修改
- 【finally:】try{} catch(Exception e){} finally{} 结构中,无论是否发生异常都会执行其大括号内的语句
- 【finally:】它是一个方法,对象被垃圾回收器回收之前,自动调用。
getClass() 方法
hashCode() 方法
二、Objects
返回值 | 方法 | 描述 |
---|
String | toStringObject o() | 返回调用 toString的结果(调用对象的toString()方法) |
String | toString(Object o, String nullDefault) | 如果第一个参数不是 null ,则返回第一个参数上调用 toString的结果,否则返回第二个参数。 |
boolean | isNull(Object obj) | 判断对象是否为空;不为空则返回true,否则返回false |
boolean | nonNull(Object obj) | 判断对象是否不为空;为空则返回true,否则返回false |
三、BigDecimal
构造方法 | 描述 |
---|
BigDecimal(int val) | 将 int 翻译成 BigDecimal |
BigDecimal(String val) | 将 String 转换为 BigDecimal 【推荐使用】 |
返回值 | 方法 | 描述 |
---|
BigDecimal | add(BigDecimal augend) | 加法运算,返回调用者和形参对象相【加】的值 |
BigDecimal | subtract(BigDecimal subtrahend) | 减法运算,返回调用者和形参对象相【减】的值 |
BigDecimal | multiply(BigDecimal multiplicand) | 乘法运算,返回调用者和形参对象相【乘】的值 |
BigDecimal | divide(BigDecimal divisor) | 除法运算,返回调用者和形参对象相【除】的值 |
BigDecimal | divide(BigDecimal divisor, int roundingMode) | 带舍入方式申请的除法运算 |
- 舍入方式
- BigDecimal.ROUND_UP //进一
- BigDecimal.ROUND_FLOOR //去尾
- BigDecimal.ROUND_HALF_UP //四舍五入
public void Demo() {
BigDecimal bd1 = new BigDecimal(1.2);
BigDecimal bd2 = new BigDecimal(3.4);
BigDecimal add = bd1.add(bd2);
System.out.println("bd1.add(bd2) :" + add);
BigDecimal bd3 = new BigDecimal("1.2");
BigDecimal bd4 = new BigDecimal("3.4");
BigDecimal add1 = bd3.add(bd4);
System.out.println("bd3.add(bd4) :" + add1);
}
从上面的代码可以看出,的用参数为【String】的构造方法才可以算出更精确的数值,所以推荐使用该构造方法
public void Demo() {
BigDecimal bd1 = new BigDecimal("1.2");
BigDecimal bd2 = new BigDecimal("3.4");
BigDecimal add = bd1.add(bd2);
System.out.println("bd1.add(bd2) :" + add);
System.out.println("================我=是=分=割=线================\n");
BigDecimal subtract = bd1.subtract(bd2);
System.out.println("bd1.subtract(bd2) :" + subtract);
System.out.println("================我=是=分=割=线================\n");
BigDecimal multiply = bd1.multiply(bd2);
System.out.println("bd1.multiply(bd2) :" + multiply);
System.out.println("================我=是=分=割=线================\n");
BigDecimal divide_up = bd1.divide(bd2, BigDecimal.ROUND_UP);
System.out.println("bd1.divide(bd2, BigDecimal.ROUND_UP) :" + divide_up);
BigDecimal divide_floor = bd1.divide(bd2, BigDecimal.ROUND_FLOOR);
System.out.println("bd1.divide(bd2, BigDecimal.ROUND_FLOOR) :" + divide_floor);
BigDecimal divide_half_up = bd1.divide(bd2, BigDecimal.ROUND_HALF_UP);
System.out.println("bd1.divide(bd2, BigDecimal.ROUND_HALF_UP) :" + divide_half_up);
}
四、包装类
- 说明:
- 提供了 很多方法,简化了我们对数据的操作
- 用的最多的是【基本数据类型】和【String】之间的相互转换
基本类型 | 包装类型 |
---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
- 特点:
- 自动装箱:把一个 基本数据类型 转换为对应的 包装类类型
- 自动拆箱:把 包装类类型 转换为对应的 基本数据类型
public void Demo() {
Integer i1 = 123;
int i2 = i1;
}
- 【基本数据类型】转【String】
- 对象.toString()
- String str = “” + 对象;
- 【String】转【基本数据类型】
- eg(int - > String):int num = Integer.parseInt(s);
- 其中 变量【s】需为纯数字,否则会报错