内部类

内部类

内部类:一个类定义在另一个类类体中,这样内部类就可以直接使用外部类的相关内容了

成员内部类:把一个类当做外部类的成员存在,和属性方法是同级的

public class Outer {
 public class Inter {
     //直接调用外部类的成员
     //内部类不可以定义静态属性,除非是静态常量(static final)
     //如果和外部类属性同名,访问时遵循就近原则,访问外部类属性时需要使用(外部类.this.属性)
 }
}
//实例化内部类:通过外部类实例化
//Outer.Inter inter = Outer.new Inter();
//成员内部类的实例化方法过于复杂,所以一般会在外部类声明一个私有化的内部类成员,将内部类访问修饰符变为私有的,并提供一个公开的方法调用内部类
public class Outer {
 private Inter inter;
 private class Inter {
    public void Go(){
        System.out.println("我是内部类");
    }
 }
 public void interMethod(){
     inter = new Inter();
     inter.Go();
 }
}

静态内部类:静态的成员内部类

public Outer {
 public static class Inter {
     private static int i = 10;
     private static void Go(){
         System.out.println("我是静态内部类的静态属性i=" + i);
         //静态内部类的静态方法规则和外部类一样
         //静态内部类可以直接当做外部类实例化调用
     }
 }
}

局部内部内:将内部类定义在成员方法体内

public Outer {
    public void Go(){ 
      class Inter {
          //不能有静态属性
            public void go(){
                
            }
      }
        //创建局部内部类对象调用方法
  }
}

匿名内部类(重要):

匿名内部类就是没有名字的局部内部类

public interface Inter {
   void Go();
}

public class Outer {
    public static void main(String[] args){
      //JDK8.0之前
      Inter inter = new Inter(){
          @Override
          public void  Go(){
          System.out.println("我是匿名内部类");      
          }
      }  
      //JDK8.0之后
      //使用lambda表达式
      //(参数)->{语句};
      public static Inter getInter(){
          return ()->{语句1;语句2;...};
          //如果{}中只有一行代码则{}可以省略
      }
      Inter inter = ()->语句;
    }
}

集合框架

顶级单列(单个元素)集合接口Collection

顶级键值对集合接口Map

Collection:

常用的两个子接口Set和List

Set中的元素(无序,不可重复)[Set下有一个子接口SortedSet有序,不可重复]

常用的实现类:

HashSet,TreeSet

List中的元素(有序,可重复)

常用的实现类:

ArrayList,LinkedList

Map:

常用的子接口SortedMap:实现类TreeMap

常用的实现类HashMap

输出集合:

ArrayList<String> arrays = new ArrayLst<>();
arrays.forEach(str -> System.out.println(str));
//方法参数传入lambda表达式
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容