博客
关于我
记final与静态内部类的疑惑
阅读量:324 次
发布时间:2019-03-04

本文共 618 字,大约阅读时间需要 2 分钟。

为什么要把内部类声明为静态的?

在Java中,内部类默认是非静态的,意味着它会受到外部类实例化的影响。每当外部类创建一个实例时,内部类也会创建一个实例。如果内部类不是静态的,那么外部类的每个实例都有自己的内部类实例,这样在访问内部类的成员时,可能会有多个单例对象被创建,导致单例模式失效。

为了避免这种情况,内部类必须声明为静态。静态的内部类不会随着外部类实例的创建而创建实例,它们可以独立存在。这确保了内外类之间的依赖关系被消除,从而避免内存泄漏和单例模式不稳定的问题。

为什么静态类里获取单例对象要用final修饰?

在静态类中获取单例对象时,final修饰是为了确保单例对象在定义后不能被修改。这意味着一旦single变量被赋值,就不能被其他地方修改,保证了单例对象的唯一性和稳定性。如果不用final,可能会有多个线程在同一个时间修改single变量,导致并发问题,破坏单例模式的正确性。

为什么内部类也得声明为静态的?

当使用内部类.内部类的变量方式获取单例时,内部类必须声明为静态。否则,非静态内部类的成员不能定义为静态,会导致作用域混乱。非静态内部类依赖于外部类的实例化,如果成员变量或方法定义为静态,那么它们的作用域就变成了类级别的,不依赖于实例化,这会造成作用域冲突。

总结来说,内部类必须声明为静态以确保单例模式的正确性,final修饰用于保护单例变量不被修改。通过这些措施,Java确保了单例模式的高效性和安全性。

转载地址:http://bifh.baihongyu.com/

你可能感兴趣的文章
POCO库中文编程参考指南(4)Poco::Net::IPAddress
查看>>
Quartz基本使用(二)
查看>>
POC项目安装与使用指南
查看>>
Podman核心技术详解
查看>>
pods 终端安装 第三方框架的一些命令
查看>>
Podzielno
查看>>
PoE、PoE+、PoE++ 三款交换机如何选择?一文带你了解
查看>>
PoE三种标准:标准 PoE、PoE+、PoE++,网络工程师必知!
查看>>
POI 的使用
查看>>
poi 读取单元格为null者空字符串
查看>>
poi-tl简介与文本/表格和图片渲染
查看>>
pointnet分割自己的点云数据_PointNet解析
查看>>
POI实现Excel导入Cannot get a text value from a numeric cell
查看>>
POI实现Excel导入时提示NoSuchMethodError: org.apache.poi.util.POILogger.log
查看>>
POI实现Excel导出时常用方法说明
查看>>
POI导出Excel2003
查看>>
POI数据获取及坐标纠偏
查看>>
Quartz入门看这一篇文章就够了
查看>>
POI解析Excel【poi的坑——空行处理】
查看>>
POI:POI+JXL实现xls文件添加水印
查看>>