EffectiveJava(22)JAVA四种嵌套类的特点及用法
2017-03-05 01:34
274 查看
嵌套类:
1.静态成员类
静态成员类是外围类的一个静态成员,遵守同样的可访问性规则
用法:a.作为公有的辅助类
内部类:
2.非静态成员类
语法上只和静态成员类的唯一区别是少一个static修饰符
a.它的每个实例都隐含着与外围类的一个实例相关联
b.在其实例方法内部可以调用外围实例上的方法,或者利用this构造获得外围实例的引用
用法:a.定义一个Adapter
–如果嵌套类嵌套类的实力可以在它外围类的实例之外独立存在,这个嵌套类必须是静态成员类
–如果声明成员类不要求访问外围实例,就始终要把static放在他的声明中.
3.匿名类
当且仅当匿名类粗现在非静态环境中时,它才有外围实例
缺点:不能执行instanceof测试和任何命名类的其他事情
无法实现多个接口或扩展一个类;除了从他的超类型中继承得到之外,其客户端无法调用任何成员;由于匿名类出现在表达式中,他必须保持简短来保证程序的可读性(<10)
用法:a.动态创建函数对象Arrays.sort();
总结:如果一个嵌套类需要在单个方法之外仍然可见,或者他太长了不适合放在方法内部,就使用成员类.如果成员类的每个实例都需要一个指向其外围实例的引用,就用静态成员类;否则,就做成静态的.如果这个嵌套类属于一个方法的内部,你只需要在一个地方创建实例,并且已经有了一个预置的类型可以说明这个类的特征,就要把它做成匿名类;否则,就做成局部类
1.静态成员类
静态成员类是外围类的一个静态成员,遵守同样的可访问性规则
用法:a.作为公有的辅助类
内部类:
2.非静态成员类
语法上只和静态成员类的唯一区别是少一个static修饰符
a.它的每个实例都隐含着与外围类的一个实例相关联
b.在其实例方法内部可以调用外围实例上的方法,或者利用this构造获得外围实例的引用
用法:a.定义一个Adapter
public class MySet<E> extends AbstractSet<E>{ public Iterator<E> iterator(){ return new MyIterator(); } private class MyIterator implements Itertor<E>{ ... } }
–如果嵌套类嵌套类的实力可以在它外围类的实例之外独立存在,这个嵌套类必须是静态成员类
–如果声明成员类不要求访问外围实例,就始终要把static放在他的声明中.
3.匿名类
当且仅当匿名类粗现在非静态环境中时,它才有外围实例
缺点:不能执行instanceof测试和任何命名类的其他事情
无法实现多个接口或扩展一个类;除了从他的超类型中继承得到之外,其客户端无法调用任何成员;由于匿名类出现在表达式中,他必须保持简短来保证程序的可读性(<10)
用法:a.动态创建函数对象Arrays.sort();
Arrays.sort(StringArray,new Comparator<String>(){ // public int compare(String s1,String s2){ // return s1.length()-s2.length(); // } // })
b.创建过程对象(Runnable,Thread,TimerTask实例) c.声明在静态工厂方法的内部 4.局部类:拥有其他嵌套类的特点 在任何可以声明局部变量的地方都可以声明局部类,并遵守同样的作用域规则
总结:如果一个嵌套类需要在单个方法之外仍然可见,或者他太长了不适合放在方法内部,就使用成员类.如果成员类的每个实例都需要一个指向其外围实例的引用,就用静态成员类;否则,就做成静态的.如果这个嵌套类属于一个方法的内部,你只需要在一个地方创建实例,并且已经有了一个预置的类型可以说明这个类的特征,就要把它做成匿名类;否则,就做成局部类
相关文章推荐
- JAVA实现单例模式的四种方法和一些特点
- JAVA实现单例模式的四种方法和一些特点
- Java 中 synchronized的用法详解(四种用法)
- JAVA Map、Set、List、Queue、Stack的特点与用法
- Java 中 synchronized的用法详解(四种用法)
- Java 中的四种嵌套类:嵌套静态类、成员类、本地类和匿名类
- Java Pattern 四种常用用法
- Java 内部类特点及用法
- 【JavaWeb-22】slf4j和log4j的转化、一对一关系的配置、二级缓存的四种类别、阶段案例注意事项
- Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)
- Java基础知识强化之集合框架笔记22:List集合的三个子类的特点(面试题)
- Java 四种线程池的用法分析
- Java 四种线程池的用法分析
- 四种Java线程池用法解析
- Java 四种线程池的用法分析
- 黑马程序员_5JAVA基础 继承 final的用法以及抽象类的特点
- JAVA知识回顾-2(四种引用、HashCode、List实现类的区别、字符的处理、各集合特点)
- Java 四种线程池的用法分析
- Java四种权限修饰符(public, default, protected, private)的用法和对比
- Java 四种线程池的用法分析