内部类 / 异常 / 泛型(06_11-06_13 学习总结)

分享 HLSO6 ⋅ 于 2020-06-15 15:59:17 ⋅ 1639 阅读

学习

内部类

内部类

  • 成员内部类

    • 实例内部类
      字节码文件名: 外部类类名$内部类类名.class
        Outer2.Inner2 inner = new Outer2().new Inner2();

    注意事项:
    实例内部类不语序定义静态内容
    如果外部成员变量,内部成员变量,内部方法中的局部变量同名

        System.out.println(n);
        System.out.println(this.n);
        System.out.println(Outer2.this.n);
    • 静态内部类
      属于类
      Outer.Inner inner = new Outer.Inner();
  • 局部内部类
    字节码文件名: 外部类类名$N内部类类名.class

  • 匿名内部类
    字节码文件名: 外部类类名$N.class

    注意事项:
    匿名内部类只能作为 自雷 或 实现类存在
    匿名内部类中不能定义构造方法
    匿名内部类不能是抽象的

函数式接口

定义:接口中,抽象方法的个数 只能有一个
可以用 @FunctionalInterface进行注解

lambda表达式

作用:用来替换匿名内部类的繁琐语法
注意: 只能实现函数式接口

    // 1)自定义了一个实现类
    Arrays.stream(arr).forEach(new ConsumerImpl());
    // 2) 匿名内部类
    Arrays.stream(arr).forEach(new IntConsumer(){
        @Override
        public void accept(int value) {
            System.out.println(value);
        }
    });
    // 3) Lambda 
    Arrays.stream(arr).forEach(value->System.out.println(value));

异常

意外,程序在运行过程中 产生的一种突发事件,影响了程序的正常执行

异常分类

  • Error 错误
    虚拟机抛出严重的问题

  • Exception 异常

    • 运行时异常
      RuntimeException 和它的子类

    • 非运行时异常(受检异常)
      Exception 和它的部分子类

异常处理方式

  • try-catch

  • 多重catch块
    由子类到父类
    常见的到不常见的

  • try-catch-finally
    finally里面的代码一定会执行
    就算try里面有return 也会执行,但是 System.exit(0)退出JVM,就不会执行

  • throws
    抛出异常,抛出后,调用的程序需要处理异常

  • throw
    自己手动抛出异常
    throw new RuntimeException("年龄必须在18-65之间");
  • 自定义异常
    需要继承 异常 类
    class AgeException extends Exception{}

泛型

泛型类

定义:一个类型后边定义一个具体的类型参数(引用类型)
场合:数据类型不能确定;编译期间进行类型的检查。

    class Student<T>{}
    Student<T> stu = new Student<>();
  • 参数化类型
    一个类型后边, 指定一个具体的类型参数
    Student<T> stu;
  • 原生类型
    一个类型后边 没有指定 具体的类型参数
    Student stu;

通配符

?              无界通配符      匹配所有引用类型
? extend E     上限           匹配E类型及其子类
? super  E     下限           匹配E类型及其父类

类型擦除

  • 类型参数(无界类型参数)
    擦除后为Object

  • 参数化类型
    擦除后,为原生类型

泛型接口

  • 不能确定类型

        class InfoImpl2<T> implements Info<T>{}
  • 可以确定类型

        class InfoImpl2 implements Info<String>{}

比较器

  • Comparable

    需要实现 Comparable 接口

    class MyComparator implements Comparable<Student>{
    @Override
    public int compareTo(Student o) {
    }
  • Comparator

    需要实现 Comparator 接口

    class MyComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
    }

枚举类

定义:底层是一个类class,一组常量值的封装

    enum Color{
        //枚举成员
        //方法
        //构造
    }

特点

  • 底层是class,隐式继承了java.lang.Enum类

  • 一个普通的枚举类 默认是 final

  • 构造 是 private

  • 枚举类的对象都是 public static final的

  • 枚举类的对象必须在枚举类的第一行代码处显示列举出来

  • 每个对象 都已匿名内部子类的形式 实现了 抽象方法,那么这个类就是abstract 的
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-HLSO6,http://hainiubl.com/topics/75124
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter