什么是异常:
写/执行程序中,遇到异常,需要异常抛出来说明代码出现了问题,抛给使用者,处理异常。
异常是Java应用程序抛出和处理的非常严重,它可以分为Checked异常和运行时异常
Checked异常必须捕获或者声明抛出,否则无法编译成功,运行时异常不要求捕获或者声明抛出
Java中的异常处理通过五个关键字来实现;
try catch finally throw throws
1.异常处理机制::::::是专门 应对 异常出现后,如何解决该异常的一种手段。
throw:扔 抛出异常 throw new Exception("Msg");
throws: 声明异常
2.try catch中有return的情况
catch中有return,但是return以分号结束 ,finally先执行 回到return
3.在真实开发中,如果我们定制了工具类,工具类中有特别复杂的方法,需要各种断定,这个时候,工具类的方法一定
有一个机制,就是异常上抛的机制。作用:为了工具的使用方,可以感知到这个异常。
4.try { 可能出现异常的代码}
catch(){}
finally{
}
throws
throw new Exception();
package cn.javaoppday01; import java.util.Scanner; import org.apache.log4j.Logger; public class Test { private static Logger logger=Logger.getLogger(Test.class.getName()); public static void main(String[] args) { // TODO Auto-generated method stub //处理方式1:---if 逻辑 Scanner input =new Scanner(System.in); System.out.println("请输入第一个数"); if(input.hasNextInt()==true){ int num1 =input.nextInt(); System.out.println("请输入二个数"); int num2 =input.nextInt(); if (num2==0){ System.out.println("除数不能为零,程序退出"); logger.error("除数不能为零,程序退出"); System.exit(1); }else{ int jg =num1/num2; System.out.println(jg); } }else{ System.out.println("你输入的不是整数,程序退出"); System.exit(1); } } }
运行的结果:
请输入第一个数 12 请输入二个数 0 除数不能为零,程序退出 log4j:WARN No appenders could be found for logger (cn.javaoppday01.Test). log4j:WARN Please initialize the log4j system properly.
package cn.javaoppday01; import java.util.Scanner; public class Text11 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("请输入被除数"); int num1 =input.nextInt(); System.out.println("请输入除数"); int num2=0; if (input.hasNextInt()){ num2 =input.nextInt(); if (0==num2){ System.err.println("输入的除数为0,程序退出"); System.exit(1); }else{ System.out.println(String.format("%d/%d=%d",num1,num2,num1/num2)); } }else{ System.out.println("输入的除数不是整数 ,退出程序"); System.exit(1); } input.close(); } }
请输入被除数 12 请输入除数 0 输入的除数为0,程序退出
2.使用异常机制
异常处理机制,是专门应对异常出现后,如何解决该异常的一种手段
异常是指程序在运行过程中所发生的不正常的时间,它会中断正在运行的程序
Java编程语言使用异常处理机制为程序提供了错误处理机制
异常处理关键字
捕获异常:
try(试一试):执行可能产生异常的代码
catch(抓住,捕获):捕获异常
finally(最终):无论是否发生异常,代码总能执行
注:在真实开发中,如果我们定制了工具类,工具类中有特别复杂的方法,需要各种断定,这个时候,工具类的方法一定有一个机制,就是异常上抛的机制,作用:为了工具的使用房,可以感知到这个异常
throws 和throw的区别
package cn.javaoppday01; import java.util.InputMismatchException; import java.util.Scanner; //throws声明异常,能给调用者处理,调用者必须进行try。。catch //位置:方法后面进行声明异常,多个异常使用逗号隔开 public class Text8Throws1 { public static void divid() throws InputMismatchException,ArithmeticException,Exception { Scanner input =new Scanner(System.in); System.out.println("请输入第一个数"); int num1 =input.nextInt(); System.out.println("请输入二个数"); int num2 =input.nextInt(); int jg =num1/num2; System.out.println(jg); } public static void main(String[] args) { //调用者必须处理 try { divid(); } catch (InputMismatchException e) { System.err.println("输入不匹配"); e.printStackTrace(); } catch (ArithmeticException e) { System.err.println("除数不能为0"); e.printStackTrace(); } catch (Exception e) { System.err.println(e.getMessage()); e.printStackTrace(); } } }
package cn.javaoppday01; import java.util.InputMismatchException; import java.util.Scanner; public class Text9Thows2 { public static void main(String[] args)throws InputMismatchException,ArithmeticException,Exception { divid(); } public static void divid() throws InputMismatchException,ArithmeticException,Exception { Scanner input =new Scanner(System.in); System.out.println("请输入第一个数"); int num1 =input.nextInt(); System.out.println("请输入二个数"); int num2 =input.nextInt(); int jg =num1/num2; System.out.println(jg); } }
声明异常:
throws(抛出):声明方法可能要抛出的各种异常
抛出异常:
throw(抛出):手动抛出异常
throws声明异常,抛给调用者,调用必须进行try...catch
位置:方法名后面进行 声明异常,多个异常使用逗号隔开
//声明异常,多个异常用逗号隔开
只要有throws,强制要求方法调度方法必须 手段1:try catch 2.继续向上抛
public static void a() throws 异常类型{
//可能出现异常的代码
}
throw:手动抛出异常
throw new Exception("异常");
异常的分类:
printStactTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程
ex.getMessage();
返回异常信息描述的字符串
ex.printStactTrace();
异常堆栈信息
显示具体异常类型
显示产生异常的具体位置
当异常类型不匹配时,程序之间中断
打印自定义处理信息:
System.err.println(“自定义信息”);