第五章 异常

1.什么是异常

异常就是在程序的运行中所发生的不正常的事件,异常会中断正在运行的程序

------------恢复内容开始------------

1.什么是异常

 答: 异常就是在程序的运行中所发生的不正常的事件,异常会中断正在运行的程序

 

/**
 * 测试类  
*
处理异常的方式1: if.逻辑判断
*/
import java.util.Scanner;
public class Texst1 {
    public static void main(String[] args) {
     Scanner input=new Scanner(System.in);
     System.out.print("请输入别除整数:");
     int num1=0;
     if (input.hasNextInt()){   //如果输入的被除数是整数
         num1=input.nextInt();
     }else {
         System.err.println("输入的被除整数不是整数,程序退出!");  err为警告的意思,运行时字会变成红色
         System.exit(1);  //结束程序执行
     }

     System.out.print("请输入除数:");
     int num2= 0;
     if (input.hasNextInt()){ //如果输入的除数是整数
         num2=input.nextInt();
     }else {
         System.err.println("输入的除数不是整数,程序退出!");
         System.exit(1);//程序退出!
     }

     System.out.println(String.format("%d/%d=%d",num1,num2,num1/num2));//占位符
     System.out.println("感谢使用本程序!");
    }
}

 

1.1 :通过if-else 语句进行异常处理的机制主要有以下缺点.

     1.代码臃肿 : 加入了大量的异常情况判断和处理代码

     2.程序员把相当多的精力放在了处理异常代码上了,放在了“堵漏洞”上,影响开发效率

     3.很难穷举所有的异常情况,程序仍旧不健壮

     4.影响代码的可读性加大日后程序的维护难度

2.生么是异常处理机制

      答: 异常处理机制就像我们对平时可能会遇到的意外情况,预先想好了一些处理的办法。 也就是说,在程序执行代码的时候,万- 发生了异常, 程序会按照预定的处理办法对异常进行处理,异常处理

          完毕之后,程序继续运行。
         java的异常处理是通过五个关键字来实现的:try ,catch ,finally ,throw 和throws 

 

 

  

 1 /**
 2  *第一种正常情况
 3  */
 4 import java.util.Scanner;
 5 public class TexstExceptionTt {
 6     public static void main(String[] args) {
 7         try{
 8             Scanner input=new Scanner(System.in);
 9             System.out.print("请输入别除整数:");
10             int num1=input.nextInt();
11             System.out.print("请输入除数:");
12             int num2=input.nextInt();
13             int js=num1/num2;
14             System.out.println(js);
15         }catch (Exception e){System.out.println(e.getMessage());}//获得异常的信息
16         finally {
17             System.out.println("程序结束!");
18         }
19 
20     }
21 }

 

            

     

 

 1 /**
 2  *第3种正常情况
 3  */
 4 import java.util.Scanner;
 5 public class TexstExceptionTt {
 6     public static void main(String[] args) {
 7         try{
 8             Scanner input=new Scanner(System.in);
 9             System.out.print("请输入别除整数:");
10             int num1=input.nextInt();
11             System.out.print("请输入除数:");
12             int num2=input.nextInt();
13             int js=num1/num2;
14             System.out.println(js);
15         }catch (ArithmeticException ae){//具体的异常类型
16             System.out.println(ae.getMessage());
17             ae.printStackTrace();//获得异常的内存堆栈信息及错误的位置
18         }
19         catch (Exception e){
20             System.out.println(e.getMessage());  //获得异常的的信息
21               e.printStackTrace();  //获得异常的内存堆栈信息及错误的位置
22         }
23     }
24 }

3.什么情况下不走finally类

  答:有System.exit(1)的时候

 1 import java.util.Scanner;
 2 public class TexstExcep {
 3     public static void main(String[] args) {
 4         Scanner input=new Scanner(System.in);  
 5         try{
 6             System.out.print("请输入别除整数:");
 7             int num1=input.nextInt();
 8             System.out.print("请输入除数:");
 9             int num2=input.nextInt();
10             int js=num1/num2;
11             System.out.println(js);
12         }catch(Exception e){
13             System.err.println("输出异常");
14             System.exit(1);//退出Java的虚拟机,不会执行finally里的语句
15             System.out.println(e.getMessage());
16         }
17         finally{
18             System.out.println("输出finally的语句");
19         }
20     }
21 }

  

