写给java小白学习之路--异常

2-0异常体系结构:

 

 

 

2-1:定义:

程序在运行期间发生的不正常的情况称之为异常。

2-2jvm解决异常的方式:

  1、终止正在运行程序

2、输出当前异常信息

a、异常的类型 (jdk内部维护了当前异常的一个对象 用当前对象来描述当前出现的异常)

b、异常的原因

c、异常可能出现的行数

 

2-3:程序出现异常列子:

1. package com.shsxt.exception;  

2.   

3. import java.util.Scanner;  

4.   

5. /* 

6.  * 用户输入两个数 求两个数的商 

7.  *  java.util.InputMismatchException     

8.  *  

9.  *  

10.  */  

11. public class Test02 {  

12.       

13.     public static void main(String[] args) {  

14.           

15.           

16.         Scanner input = new Scanner(System.in);  

17.         System.out.println("请输入被除数---->");  

18.         int num1 = input.nextInt();  

19.         System.out.println("请输入除数---->");  

20.           

21.         //关闭当前的Scanner  

22.         input.close();  

23.           

24.           

25.         int num2 = input.nextInt();  

26.         System.out.println(num1+"/"+num2+"="+(num1/num2));            

27.     }  

28. }  

 

报错信息:

 

 

2-4:通过业务逻辑解决异常的方式:

1. package com.shsxt.exception;  

2.   

3. import java.util.Scanner;  

4.   

5. /* 

6.  * 手动解决异常问题 

7.  *       

8.  *   通过大量的if判断解决程序在执行过程中可能出现的异常情况。 

9.  *   优势:确实可以将异常信息不交由jvm解决  显示更友好的提示信息 

10.  *   劣势:编写的代码量太大了 而且后期不利于维护 并且程序员永远不知道用户有哪些输入    

11.  *    

12.  *    

13.  *  

14.  *  

15.  */  

16. public class Test03 {  

17.     public static void main(String[] args) {  

18.           

19.         Scanner input = new Scanner(System.in);  

20.         System.out.println("请输入被除数---->");  

21.           

22.         //判定一次用户输入的值是不是我们需要的  

23.         if(input.hasNextInt()){//下一次获取到的值是否是一个int 如果是返回true 如果不是返回fasle  

24.             int num1 = input.nextInt();  

25.             System.out.println("请输入除数---->");  

26.             //判定用户输入  

27.             if(input.hasNextInt()){  

28.                 int num2 = input.nextInt();  

29.                 if(num2!=0){  

30.                     System.out.println(num1+"/"+num2+"="+(num1/num2));  

31.                 }else{  

32.                     System.out.println("除数不能为0");  

33.                 }  

34.             }else{  

35.                 System.out.println("用户输入除数有误");  

36.             }  

37.         }else{  

38.             System.out.println("用户输入逇被除数有误");  

39.         }  

40.      }  

41. }  

 

PS:注意:

1.   通过大量的if判断解决程序在执行过程中可能出现的异常情况。 

2.  *   优势:确实可以将异常信息不交由jvm解决  显示更友好的提示信息 

 *   劣势:编写的代码量太大了 而且后期不利于维护 并且程序员永远不知道用户有哪些输入  

 

2-5:异常处理方式 try-catch-finally

2-4-1try-catch

结构:

*  结构:

 * try{

 * 可能出现异常de代码段

 * }catch(可能出现的异常){

 * 解决办法

 * }

 

顺序:

*  try-catch的执行顺序:

 *   1、执行try块中的代码块  如果出现异常

 *    2、通过出现的异常去匹配 catch中声明的异常类型

 *    3、如果匹配成功 执行catch中的代码块         如果匹配失败  jvm处理当前异常信息 (终止程序 输出异常信息)

 *    4、继续执行剩下的代码

 

例子:

1. public class Test04 {  

2.     public static void main(String[] args) {  

3.         try{  

4.             int num = 1/0;//new ArithmeticException()  

5.             System.out.println(num);  

6.         }catch(InputMismatchException e){ //InputMismatchException e = new ArithmeticException();  

7.             System.out.println("除数不能为0");  

8.         }  

9.           

10.         System.out.println("嘿嘿");  

11.           

12.     }  

13. }  

 

注意事项

PS:只能处理一种异常信息。

 

2-4-2try-多重catch

结构:

*  结构:

 *   try{

 *   可能出现异常的代码

 *   }catch(异常类型1 e1){

 *   解决方案1

 *   }catch(异常类型2 e2){

 *   解决方案2

 *   }catch(异常类型3 e3){

 *   解决方案3

 *   }。。。。{

 *   }

 

