完整内部类

内部类的分类

内部类:

  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

什么是内部类

概念:在一个类的内部再定义一个完整的类。
特点:

  • 编译之后可直接生成独立的字节码文件。

  • 内部类可直接访问外部类的私有成员,而不破坏封装。

  • 可为外部类提供必要的内部功能组件。
    在这里插入图片描述
    成员内部类

  • 在类的内部定义,与实例变量、实例方法同级别的类。

  • 外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象。

     	Outer out = new Outer();
     	Inner in = out.new Inner();
    
  • 当外部类、内部类存在重名属性时,会优先访问内部类属性。

  • 成员内部类不能定义静态成员。

静态内部类

  • 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员。
  • 只能直接访问外部类的静态成员(实例成员需实例化外部类对象)。
    Outer.Inner inner = new Outer.Inner();
    Outer.Inner.show();

局部内部类

  • 定义在外部类方法中,作用范围和创建对象仅限于当前方法。
  • 局部内部类访问外部类当前方法中的局部变量中,因无法保障变量的生命周期与自身相同,变量必须修饰为final。
  • 限制类的使用范围。

匿名内部类

  • 没有类名的局部内部类(一切特征都与内部类相同)。
  • 必须继承一个父类或者实线一个接口。
  • 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象。
  • 优点:减少代码量。
  • 缺点:可读性较差。

Object

Object类

  • 超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
  • 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。
  • Object类中所定义的方法,是所有对象都具备的方法。
  • Object类型可以存储任何对象。
    作为参数,可接受任何对象。
    作为返回值,可返回任何对象。

getClass()方法

  • public final Class<?>getClass(){}
  • 返回引用中存储的实际对象类型。
  • 应用:通常用于判断两个引用中实际存储对象类型是否一致。

hashCode()方法。

  • public int hashCode(){}
  • 返回该对象的十六进制的哈希码值。
  • 哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值。
  • 哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码。

toString()方法

  • public String toString(){}
  • 返回该对象的字符串表示(表现形式)。
  • 可以根据程序需求覆盖该方法,如:展示对象各个属性值。

equals方法

  • public boolean equals(Object obj){}
  • 默认实现为(this == obj),比较两个对象地址是否相同。
  • 可进行覆盖,比较两个对象的内容是否相同。

equals()方法覆盖步骤

  • 比较两个引用是否指向同一个对象。
  • 判断obj是否为null。
  • 判断两个引用指向的实际对象类型是否一致。
  • 强制类转换。
  • 依次比较各个属性值是否相同。
  • finalize()方法

  • 当对象被判定为垃圾对象时,又JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
  • 垃圾对象:没有有效引用指向此对象时,为垃圾对象。
  • 垃圾回收:由GC销毁垃圾对象,释放数据存储空间。
  • 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
  • 手动回收机制:使用System.gc()通知JVM执行垃圾回收。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值