4.多重catch执行的顺序

5.总结

 

6.声明异常 throws

  6.1.如果在一个方法体中抛出了异常,如何通知调用者? 如果在一个方法体中抛出了异常,如何通知调用者?

       答:throws声阴某个方法可能抛出的各种异常

 6.2.如果在一个方法体中抛出了异常,如何通知调用者?

   

 1 /**
 2  *第一种throws方式
*throws声明异常,抛给调用者处理,调用者必须进行try.catch
3 * 位置:方法名后面进行声明异常,多个异常使用速号隔开 4 */ 5 import java.util.InputMismatchException; 6 import java.util.Scanner; 7 public class TexstExcep { 8 public static void show() throws InputMismatchException,ArithmeticException,Exception { 9 Scanner input=new Scanner(System.in); 10 System.out.print("请输入别除整数:"); 11 int num1=input.nextInt(); 12 System.out.print("请输入除数:"); 13 int num2=input.nextInt(); 14 int js=num1/num2; 15 System.out.println(js); 16 } 17 public static void main(String[] args) { 18 //调用出必须处理 19 try { 20 show(); 21 }catch (InputMismatchException se){ 22 System.err.println("你输入的不匹配!"); 23 System.exit(1); 24 }catch (ArithmeticException ex){ 25 System.err.println("除数不能为0"); 26 System.exit(1); 27 } 28 catch (Exception e) { 29 e.printStackTrace(); 30 } 31 } 32 }

  6.3.如果在一个方法体中抛出了异常,如何通知调用者?

 

 1 import java.util.InputMismatchException;
 2 import java.util.Scanner;
 3 public class TexstExcep {
 4     public static void show() throws InputMismatchException,ArithmeticException,Exception {
 5         Scanner input=new Scanner(System.in);
 6         System.out.print("请输入别除整数:");
 7         int num1=input.nextInt();
 8         System.out.print("请输入除数:");
 9         int num2=input.nextInt();
10         int js=num1/num2;
11         System.out.println(js);
12     }
13     public static void main(String[] args) throws InputMismatchException,ArithmeticException,Exception{
14         //调用出不处理,抛给了Java的虚拟机继续处理,第二种
15 
16             show();
17     }
18 }

 

 6.3.手动抛出异常 throw

 

 1 public class Person {
 2     private String Name;//姓名
 3     private int age;//年龄
 4 
 5     public String getName() {
 6         return Name;
 7     }
 8 
 9     public void setName(String name) throws Exception {//把异常抛给调用者
10 
11          if (name.equals("男")||name.equals("女")){
12              Name = name;
13          }else{
14              try {
15                  throw new Exception("你输入的必须是男或女!");
16              }catch (Exception e){
17                  System.out.println(e.getMessage());
18              }
19          }
20     }
21 
22     public int getAge() {
23         return age;
24     }
25 
26     public void setAge(int age) {
27         if (age>0&&age<100){
28             this.age = age;
29         }else{
30             try {
31                 throw new Exception("输入的年龄必须在0~100之间");
32             }catch (Exception e){
33                 System.out.println(e.getMessage());
34             }
35         }
36     }
37 }
 1 /**
 2  * 调用
 3  */
 4 public class Texst3 {
 5     public static void main(String[] args) {
 6      Person person=new Person();
 7      person.setAge(-90);
 8 
 9      try {
10          person.setName("你好");
11      }catch (Exception e){
12          System.out.println(e.getMessage());
13      }
14 
15     }
16 }

 

 

7.日志及分类

                           

 

    7.1.使用log4j记录日志的步骤

                                        

     使用日志文件的步骤:      https://blog.csdn.net/u013870094/article/details/79518028?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------

posted @ 2021-01-27 21:27  小白大号  阅读(58)  评论(0编辑  收藏  举报