18.优先考虑静态成员类

  嵌套类是定义在另一个类的内部的类。嵌套类分为:静态成员类、静态成员类、匿名类、局部类

  静态成员类:它不依赖于外部成员类的实例,可以单独的创建。它只能访问外部类的静态成员变量和方法,包括private

  非静态成员类:它能访问外部类的所有域和方法,所以它不能没有在实例化一个外部类的情况下创建。当非静态类的实例被创建的时候,它和外部类之间的关联关系也随之被建立了起来。每个实例都会包含一个额外的指向外部对象的引用,维护这份引用要消耗时间和空间。所以如果声明的成员类不要求访问外部实例,那么最好将这个类声明为static

    非静态成员类通常用法是被用在一个Adapter,可以参考foreach 迭代实现了iterable接口的例子:https://mp.csdn.net/postedit/80108128

      匿名类通常的用法是创建一个函数对象,例如:    

    Arrays.sort(args, new Comparator(){
        public int compare(Object o1, Object o2){
            return ((String)o1).length() - ((String)o2).length();
        }
    });

     局部类比较少使用,它被定义在方法中,同局部变量一样,方法中的内部类 不能够用public,private,protected,static修饰,可以被final和abstract修饰

      每一种内部类都在使用的局限和价值。如果一个嵌套类需要在单个方法之外仍然可见,或者它太长,不适合放在一个方法内部,那么应该使用成员类。如果成员类的每个实例都需要一个指向其外部实例的引用,则把成员类做成非静态的;否则就做成静态的。假设一个嵌套类属于一个方法的内部,如果你只需要在一个地方创建它的实例,并且已经有了一个预先存在的类型可以说明这个类的特征,则把它做成匿名类;否则就做成局部类

  

猜你喜欢

转载自blog.csdn.net/qq_27469549/article/details/80647152
18.