第五章 异常
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
------------恢复内容结束------------