一、异常概念(Exception)
异常指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。
异常不是语法错误。语法错了会导致编译不通过,导致报红,不会运行。
一般处理异常的方法
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
String s = sc.nextLine();
if (s.matches("[0-9]+")) {
int x = Integer.parseInt(s);
System.out.println("输入的数字是:" + x);
}else {
System.out.println("程序异常");}
二、异常机制
1.try
探测代码是否有异常
try{
代码块
}
try块中任何一条语句发生了异常,下面的代码将不会被执行,程序将跳转到异常处理代码块中,即catch块。因此,不要随意将不相关的代码放到try中,因为随时可能会中断执行。
2.catch
异常捕捉
catch(异常对象 e){
}
把抓到的类型匹配的异常捕获,保证程序能继续运行下去
catch语句必须紧跟着try语句之后,称为捕获异常,也就是异常处理函数,
一个try后面可以写多个catch,分别捕获不同类型的异常,要从子类往父类
的顺序写,否则有编译错误
捕获异常的有关信息:
与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。
• getMessage() 获取异常信息,返回字符串
• printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的
位置。返回值void。
3.finally
在异常机制中,有无异常一定执行
finally{
必须执行的逻辑
}
4.throws
throw译为抛出,丢出。用于抛出异常对象。
在定义一个方法时可以使用throws关键字声明,表示此方法不处理异常,而交给方法调用处处理
示例:
public void test throws 异常1,异常2,异常3{
}
任何方法都可以使用throws关键字声明异常类型,包括抽象方法。
调用使用了throws的方法时必须处理声明的异常,要么使用try-catch,要么 继续使用throws声明。
如果抛出的是运行期异常,则不会有任何提示,需要查看所调用的方法结构。
5.throw关键字
throw关键字用于手动抛出异常,抛出的是一个异常类的实例化对象。
throw new 异常();
示例:
package com.ffyc;
public class Exception1 {
public static void f() throws Exception {
int a = 1;
int b = 0;
int c = a/b;
if(b==0) throw new Exception("除0异常");
}
}
三、自定义异常
自定义异常就是自己定义的异常类,也就是API中的标准异常类的直接或间接的子类
用于避免和标准异常混淆
基本语法:
public class 异常类名 extends Exception/RuntimeException{
public 异常类名(String msg){
super(msg);
}
}
自定义异常类中往往不写其他方法,只重载需要使用的构造方法
继承Exception,在方法中使用throw抛出后,必须在方法中try-catch或 throws抛出
示例:
package com.ffyc;
public class Exception1 {
class Exception01 extends RuntimeException {
public Exception01(String msg) {
super(msg);
}
}
}