泛型:
好处:1:将运行时候的异常提前到了编译的时候,这样就可以避免运行的时候出现问题。
2:避免了一些无所谓的强制类型转换。
泛型在集合中最基本的使用规则:
ArrayList list=new ArrayList<String>();
泛型中没有多态的概念,不能有大类型和小类型混用。
左右的类型必须是一样 的,可以只写一边,规范格式只写两边。如果没有指定集合中的类型,那么默认类型是Object。
泛型在方法中的使用:
需求:定义一个方法能够接受任意类型的参数Object并且需要让返回值类型跟实参类型保持一致。
自定义一个泛型,就是一个数据类型的占位符,或者可以理解为是一个数据类型的变量。
泛型中,不允许使用基本数据类型的,
自定义泛型如何确定:
在方法上使用自定义类型,这个方法的自定义泛型的具体的数据类型,是在调用这个方法,传入实参的时候,知道具体类型,
自定义泛型的名称只要符合标识符规定即可,但是一般情况下习惯或者推荐使用一个大写字母表示泛型,例如:T(type) E(element)。
在类上自定义泛型,不能够使用静态方法,如果静态方法需要使用泛型,那就要在自己的方法中声明这个类型。
数组类型int[].char[], double[] float[], short[]...
泛型接口自定义格式:interface 接口名<生命自定义泛型>{}
泛型的上限和下限
举例:考驾照 18周岁--60周岁 上限是60 下限18
定义一个方法,这个方法可以接受任意类型 的集合对象,但是这个集合对象中的数据只能是Number或者Number的父类类型的数据。下限就是这个Number。
定义一个方法,这个方法可以接受任意类型的集合对象,但是这个集合对象中的数据只能是Number或者Number的子类类型的数据。上限就是这个Number。
定义泛型的上限:?extends Number 匹配继承自Number所有的类型,也就是存储Number其父类类型
枚举
不同枚举,自己用类实现范围的界定
语法格式:enum枚举的类名{先定义对应枚举,再写方法}
1枚举类型是一个特殊的类,final class 枚举类名 extends java.lang.Enum
2枚举类中的枚举值(man,woman)默认修饰符 public static final.
3枚举类中的枚举值它的类型是本类类型,Sex类型的对象。
4枚举的构造方法是private修饰的,编译器会在枚举枚举类内部构造无参的枚举值。
5枚举是可以有成员变量的,但是只能通过枚举值去访问枚举类型的实例成员变量。
6枚举类构造的枚举值对象默认是无参构造的,但是可以通过有参数的构造方法来构造,这个有参构造必须是private修饰的。
7枚举也可以有抽象方法,但注意的是枚举值必须要实现抽象方法。
8枚举值必须是枚举类中的第一个语句。