1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 异常
- 异常就是程序出现了不正常的情况
- Java中的异常体系:
- Throwable Java中所有的异常和错误的父类
- / \
- Exception Error
- / \
- RuntimeException Exception
- Throwable Java中所有的异常和错误的父类
- |- Exception Java中所有异常的父类,也就是异常类,他表示程序本身可以处理的问题
- |-RuntimeException 运行时异常,程序代码不会报错,但是运行后会报错。
- |-除了RuntimeException类及其子类以外的其他异常,就是程序代码会直接报错,我们必须处理这些异常。
- |-Error Java中所有错误的父类,也就是错误类,他表示不是程序的问题,而是系统的问题。
- 如果Java中出现Error错误,那么大部分时间都不是代码的问题,而是系统或内存的问题。
- Java中的异常分为两大类:
- 编译期异常:都是Exception类的子类,必须要我们进行处理,否则程序会发生错误,无法通过编译。
- 运行时异常:都是RuntimeException类的子类,不需要我们处理,也可以和编译期异常一样进行处理。
- Java文件----编译期--》运行期
- Java程序想要执行,需要几步?
- 1、Java源代码文件--->编译(javac.exe)--->Java字节码文件
- Java字节码文件--->解释(java.exe)--->机器码(二进制数据)并且执行
- 我们之前遇到了异常,不做任何处理,都是交给Java虚拟机(JVM)进行处理。
- 默认的处理:把异常名称,错误原因,异常出现的位置等信息输出到控制台。并且停止程序继续运行。
- 我们要进行的异常处理方案:
- 两种方案:
- |-1、我们也不处理了,只是把异常告诉虚拟机,这段代码可能出现异常了(声明异常) throws
- |-2、我们进行处理,就比较麻烦了:
- 1、我需要先检测可能出现异常的代码块。 try
- 2、判断可能出现什么异常并且给出解决方案 catch
- 3、无论怎么解决,有些代码必须要执行。 finally
- 无论是否处理都会用到的,抛出异常对象 throw
- 我们可能会自定义一些符合我们业务的异常。
- 建一个类,名称后面为Exception,为了区分该类为异常类。
- 让该类继承Exception类或RuntimeException类。
- 万事万物皆为对象
- throws 用在方法的后面,throws 后面的跟着的是异常类名。表示该方法里面的代码可能会引发某个异常:
- public void method() throws AgeException{ //这个方法里面的代码可能引发AgeException异常。
- }
- 如果哪个方法调用了这个方法,那么就需要进行处理AgeException异常,否则也要使用throws继续声明。
- throw 用在方法体里面,后面跟着的是异常的对象名。表示手动抛出异常对象,需要方法体内部进行处理或者throws声明。
- 我们自己处理异常:
- 格式:
- try{
- //是可能出现异常的代码
- }catch(异常类型 变量名){
- //处理方案
- }finally{
- //一定会被执行的代码
- }
- 案例:
- 商品类里面包含3个属性:商品名称、商品价格、商品库存
- 模拟实现用户购买商品的功能,使用ArrayList模拟商品列表,
- 当购买的商品不存在或者商品库存为0时,抛出自定义异常。
- 用户购买某一个商品时,对异常进行处理,并对库存进行改变。
- 步骤:
- 1、创建商品类
- 2、创建自定义的异常类:
- NotProductException 没有这个商品异常
- InventoryException 商品库存不足异常
- 3、创建Main类
- 创建一个购买的方法
- public void shopping(Product p){
- }
|