1.异常:
导致程序中断运行的一些指令。
2.异常分类:
受检异常(Exception):在编译之前,由编译器检测.
非受检异常(RuntimeException):则在 程序运行时候 产生.
3.try&catch&finally关键字
try{
// 有可能放生异常的代码段
}catch(异常类型1 对象){
//异常处理1
}catch(异常类型2 对象){
//异常处理2
} // ...
finally{
// 异常统一出口,不管是否异常 都会执行
}
// 多个异常对象 捕获的 简化写法
catch( 异常类型1 | 异常类型2 ... 异常类型n e);
// 小类型 写前面 大类型 写后面
4.异常处理过程
1.一旦产生异常,则系统会自动产生一个异常类的实例化对象
2.此时 如果存在try语句,则会自动找到匹配的catch 语句执行,如果没有异常处理,则程序将退出,并由系统报告错误.
5.throw与throws
throws: 主要用在方法的声明上,表示方法中不处理异常,而交给调用处处理,实际上在java程序中,若没有任何异常处理,默认有jvm处理
throw:在程序中手动抛出一个异常,从异常处理机制来看,所有的异常一旦产生之后,实际上是抛出一个异常类的实例化对象,该对象可以由throw 直接抛出。
// throws 表示调用该方法可能抛出异常 但是该方法 不做任何处理
public staitc int test(int num1,int num2)throws Exception{
if(num2 == 0)
throw new ArithemticException("除数不能为0");
return num1 / num2;
}
// 但是调用该方法 时候必须捕获
try{
test(10,0);
}catch(Exception e){
e.printStackTrace();
}
6.使用规则
1.try 不能单独使用,要结合catch、finally 组成try ...catch...finally、try...catch、try...finally 三种结构,catch 可以有一个或多个,finally 语句最多一个. try、catch、finally 这三个关键字均不能单独使用。
2. try、catch、finally 三个代码块中变量的作用域分别独立,不能相互访问
3. 多个catch块的时候,java 虚拟机会匹配其中一个异常类 或其子类,就执行catch 块,而不会执行其他catch块
7.自定义异常类
public class MyException extends Exception{
private String message;
public MyException(String message){
super(message);
this.message = message;
}
@override
public String toString(){
return this.message;
}
}
// 自定义异常 常用于 处理逻辑错误
public static boolean login(String name,String pwd)throws MyException{
if(! "admin".equals(name)){
throw new MyException("用户名不正确!");
}
if(! "123".equals(pwd)){
throw new MyException("密码错误");
}
return true;
}
public static void main(String [] args){
try{
boolean b = login("abc","123");
System.out.println(b);
}catch(MyException e){
e.printStackTrace();
}
}
8.断言
assert 表达式;