1,JDK1.5增加泛型很大程度上都是为了让集合记住其元素的类型。
2,在接口、类、方法后增加尖括号,尖括号里放一个数据类型。
3,JDK1.5改写后List接口、Iterator接口、Map接口
4,类定义了泛型,其构造器依然是类名。
5,创建带泛型声明的父类、接口之后,可以创建实体类或者子类,但要注意这些接口、父类不能再包含形参,要传入具体类型。
- 如:public class Apple实现它的子类一定不能是 AA entends Apple, 应该是AA entends Apple
6,不存在泛型类,因为不管泛型的实际类型参数是什么,它们运行时总是同样的类。如
- List L1 = new ArrayList<>();
List L2 = new ArrayList<>();
System.out.println(L1.getClass() == L2.getClass());//结果是true
- List L1 = new ArrayList<>();
7,静态方法、静态初始化块、静态变量的声明和初始化中不允许使用类型形参。
8,系统不会真的生成泛型类,所以instanceof运算符后不能使用泛型类。
9,虽然String类是Object的之类,但List类并不是List类的子类
10,泛型通配符,如:List< ? > list
11,当直接使用List< ? >这种形式是,即表明这个机会可以是任何泛型的List的父类。
12,泛型类型参数的上限,如:Apple,T只能是Number或者Number的子类,限制了最大的上线是Number
13,通配符的下限:< ? super T>,这个通配符表示的必须是T本身,或T的父类。
14,泛型中的方法重载,允许设置通配符的上线和下限,有时会引起一些问题。
public static < T > void copy(Collection< T > dest, Collection< ? extends T> src){}
public static < T> T cope(Collection< ? super T> dest, Collection< T > src){}
List< Object > L1 = new ArrayList<>();
List< Integer > L2 = new ArrayList<>();
copy(L1, L2);//这时编译就出错了,因为它可以同时匹配这两个方法,所以将引起编译错误。
15,泛型的擦除,把一个具有泛型信息的对象赋给另一个没有泛型信息的变量,之前的泛型的信息就被擦除掉了
16,创建元素类型是类型变量的数组对象也将导致编译错误。由于类型变量运行时并不存在,在编译时无法确定实际类型。
T[] makeArray(Collection< T > coll)
new T[coll.size()];//出错了17,异常类一般分为两种:异常(Exception)和错误(Error)
- Exception就用try&catch&finally来处理,先在try中运行代码,catch处理可能出现异常,finally是一定会执行到里面的代码。
常见的异常有:
NumberFormatException(数字格式异常)
IndexOutOfBoundsException(数组越界异常)
ArithmeticException(除零异常)
RuntimeException(运行时异常)
异常常用的方法:
getMessage():返回异常的详细描述字符串。
printStackTrace():跟踪栈详细输出到标准错误输出
printStackTrace(PrintStream s):跟踪栈详细输出到标准错误输出到指定的输出流
getStackTrace():返回异常的跟踪栈信息。
Error一般是由虚拟机造成的系统崩溃的,基本上不属于我们处理的了。
- Exception就用try&catch&finally来处理,先在try中运行代码,catch处理可能出现异常,finally是一定会执行到里面的代码。
18,throws是在方法声明抛出可能会出现的异常,throw是在代码中自己主动抛出一个异常对象
- 如:test() throws IOException{}
throw new Exception(“这里出错啦!”);
- 如:test() throws IOException{}
19,自定义异常类:一继承Exception基类,二是需要为该类提供两个构造器:1是无参数的构造器,2是带字符串参数的构造器作为异常的描述信息。
public class MyException extends Exception{ //1,无参构造器 public MyException(){} //2,带字符串的参数的构造器 public MyException(String msg){ super(msg); } }