java程序在执行过程中发生的异常事件可分为两类
Error:java虚拟机无法解决的严重问题,如jvm系统内部错误,资源耗尽,内存溢出等。这种情况改代码吧 Exception:其他因为程序错误或偶然在外因素导致的一般性错误,可以编写一些针对的代码进行这种异常处理
发生异常后,会在异常处生成一个异常类型的对象抛出,异常之后的代码都不执行
1. try…catch…finally
只执行一个catch,一旦执行了完catch,就跳出try…catch结构,如果有写finally,就进入finally
try{
//可能出现异常的代码
}catch(异常类型1 变量名1){
//出现异常类型1的异常的处理方式
}catch(异常类型2 变量名2){
//出现异常类型2的异常的处理方式
}catch(Exception e){//父类异常,捕获所有异常,e是具体的异常
//输出异常
//System.out.println(e);
//e.printStackTrace();
}
//可以写多个catch
finally{
//finally可选可不选
//一定会被执行的代码,
//像数据库连接,输入输出流,网络编程等资源,jvm是不能自动回收的,我们要手动进行回收
//放在finally里面最合适,以防上面的代码异常回收不了
}
2. throws
写法throws 异常类型
public class test1 {
public static void main(String[] args) {
//再抛就抛给jvm了,直接把jvm整挂了,用try catch处理了
try{
xxx();//调用xxx方法,收到一个xxx抛出的异常,这个异常最开始是sss抛给xxx的,xxx不想处理又抛给上面
}catch (Exception e){
e.printStackTrace();
}
}
//throws后面的异常类型多个加逗号隔开,我只写了一个父类的异常
public static void xxx() throws Exception{
String a="asd";
Integer b=Integer.parseInt(a);
}
public static void sss() throws Exception{
xxx();//xxx方法有异常抛出,谁调用就抛给谁。
//xxx抛出异常给sss就不管了,sss接手了异常,要么处理了,要么继续往上抛
}
}