JavaSE_笔记04

文章详细介绍了Java中Object类的重要方法,如toString()用于返回对象的字符串表示,equals()用于比较对象,clone()涉及浅克隆和深克隆概念,以及finalize()方法。此外,还讲解了Objects工具类的用途,以及BigDecimal类在进行精确浮点数运算时的角色,包括加减乘除和舍入模式。最后提到了Java的自动装箱和拆箱特性以及基本类型与String之间的转换。
摘要由CSDN通过智能技术生成

一、Object

  • 说明: 所有类都直接或间接的继承了【Object类
返回值方法描述
StringtoString​()返回对象的字符串表示形式。默认返回地址 (返回对象的地址值: <包名+类名 @ 对象地址值> )
booleanequals​(Object obj)比较对象是否相等。默认比较地址,重写可以比较内容
protected Objectclone​()创建并返回此对象的副本。(分为【浅】克隆和【深】克隆)
protected voidfinalize​()返回此 Object的运行时类。
Class<?>getClass​()
inthashCode​()返回对象的哈希码值。 (根据对象的【属性值/地址值】生成一个十进制的数)
voidnotify​()唤醒正在等待对象监视器的单个线程。
voidnotifyAll​()唤醒正在等待对象监视器的所有线程。
voidwait​()使当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。

toString​() 方法
  • **说明:**返回调用者的字符串表示形式,默认返回对象的地址值,重写后可以返回对象的内容
  • 格式: String str = 对象.toStirng(); //将 对象 转为String类型后 赋值给变量str
  • toString() 的调用者没有重写 toString() 方法时,会调用Object中的 toString() 方法
    • 默认返回对象的地址值,
    • 建议重写后使用

测试Object的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(); //向下转型才能访问子类成员变量
        //clone() 方法克隆出来的是一个对象
        System.out.println(oldObject);  //输出: com.st.OldObject@4dcbadb4
        System.out.println(newObject);  //输出: com.st.OldObject@4e515669

        //基本类型成员 age 克隆其【内容】,引用类型成员 str 克隆其【地址】
        System.out.println("oldObject.age == newObject.age -> " + (oldObject.age == newObject.age));    //输出: oldObject.age == newObject.age -> true
        System.out.println(oldObject.getStrHashAdd());  //输出: java.lang.String@17d10166
        System.out.println(newObject.getStrHashAdd());  //输出: java.lang.String@17d10166
    }
  • 从上面可以看出,继承自【Object】类的clone()方法是【浅】克隆

finalize​() 方法
  • 说明:

final - finally - finalize 三者之间的有何关系?各自有什么作用?

  • 答: 没有任何关系,只是长得像而已!!!
  • final(最终):】可以修饰<修饰符, 方法, 变量>
    • 使用【final】修饰 <类> 时,被修饰的类将无法拥有子类,但可以被调用
    • 使用【final】修饰 <方法> 时,被修饰的方法将无法被重写,但可以被调用
    • 使用【final】修饰 <变量> 时,被修饰的变量将变成常量
      • 当修饰的变量为【基本类型】时,其值无法修改
      • 当修饰的变量为【引用类型】时,其地址值不可修改
  • finally:】try{} catch(Exception e){} finally{} 结构中,无论是否发生异常都会执行其大括号内的语句
  • finally:】它是一个方法,对象被垃圾回收器回收之前,自动调用。
    • 生命周期尽头所要干的事(死之前的遗言)

getClass() 方法
  • **说明:**获取该对象的字节码对象

hashCode​() 方法
  • **说明:**获取对象的哈希值

二、Objects

返回值方法描述
StringtoStringObject o()返回调用 toString的结果(调用对象的toString()方法)
StringtoString​(Object o, String nullDefault)如果第一个参数不是 null ,则返回第一个参数上调用 toString的结果,否则返回第二个参数。
booleanisNull​(Object obj)判断对象是否为空;不为空则返回true,否则返回false
booleannonNull​(Object obj)判断对象是否不为空;为空则返回true,否则返回false