顺序

* 执行顺序:

 * 1、执行try块 如果出现异常

 * 2、以此匹配多重catch中声明的异常

 * 3、如果匹配成功 执行当前匹配成功的catchtry-catch块执行完毕 继续执行下面的代码

 * 4、如果匹配失败 交由jvm处理 程序终止 输出异常信息

 * 5、一般情况下我们都会在最后一个catch中加入Exception 获取可能没有捕获的异常信息

 

例子

1. public class Test05 {  

2.     public static void main(String[] args) {  

3.           

4.         Scanner input = new Scanner(System.in);  

5.           

6.         try{  

7.             System.out.println("请输入被除数---->");  

8.             int num1 = input.nextInt();  

9.             System.out.println("请输入除数---->");  

10.             int num2 = input.nextInt();  

11.             System.out.println(num1+"/"+num2+"="+(num1/num2));  

12.               

13.         }catch(InputMismatchException e){//这个异常对象中没有维护异常的原因 所以通过getMessage获取不到异常信息  null  

14.             //e.printStackTrace();   

15.             System.out.println(e.getMessage());  

16.             System.out.println("用户输入有误");  

17.         }catch(ArithmeticException e){//这个异常对象中维护异常的原因 所以通过getMessage可以获取到异常信息  

18.             System.out.println(e.getMessage());//by zero  

19.             System.out.println("除数不能为0");  

20.               

21.               

22.         }catch(Exception e){//Exception e = new 可能出现的异常();   父类变量指向了子类对象   

23.             //多态  

24.             System.out.println(e.getMessage());  

25.             System.out.println("外星人把页面叼走了 请等待。。。");  

26.         }  

27.           

28.     }  

29. }  

 

 

注意事项:

PS:

1、 一般情况下我们都会在最后一个catch中加入Exception 获取可能没有捕获的异常信息

2、 常见的异常的对象中的方法:

* 异常中常见的方法:

      * e.getMessage() -->获取异常的原因藐视

      * e.printStackTrace()  -->打印异常的出现行数以及异常的全限定名* e.toString  --> 异常的全限定名

 

2-4-3:try-多重catch-finally

结构:

* 结构:

 * try{

 *   可能出现异常的代码

 *   }catch(异常类型1 e1){

 *   解决方案1

 *   }catch(异常类型2 e2){

 *   解决方案2

 *   }catch(异常类型3 e3){

 *   解决方案3

 *   }。。。。{

 *   }finally{

 *   代码块

 *   }

 

顺序:

* 执行顺序:

 * 1、执行try块 如果出现异常

 * 2、以此匹配多重catch中声明的异常

 * 3、如果匹配成功 执行当前匹配成功的catch块  执行finally代码块 try-catch-finally块执行完毕 继续执行下面的代码

 * 4、如果匹配失败 交由jvm处理 程序终止 输出异常信息 也会执行finally代码块

 * 5、一般情况下我们都会在最后一个catch中加入Exception 获取可能没有捕获的异常信息

 * 6、一般情况下通过finally去关闭连接资源

 

例子:

1. public class Test06 {  

2.     public static void main(String[] args) {  

3.         Scanner input  = null;  

4.         try{  

5.               

6.             input = new Scanner(System.in);  

7.             System.out.println("请输入被除数---->");  

8.             int num1 = input.nextInt();  

9.             System.out.println("请输入除数---->");  

10.             int num2 = input.nextInt();  

11.             System.exit(0);//关闭虚拟机 0正常退出  强制退出  

12.             System.out.println(num1+"/"+num2+"="+(num1/num2));  

13.               

14.         }catch(InputMismatchException e){  

15.             System.out.println("用户输入有误");  

16.         }catch(ArithmeticException e){  

17.             System.out.println("除数不能为0");  

18.         }catch(Exception e){  

19.             System.out.println("外星人把页面叼走了 请等待。。。");  

20.         }finally{  

21.               

22.             System.out.println("我被执行了");  

23.             //在这里关闭的  

24.             input.close();  

25.         }  

26.           

27.     }  

28. }  

 

注意事项:

PS:

1、 finally一定会被执行 return 以及异常或者是正常情况下都会执行finally代码

2、 System.exit(数字) 退出虚拟机 0 正常 非0 强制

猜你喜欢

转载自blog.csdn.net/u014332333/article/details/79076133