异常2-笔记

异常2-笔记

catch如何处理异常

1.什么都不写
2.输出自定义异常信息
3.打印异常信息:
(1)直接输出异常对象.tostring(调用toString方法,显示异常的类名(全限定路径))
(2)显示异常描述信息对应的字符串:异常对象.getMessage();如果没有就显示null。
(3)显示异常的堆栈信息:*异常对象.printStackTrace(); 将异常信息捕获后在控制台输出,方便我们查看异常。
4.抛出异常:throw 异常对象

finally

什么情况下try-catch后的代码不执行

(1)throw抛出异常
(2)catch没有成功捕获异常
(3)在try中遇到return

如何使try-catch后的代码必须执行

只要将必须执行的代码放进finally中,那么这个代码无论如何一定执行

return和finally执行顺序

先执行finally后执行return

什么代码会放在finally中

关闭数据库资源、io流资源、socket资源

如何让finally中代码不执行

System.exit(数字);//终止当前虚拟机执行

多重catch

(1)把try中可能出现的异常类型用多个catch捕获,按照代码顺序进行比对,执行第一个与异常类型匹配的catch语句
(2)一旦一条异常满足,后面的catch语句自动忽略。
(3)因为有先后顺序,所以特殊的异常在前(并列),一般异常在后。子类在前,父类在后。
(4)jdk1.7以后 异常新处理方式,可以用并列或 | 符号连接

异常的分类

层次结构

异常的层次结构
注意:程序中的语法错误、逻辑错误不属于上面的Error、Exception

运行时异常

写代码的时候不用特意对异常进行处理,在程序运行以后,系统自动检测报出异常
ArrayIndexOutOfBoundsException 数组越界异常
NullPointerException 空指针异常

检查异常

检查异常

在写代码时有可能出错的语句(报红线)。在写的时候就要对代码进行处理,防患于未然的效果
ClassNotFoundException 找不到类
InstantiationException
IllegalAccessException
(1)alt+enter 方法1:用try-catch嵌套方法捕获异常,缺点,层级关系不明显

public class Tset {
    public static void main(String[] args) {
        try {
            try {
                Class.forName("asdf").newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

(2)方法2 多重catch
catch clause

public class Tset {
    public static void main(String[] args) {
        try {
                Class.forName("asdf").newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

(3)方法3:throws
通过throws往外抛给虚拟机
抛出

public class Tset {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {

        Class.forName("asdf").newInstance();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值