Java静态内部类与内部类

参考
https://www.cnblogs.com/GrimMjx/p/10105626.html

静态内部类

static是不能用来修饰类的,但是成员内部类可以看做外部类中的一个成员,所以可以用static修饰,这种用static修饰的内部类我们称作静态内部类,也称作嵌套内部类.

静态内部类适用于包含类当中,但又不依赖与外在的类,创建静态内部类时,不需要依赖外部类对象的引用也不能使用外在类的非静态属性和方法只是为了不让静态内部类被其他类使用而已

之所以要有静态内部类,是为了不让静态内部类被其他类使用而已。比如有A,B两个类,B有点特殊,虽然可以独立存在,但只被A使用。这时候怎么办?如果把B并入A里,复杂度提高,搞得A违反单一职责。如果B独立,又可能被其他类(比如同一个包下的C)依赖,不符合设计的本意。所以不如将其变成A.B,等于添加个注释,告诉其他类别使用B了,它只跟A玩。

静态内部类另一个用途是实现线程安全的单例模式,相见
静态内部类的优点是:外部类加载时并不需要立即加载内部类,内部类不被加载则不去初始化INSTANCE,故而不占内存。即当SingleTon第一次被加载时,并不需要去加载SingleTonHoler,只有当getInstance()方法第一次被调用时,才会去初始化INSTANCE,第一次调用getInstance()方法会导致虚拟机加载SingleTonHoler类,这种方法不仅能确保线程安全,也能保证单例的唯一性,同时也延迟了单例的实例化

非静态内部类

非静态内部类编译后会默认的保存一个指向外部类的引用,非静态内部类可以自由使用外部类的所有变量和方法,内部类可以对同一个包的其他类隐藏

注意

  • 非静态内部类的成员只是在非静态内部类范围是可知的,并不能被外部类直接使用,如果要访问非静态内部类的成员必须显示创建非静态内部类对象来调用访问
  • 根据静态成员不能访问非静态成员的规则,外部类的静态方法不能访问非静态内部类。
  • 非静态内部类不允许定义静态成员

如果非静态内部类方法访问某个变量,其顺序为:

  • 该方法是否有该名字的成员变量 - 直接用该变量名
  • 内部类中是否有该名字的成员变量 - 使用this.变量名
  • 外部类中是否有该名字的成员变量 - 使用外部类的类名.this.变量名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值