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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的文章
PHP数据文件过大,导致PHP加速器eaccelerator在PHP5.2版本下崩溃
查看>>
RabbitMQ - 死信、TTL原理、延迟队列安装和配置
查看>>
PHP数据访问的多重查询(租房子查询)
查看>>
RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型
查看>>
php数组函数分析--array_column
查看>>
php数组去重复数据的小例子
查看>>
php数组实现:哈希 +双向链表
查看>>
PHP数组排序函数array_multisort()函数详解(二)
查看>>
php数组的几个函数和超全局变量
查看>>
PHP文件锁
查看>>
php文本框输入制定文本,php – 当用户没有向文本框输入任何内容时...
查看>>
PHP时间戳和日期相互转换操作总结
查看>>
php时间戳知识点,php 时间戳函数总结与示例
查看>>
php更新数据库失败,php – 无法更新MySQL数据库
查看>>
php机器人聊天对话框,基于AIML的PHP聊天机器人
查看>>
PHP查找数组中最大值与最小值
查看>>
php查最大值,在PHP数组中查找最大值
查看>>
php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
查看>>
php根据年月日计算年龄
查看>>
RabbitMQ - 单机部署(超详细)
查看>>