innerclass
/*
!!!成员内部类是什么?如何创建对象?
1.就是类中的一个普通成员,类似普通成员变量、成员方法。
2.外部类名.内部类名 对象名 = new 外部类(...).new 内部类(...);
!!!成员内部类的实例方法中,访问其他成员有啥特点?
1.可以直接访问外部类的实例成员、静态成员。
2.可以拿到当前外部类对象,格式是:外部类名.this。
!!!什么是静态内部类?如何创建对象?有啥特点?
1.有static修饰的内部类。
2.外部类名.内部类名 对象名 = new 外部类.内部类(...);
3.可以访问外部类的静态成员,不能直接访问外部类的实例成员。
!!!匿名内部类的书写格式是什么样的/
new 类或接口(参数值){ new Animal(){
类体(一般是方法重写); @Override
}; public void cry(){
}
};
!!!匿名内部类有啥特点?
1.匿名内部类本质就是一个子类,并会立即创建出一个子类对象。
!!!匿名内部类有啥作用、应用场景?
1.可以更方便的创建出一个子类对象。
2.匿名内部类通常作为一个参数传输给方法。
3.匿名内部类通常不会主动的使用而是被动的使用,可以简化代码,提高开发效率。
*/
enum
/*
枚举的特点:
public enum A{
X,Y,Z;
}
Compiled from "A.java"
public final class A extends java.lang.Enum<A>{
public static final A X = new A();
public static final A Y = new A();
public static final A Z = new A();
public static A[] values(); //可以拿到全部对象并放入枚举数组中
public static A valueOf(java.lang.String); //可以拿到对应名称的对象
}
1.枚举类的第一列只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。
2.枚举类的构造器都是私有的,因此,枚举类对外不能创建对象。
3.枚举类都是最终类,不可以被继承。
4.枚举类中,从第二行开始,可以定义类的其他各种成员。
5.编译器为枚举类新增了几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法。
!!!抽象枚举是什么?
抽象枚举是指枚举中有抽象方法,所以枚举列举的所有名称都必须重写抽象方法,此时枚举类的名称前可以不用abstract修饰。
!!!枚举的常见应用场景:
1.用来表示一组信息,然后作为参数进行传输。
2.选择定义一个一个的常量来表示一组信息,并作为参数传输。
1.参数值不受约束。
3.选择定义枚举表示一组信息,并作为参数传输。
1.代码可读性好,参数值得到了约束,对使用者更友好,建议使用!
*/
generalized type
/*
泛型:
1.定义类、接口、方法时,同时声明了一个或者多个类型变量(如:<E>),称为泛型类、泛型接口、泛型方法、
它们统称为泛型。
2.作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,
及其可能出现的异常。
3.泛型的本质:把具体的数据类型作为参数传递给类型变量。
泛型类:
1.修饰符 class 类名<类型变量,类型变量,...>{ public class ArrayList<E>{
} ...
}
2.注意:类型变量建议用大写的英文字母,常用的有:E,T,K,V等。
3.使用extends修饰符可以限制类型变量接收的数据类型:
public class ArrayList<E extends F>{
...
}
泛型接口:
1.修饰符 interface 类名<类型变量,类型变量,...>{ public interface ArrayList<E>{
} ...
}
2.注意:类型变量建议用大写的英文字母,常用的有:E,V,K,T等。
3.使用extends修饰符可以限制类型变量接收的数据类型:
public interface ArrayList<E extends F>{
...
}
泛型方法:
1.修饰符 <类型变量,类型变量,...> 返回值类型 方法名 (形参列表){
}
public static <T> void test(T t){
...
}
2.通配符
1.就是"?",可以在"使用泛型"的时候代表一切类型; E T K V是在定义泛型的时候使用。
3.泛型的上下限:
1.泛型上限: ?extends Car:?能接受的必须是Car或者其子类。
2.泛型下限: ?Super Car:?能接受的必须是Car或者其父类。
!!!泛型的擦除问题和注意事项:
1.泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。
2.泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。
*/