三、BigDecimal

  • 说明: 精确计算浮点数
构造方法描述
BigDecimal​(int val)将 int 翻译成 BigDecimal
BigDecimal​(String val)将 String 转换为 BigDecimal 【推荐使用】
返回值方法描述
BigDecimaladd​(BigDecimal augend)加法运算,返回调用者和形参对象相【加】的值
BigDecimalsubtract​(BigDecimal subtrahend)减法运算,返回调用者和形参对象相【减】的值
BigDecimalmultiply​(BigDecimal multiplicand)乘法运算,返回调用者和形参对象相【乘】的值
BigDecimaldivide​(BigDecimal divisor)除法运算,返回调用者和形参对象相【除】的值
BigDecimaldivide​(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); //输出: bd1.add(bd2) :4.5999999999999998667732370449812151491641998291015625
        
        BigDecimal bd3 = new BigDecimal("1.2");
        BigDecimal bd4 = new BigDecimal("3.4");
        BigDecimal add1 = bd3.add(bd4);
        System.out.println("bd3.add(bd4) :" + add1);//输出: bd3.add(bd4) :4.6
    }

从上面的代码可以看出,的用参数为【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); //输出: bd1.add(bd2) :4.6
        System.out.println("================我=是=分=割=线================\n");

        BigDecimal subtract = bd1.subtract(bd2);
        System.out.println("bd1.subtract(bd2) :" + subtract); //输出: bd1.subtract(bd2) :-2.2
        System.out.println("================我=是=分=割=线================\n");

        BigDecimal multiply = bd1.multiply(bd2);
        System.out.println("bd1.multiply(bd2) :" + multiply); //输出: bd1.multiply(bd2) :4.08
        System.out.println("================我=是=分=割=线================\n");

//        BigDecimal divide = bd1.divide(bd2);
//        System.out.println("bd1.divide(bd2) :" + divide); //报错: ArithmeticException; 
                                                            //我们需要使用带有舍入方式的 divide() 方法

        BigDecimal divide_up = bd1.divide(bd2, BigDecimal.ROUND_UP);
        System.out.println("bd1.divide(bd2, BigDecimal.ROUND_UP) :" + divide_up);           //输出: bd1.divide(bd2, BigDecimal.ROUND_UP) :0.4         进一
        BigDecimal divide_floor = bd1.divide(bd2, BigDecimal.ROUND_FLOOR);
        System.out.println("bd1.divide(bd2, BigDecimal.ROUND_FLOOR) :" + divide_floor);     //输出: bd1.divide(bd2, BigDecimal.ROUND_FLOOR) :0.3      去尾
        BigDecimal divide_half_up = bd1.divide(bd2, BigDecimal.ROUND_HALF_UP);
        System.out.println("bd1.divide(bd2, BigDecimal.ROUND_HALF_UP) :" + divide_half_up); //输出: bd1.divide(bd2, BigDecimal.ROUND_HALF_UP) :0.4    四舍五入
    }

四、包装类

  • 说明:
  • 提供了 很多方法,简化了我们对数据的操作
  • 用的最多的是【基本数据类型】和【String】之间的相互转换
基本类型包装类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

  • 特点:
    • 自动装箱:把一个 基本数据类型 转换为对应的 包装类类型
    • 自动拆箱:把 包装类类型 转换为对应的 基本数据类型
public void Demo() {
        //static Integer valueOf(int i) 返回表示指定的 int值的 Integer实例。  
        Integer i1 = 123;	//编译: Integer i1 = Integer.valueOf(123); 【自动装箱】
        //int intValue() 返回 Integer的值作为 int 。  
        int i2 = i1;        //编译: int i2 = i1.intValue();			   【自动拆箱】
    }
  • 【基本数据类型】转【String】
    • 对象.toString()
    • String str = “” + 对象;
  • 【String】转【基本数据类型】
    • eg(int - > String):int num = Integer.parseInt(s);
    • 其中 变量【s】需为纯数字,否则会报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值