嵌套类:

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.局部类:拥有其他嵌套类的特点
在任何可以声明局部变量的地方都可以声明局部类,并遵守同样的作用域规则

总结:如果一个嵌套类需要在单个方法之外仍然可见,或者他太长了不适合放在方法内部,就使用成员类.如果成员类的每个实例都需要一个指向其外围实例的引用,就用静态成员类;否则,就做成静态的.如果这个嵌套类属于一个方法的内部,你只需要在一个地方创建实例,并且已经有了一个预置的类型可以说明这个类的特征,就要把它做成匿名类;否则,就做成局部类

EffectiveJava(22)JAVA四种嵌套类的特点及用法的更多相关文章

  1. Java四种线程池

    Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:20 ...

  2. java四种引用及在LeakCanery中应用

    java 四种引用 Java4种引用的级别由高到低依次为: StrongReference > SoftReference > WeakReference > PhantomRefe ...

  3. Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...

  4. Java四种引用包括强引用,软引用,弱引用,虚引用。

    Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.e ...

  5. Pascal、VB、C#、Java四种语法对照表

    因为工作原因,自学会了vb后陆续接触了其它语言,在工作中经常需要与各家使用不同语言公司的开发人员做程序对接,初期特别需要一个各种语法的对照比,翻看了网络上已有高人做了整理,自己在他基础上也整理了一下, ...

  6. Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)

    Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...

  7. 不可访问内存 Java四种引用包括强引用,软引用,弱引用,虚引用

    小结: 1.不可访问内存是指一组没有任何可访问指针指向的由计算机程序进行动态分配的内存块. 2.垃圾收集器能决定是否一个对象还是可访问的:任何被确定不可访问的对象将会被释放. https://zh.w ...

  8. python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)

    介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...

  9. java四种引用与回调函数

    JAVA四种引用 java对象的引用包括: 强引用 软引用 弱引用 虚引用 Java中提供这四种引用类型主要有两个目的: 第一是可以让程序员通过代码的方式决定某些对象的生命周期: 第二是有利于JVM进 ...

随机推荐

  1. CUDA核函数调用基础数学API的一个奇葩情况

    今天测试在核函数在GTX 950M上运行的情况,核函数中的pow竟然出不来结果...在网上查了一圈,说是要改成powf,结果确实就好了. 但是,奇怪的是,CUDA版本都是最新的8.0,之前在GT 72 ...

  2. 2.kafka单节点broker的安装与启动

    下载kafka,http://kafka.apache.org/downloads kafka下面的文件结构如下: 进入bin目录,启动kafka之前要先启动zookeeper ./zookeeper ...

  3. FluentValidation具体使用案例

    可以使用NuGet 添加类库   下面是程序: using FluentValidation; using System; using System.Linq; namespace TestFluen ...

  4. Codeforces 1023 B.Pair of Toys (Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Fi)

    B. Pair of Toys 智障题目(嘤嘤嘤~) 代码: 1 //B 2 #include<iostream> 3 #include<cstdio> 4 #include& ...

  5. 求第N个回文数 模板

    备忘. /*看到n可以取到2*10^9.说明普通方法一个个暴力计算肯定会超时的,那打表呢?打表我们要先写个打表的代码,这里不提供.打完表观察数据,我们会发现数据其实是有规律的.完全不需要暴力的把所有数 ...

  6. Python爬链接

    # -*- coding: utf-8 -*- """ Created on Wed Jan 11 17:21:54 2017 @author: PE-Monitor & ...

  7. poj1062 最短路径 dijkstra

    题目连接:http://poj.org/problem?id=1062 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用 1000 ...

  8. HDU 2553 N皇后问题【棋盘型DFS】

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. 状压DP【p2622】 关灯问题II

    题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆 ...

  10. HDU 1251 统计难题 (字典树)(查询是否为前缀)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...