泛型 异常

  • 泛型

 

  • 在类中使用泛型
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     }
  • 规定泛型的继承关系
  1. new E();是不被允许的
  2. 在编译的时候还不能确定是什么类型的
  3. 可能压根就没有他的构造方法
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)

 在程序编译或者运行的时候出现的异常情况

 

异常分为检查异常运行时异常

  • 检查异常
  1. 在编码过程中必须处理的异常
  2. Exception的子类(非RuntimeException的子类)全是检查性异常
  • 运行时异常
  1. 编码时可以不处理,运行时可能会抛出的异常

一旦抛出异常(未处理),程序就会中断,程序就会退出

 

 

粉红色的是受检查的异常(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         }
  • 大异常和小异常
  1. Exception必须在FileNotFoundException等之后
  2. 否则就会爆红

 

!!!!!!!!!!!!注意!!!!!!!!!!!!!!

这里子类继承自父类

可以抛出更加精确的异常

但是不可以抛出比父类更加笼统的异常

例如这里

父类抛出了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 }

 

posted @ 2022-01-19 22:05  Nickeyhu  阅读(107)  评论(0编辑  收藏  举报