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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的文章
POJ2794 Double Patience[离散概率 状压DP]
查看>>
poj2828(线段树查找序列第k小的值)
查看>>
POJ2891:Strange Way to Express Integers——题解
查看>>
poj3045 Cow Acrobats(二分最大化最小值)
查看>>
poj3061 Subsequence(尺取法)
查看>>
poj3074 DLX精确覆盖
查看>>
poj3252(组合数)
查看>>
Qt笔记——QToolBox开发简易QQ聊天界面
查看>>
poj3307
查看>>
Qt笔记——QString与隐式共享、MVC架构
查看>>
Qt笔记——QSemaphore处理生产者/消费者模式
查看>>
Qt笔记——QMutex&QWaitCondition处理生产者消费者模式
查看>>
Qt笔记——QLable+QPixmap图片缩放踩坑
查看>>
Qt笔记——foreach与forever
查看>>
QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
查看>>
Qt知识:视图框架QGraphicsWidget详解
查看>>
SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
查看>>
Qt知识: 画刷风格
查看>>
QT的OpenGL渲染窗QOpenGLWidget Class
查看>>
QT的C++程序加载动态链接库DLL(Linux下是so)的方式
查看>>