Java异常
一、error和exception
1、检查性异常
用户错误或问题引起的异常,这是程序员无法预见的,在编译时不能简单忽略
2、运行时异常
可能被程序员避免的异常,可以再编译时被忽略
3、错误
错误不是异常,而是脱离程序员控制的问题,在代码中通常被忽略,例如当栈溢出时,一个错误发生了,再编译中也检查不到。错误是可以被避免的
二、异常体系结构
1、Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类
这些异常分为两大类:错误和异常
AWTError指GUI方面的异常
2、NullPointerException:空指针异常
一个对象为空,调用其方法或访问、修改其字段就会产生该错误
主要原因:使用未初始化的变量或对象(虽然变量或对象已经声明);使用了关键字或已存在的类名作变量对象方法或类名
IllegalArgumentException:非法传参异常
比如试图将一个String转换为指定的数字类型,而该字符串确不满足数字类要求格式
ArithmeticException:算术异常
如:一个整数除以0
MissingException:丢失资源
3、error错误是灾难性的致命错误,是无法控制和处理的,由Java虚拟机生成并抛出的,要尽量避免这些错误,否则损失很大
Java虚拟机运行错误,发生异常时,一般会选择线程终止
exception里的RuntimeException(运行的异常),这些异常时不检查异常,程序中选择捕获处理,也可以不处理
这些异常一般是由逻辑错误引起的
exception通常情况下是可以被程序处理的,并且再程序中尽可能的去处理这些异常
三、捕获和抛出异常
1、异常处理机制:抛出异常,捕获异常
异常处理五个关键字:try,catch,finally,throw,throws
2、异常不捕获的话,运行不会停止,异常被捕获后,将不会停止程序
有时候程序报出异常会导致程序无法继续运行,但是你又希望程序运行,就可以再可能出现异常的地方加上try,catch代码块捕获,自己处理,后面代码还是会运行
2、catch想要捕获的异常类型等级要从低到高,throwable是最高类型
3、主动抛出异常
try/catch是遇到错误也能运行,而throw、throws是在运行时给你抛出错误
四、自定义异常
用户自定义异常,只需继承exception类
出现异常,可以选择就地捕获或者抛出。
自定义myexcption异常后,传递参数11,往下走,抛出异常,catch捕获异常,然后输出e,这个e就是自定义异常中的异常打印消息