关于Java的静态内部类
来源:互联网 发布:淘宝2017双十一成交额 编辑:程序博客网 时间:2024/05/22 04:44
前言
看Spring源码和Map的源码时,发现有使用静态内部类。所以想知道静态内部类的特点是什么?在什么情况下使用静态内部类?
正文
在网上找了一上资料,把这次资料中重要的部分总结一下。
问题1:静态内部类的特点是什么?和普通内部类的区别是什么?
(1)静态内部类不持有外部类的引用
在普通内部类中,我们可以直接访问外部类的属性、方法,即使是private类型也可以访问,这是因为内部类持有一个外部类的引用,可以自由访问。而静态内部类,则只可以访问外部类的静态方法和静态属性(如果是private权限也能访问,这是由其代码位置所决定的),其他则不能访问。
(2)静态内部类不依赖外部类
普通内部类与外部类之间是相互依赖的关系,内部类实例不能脱离外部类实例,也就是说它们会同生同死,一起声明,一起被垃圾回收器回收。而静态内部类是可以独立存在的,即使外部类消亡了,静态内部类还是可以存在的。
(3)普通内部类不能声明static的方法和变量
普通内部类不能声明static的方法和变量,注意这里说的是变量,常量(也就是final static修饰的属性)还是可以的,而静态内部类形似外部类,没有任何限制。
问题2:什么情况使用静态内部类
由于静态内部类不能使用外部类的非静态成员
,所以静态内部类的主要工作是:
- 保存(或说成封装)一些和外部类有关的信息
- 封装一些和外部类相关的处理
举例:
1, 保存(或说成封装)一些和外部类有关的信息
public class Person{ //姓名 private String name; //家庭 private Home home; //构造函数设置属性值 public Person(String _name){ name = _name; } /* home、name的getter/setter方法省略 */ public static class Home{ //家庭地址 private String address; //家庭电话 private String tel; public Home(String _address,String _tel){ address = _address; tel = _tel; } /* address、tel的getter/setter方法省略 */ } }
2, 封装一些和外部类相关的处理
public class Outer { private String name; private int age; public static class Builder { private String name; private int age; public Builder(int age) { this.age = age; } public Builder withName(String name) { this.name = name; return this; } public Builder withAge(int age) { this.age = age; return this; } public Outer build() { return new Outer(this); } } private Outer(Builder b) { this.age = b.age; this.name = b.name; }}
问题3:静态内部类的好处是什么?
自己想了一想,又看了一些资料,感觉好处就是“提高了可读性”。因为这些静态内部类
定义在了其它类的内部,给人的感觉是这个静态内部类
的作用一定是和外部类相关的。当然也可以把静态内部类定义
在外面,在外部类中引用它,但这样这个静态内部类
可用范围就扩大了,潜意识中给人的感觉是“可不可以在其它地方使用它呢”?
问题4:什么时候什么普通内部类,什么时候使用静态内部类呢?
静态内部类和普通内部类的最大的区别就是:
- 对外部类属性的使用
- 实例化的方式
例如:你的内部类如果需要访问外部类的属性,那就要使用普通内部类
。如果你想主动地限制内部类对外部类属性的访问,那就要使用静态内部类
。具体的使用方式还不限定于这些,还是根据你的需求,看哪种类型的类更适合你。
参考文章:(下面这3篇文章都写的非常好,建议读一下)
Java静态类:举例1来自于这篇文章
建议38: 使用静态内部类提高封装性:举例2来自于这篇文章
java提高篇(八)—-详解内部类:例举了都有什么样的内部类可以使用
- 关于Java的静态内部类
- java的静态内部类
- java的静态内部类
- 关于java内部类访问类的静态成员变量
- 关于静态内部类
- 关于静态内部类
- 关于静态内部类的一些看法
- 关于java内部类(静态内部类和普通内部类)
- 关于java内部类(静态内部类和普通内部类)
- Java静态内部类和非内部类的区别
- java静态内部类和匿名内部类的使用
- Java静态内部类,普通内部类的理解
- java 内部类和静态内部类的区别
- java内部类,内部类的共性,成员内部类,方法内部类匿名内部类,静态嵌套类,不解
- 关于静态内部类和内部类
- java 静态内部类
- JAVA 静态内部类
- java静态内部类
- 1
- 第十五周8
- 嵌套网站demo
- 正交矩阵及其应用-思维导图
- CSS学习之diplay:flex
- 关于Java的静态内部类
- ssh配置别名
- RecycleView实现的Gallery画廊效果(图片制作成圆角)
- C语言程序
- 在iOS 8中使用UIAlertController
- 欢迎使用CSDN-markdown编辑器
- To be a better man
- Java魔法堂:注解用法详解——@SuppressWarnings
- ESXI集群下大量虚拟机系统运行监控-netstat-an连接汇总分类