泛型 异常
- 泛型
- 在类中使用泛型
1 public class TestAM<T> { 2 3 }
泛型只有在调用的时候才能确定泛型的具体类型
常用的有 : K V E T U S
可以这么写
1 T t;
- 在方法中使用泛型
1 public T test(T t){ 2 System.out.println(t.toString()); 3 return t; 4 }
- 规定泛型的继承关系
- new E();是不被允许的
- 在编译的时候还不能确定是什么类型的
- 可能压根就没有他的构造方法
1 public <E extends P> E test1(E e) { 2 3 return e; 4 }
1 package day08; 2 3 public class TestAM<T> { 4 public T test(T t){ 5 System.out.println(t.toString()); 6 return t; 7 } 8 9 public <E extends P> E test1(E e) { 10 return e; 11 } 12 13 public static void main(String[] args) { 14 S s = new S(); 15 P p = new P(); 16 new TestAM().test1(s); 17 new TestAM().test1(p); 18 19 //Object obj = new Object(); 20 //new TestAM().test1(obj); 21 //就不可以,因为明确规定了必须是继承自P 22 23 24 } 25 }
!!!!!!!!!!!!注意!!!!!!!!!!!!!!
这里子类继承自父类
可以抛出更加精确的异常
但是不可以抛出比父类更加笼统的异常
例如这里
父类抛出了IOException
子类可以抛出FileNotFoundException,但不可以抛出Exception
1 public class TestAM1 { 2 public static void main(String[] args) { 3 List list = new ArrayList(); 4 list.add(""); 5 list.add(new Object()); 6 Object obj = list.get(0); 7 String str = (String)list.get(1); 8 9 //对集合中存储的内容进行规范 10 List<String> list1 = new ArrayList<String>(); 11 list1.add(""); 12 //指定泛型后,集合只能存放指定类型的对象 13 String str1 = list1.get(0); 14 15 Map<String , Object> map = new HashMap<String , Object>(); 16 17 } 18 }
- 异常(Exception)
在程序编译或者运行的时候出现的异常情况
异常分为检查异常和运行时异常
- 检查异常
- 在编码过程中必须处理的异常
- Exception的子类(非RuntimeException的子类)全是检查性异常
- 运行时异常
- 编码时可以不处理,运行时可能会抛出的异常
一旦抛出异常(未处理),程序就会中断,程序就会退出
粉红色的是受检查的异常(checked exceptions)
其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.
受检查的异常必须在编译时被捕捉处理,命名为 Checked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到遵守.
绿色的异常是运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除...
而声明为Error的,则属于严重错误,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或者不可能捕捉,将导致应用程序中断,Error不需要捕捉。
常见的一些异常:
除数为零的异常:
1 int a = 12/0;//java.lang.ArithmeticException: / by zero 2 System.out.println(a);
文件未找到的异常:
和程序之外的东西打交道基本都会抛出检查性异常
throws FileNotFoundException
处理异常 异常不一定会发生
尝试运行代码--避免抛出异常终断程序
1 static boolean find(List list , String str) { 2 for(Object o : list) { 3 //尝试运行可能抛出异常的代码块,如果抛出异常 4 //就会执行捕获对应的异常类型的catch 5 6 try { 7 if(o.equals(str)) { 8 return true; 9 } 10 } catch (NullPointerException e) { 11 // TODO: handle exception 12 continue; 13 } 14 } 15 return false; 16 }
可能抛出多个异常
最多执行一个catch
执行到一个程序就会中断
1 static void tE() { 2 //最多执行一个catch 3 //执行到一个程序就会中断 4 FileInputStream fis = null;//初始化 5 try { 6 File f = new File("d:\\maven.rar"); 7 fis = new FileInputStream(f); 8 Class.forName("com.easy.Test"); 9 } catch (FileNotFoundException e) { 10 // 若果发生//如果发生FileNotFoundException执行此代码执行此代码 11 } catch (ClassNotFoundException e) { 12 // 若果发生//如果发生ClassNotFoundException执行此代码执行此代码 13 } catch (Exception e) { 14 //大异常和小异常 15 //Exception必须在FileNotFoundException等之后 16 //否则就会爆红 17 }finally { 18 //任何情况下都会执行的代码块 19 //此代码块用来关闭资源 20 if(fis != null) { 21 try { 22 fis.close(); 23 } catch (IOException e) { 24 // TODO: handle exception 25 e.printStackTrace(); 26 } 27 } 28 }
- 大异常和小异常
- Exception必须在FileNotFoundException等之后
- 否则就会爆红
!!!!!!!!!!!!注意!!!!!!!!!!!!!!
这里子类继承自父类
可以抛出更加精确的异常
但是不可以抛出比父类更加笼统的异常
例如这里
父类抛出了IOException
子类可以抛出FileNotFoundException,但不可以抛出Exception
如果try块中的代码在程序中,确实抛出了异常
FileNotFoundException类型的异常
cache块就会执行这个代码块
这个代码块需要对出现异常的程序运行进行一个补救方案
在程序调试过程中,经常会打印异常的代码
e.printStackTrace();
打印异常的信息
自定义异常
小例子:
向列表中添加元素,检查如果出现了同样的元素,就抛出自定义的异常
1 package day08; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Util { 7 8 public static <T> T getElement(List<T> list,T ele) { 9 int count=0; 10 T result=null; 11 for(T e:list) { 12 if(e.equals(ele)) { 13 count++; 14 result=e; 15 } 16 } 17 if(count>1) { 18 throw new MoreResultException("找到多个结果"); 19 } 20 return result; 21 } 22 23 public static void main(String[] args) { 24 List<String> list=new ArrayList<String>(); 25 list.add("zhangsan"); 26 list.add("lisi"); 27 list.add("wangwu"); 28 list.add("zhangsan"); 29 try { 30 String str= getElement(list, "zhangsan"); 31 System.out.println(str); 32 }catch(Exception e) { 33 e.printStackTrace(); 34 } 35 } 36 }
自定义异常如下;
1 package day08; 2 3 import java.util.ArrayList; 4 import java.util.LinkedList; 5 import java.util.List; 6 7 public class MoreResultException extends RuntimeException{ 8 9 public MoreResultException() {} 10 public MoreResultException(String msg) { 11 super(msg); 12 } 13 List list = new LinkedList(); 14 }