java静态内部类
2015-07-01 11:25
423 查看
转载:/article/6913665.html
http://book.51cto.com/art/201202/317517.htm
如果一个类要被声明为static,只有一种情况,就是静态内部类。即外部类是不能被static修饰的。
静态内部类和内部类的区别:
1、静态内部类和静态方法一样,只能访问外部类的静态的成员和方法。
2、静态内部类可以定义普通的成员变量和方法。普通内部类不能声明static的变量和方法。
3、静态内部类可以单独初始化
普通内部类的初始化
4、静态内部类不持有外部类的引用,所以只能访问外部类的静态方法和静态的属性(即使这些静态的方法和属性是private,也是可以访问的)。
普通的内部类是持有外部类的引用。所以普通的内部类可以直接访问外部类的属性、方法、即使是private也可以访问。(普通类的实例不能访问类的私有方法和属性)
静态内部类的使用场景是: 当外部类需要是用内部类,而内部类无需外部类的资源,并且内部类可以单独创建的时候,会考虑使用静态内部类。
在《Effective Java》第二章所描述的静态内部类builder阐述了如何使用静态内部类:
静态内部类调用外部类的构造函数,来构造外部类,由于静态内部类可以被单独初始化说有在外部就有以下实现:
总结:
1、如果类的构造器或者静态工厂中有多个参数,设计这样类时,最好使用builder模式,特别是大多数参数都是可选的时候。
2、如果现在不能确定参数的个数,最好一个开始就使用构造器即builder模式。
3、静态内部类提高了封装性,和代码的可读性。
http://book.51cto.com/art/201202/317517.htm
如果一个类要被声明为static,只有一种情况,就是静态内部类。即外部类是不能被static修饰的。
静态内部类和内部类的区别:
1、静态内部类和静态方法一样,只能访问外部类的静态的成员和方法。
2、静态内部类可以定义普通的成员变量和方法。普通内部类不能声明static的变量和方法。
3、静态内部类可以单独初始化
Inner i = new Outer.Inner();
普通内部类的初始化
Outer o = new Outer(); Inner i = o.new Inner();
4、静态内部类不持有外部类的引用,所以只能访问外部类的静态方法和静态的属性(即使这些静态的方法和属性是private,也是可以访问的)。
普通的内部类是持有外部类的引用。所以普通的内部类可以直接访问外部类的属性、方法、即使是private也可以访问。(普通类的实例不能访问类的私有方法和属性)
静态内部类的使用场景是: 当外部类需要是用内部类,而内部类无需外部类的资源,并且内部类可以单独创建的时候,会考虑使用静态内部类。
在《Effective Java》第二章所描述的静态内部类builder阐述了如何使用静态内部类:
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; } }
静态内部类调用外部类的构造函数,来构造外部类,由于静态内部类可以被单独初始化说有在外部就有以下实现:
public Outer getOuter() { Outer outer = new Outer.Builder(2).withName("Yang Liu").build(); return outer; }
总结:
1、如果类的构造器或者静态工厂中有多个参数,设计这样类时,最好使用builder模式,特别是大多数参数都是可选的时候。
2、如果现在不能确定参数的个数,最好一个开始就使用构造器即builder模式。
3、静态内部类提高了封装性,和代码的可读性。
相关文章推荐
- Spring2.5学习4.1_AOP
- java 集合(list、set、map)的特点
- java集合总结(转载)
- Java中的Serializable接口和transient关键字
- Spring IOC的实现
- Java - Why String is Immutable or Final in Java
- Fragment中使用出现的java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
- Java - Why multiple inheritances are not supported in Java
- Spring MVC拦截器+注解方式实现防止表单重复提交
- 《Java课程实习》日志(周二)
- JDBC初探
- 一、Spring源码分析——Spring框架
- java.sql.SQLException: Listener refused the connection with the following error:
- java集合框架知识总结
- LeetCode_71---Simplify Path
- 【Java EE 学习 24 上】【注解详解】
- 用java对文件进行分割与合并
- 《Java课程实习》日志(周一)
- java:数组复制和排序
- java.lang.IllegalStateException解决