学习
内部类
内部类
-
成员内部类
- 实例内部类
字节码文件名: 外部类类名$内部类类名.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 的