java代码块如果出现异常_JAVA中的异常

异常的概念:程序在运行时,发生了我们没有预测的情况,它阻止了程序按照我们预期的效果执行

异常处理的机制 在程序在发生异常以后,还能按照我们预先设定好的逻辑,继续执行后续的代码!!

packagebaseexception;/*** @2018年4月8日

* @王 鸿

* @Administrator*/

public classBaseAbnormal {public static voidmain(String[] args) {

System.out.println("1");

System.out.println("2");

System.out.println("3");

System.out.println("4");

System.out.println(5 / 0);

System.out.println("6");

System.out.println("7");

System.out.println("8");

System.out.println("9");

System.out.println("10");

}

}

下面是这个代码的运行结果

7b549a71442223ae2d45c41b275e28ec.png

01 Exception in thread "main"                                   //发生异常的线程

02 java.lang.ArithmeticException                                //发生异常的类型(只是其中的)

03 / by zero                                     //除0 的异常 异常的原因

04 at baseexception.BaseAbnormal.main(BaseAbnormal.java:14)                   //异常的抛出点

baseexception 包名

BaseAbnormal 类名

main  方法

05 (BaseAbnormal.java:14)                             //异常发生的文件  "14" 表示异常发生的行号

--------------------------------------------------------------------华丽而高贵的分割线--------------------------------------------------------------------------

所有异常和错误的父类--Throwable;

Throwable类是java异常类型的顶级父类,一个对象只有是Throwable类的(直接或者间接)实例,它才是一个异常对象,才能被异常处理机制识别.

JDK中内建了一些常用的异常类,我们也可以自己定义异常

根据编译器对异常的处理要求:异常分为两类:

1 运行时异常 (RuntimeException) 程序在运行时所产生的异常

2 受查异常(编译异常)(checked Exception) 在程序编译期间产生的异常

异常的5个关键字

try,catch,finally,throw .throws;

异常处理方式:

01.try的使用

try不能单独使用 必须和catch 或者finally中的 其中一个一起使用;

try中放可能发生问题的代码

如果我们的try代码块不出现异常,有finally的情况下先执行finally,之后执行finally之后的代码

如果我们的try代码块出现异常,先去catch中匹配异常如果匹配成功执行对应的catch块.否则执行finally然后程序终止!!!!

02.catch的使用

每一个catch代码块都用于捕获并处理一个特定的异常或者是异常的子类

catch (ArithmeticException ex); 定义了一个异常的类型;

catch块可以出现多个 但是不能异常类型重复!!!!

多个catch代码块中异常书写顺序,必须是从小到大.

在实际开发中异常尽量要写精确而不是直接使用顶级异常

我们的异常会从多个代码块中找到一个最先匹配的 ,然后交给这个代码处理

每个catch代码块中的变量都是独立的,别的代码块访问不了

如果try中没有异常 所有的catch被忽略

catch (ArithmeticException | Exception ex) 多个异常声明在一个catch中 这种写法只限于JDK1.7

03.finally的使用

无论什么异常finally块都会执行;

如果try中没有异常,但是有return这时候会先执行finally之后再执行return

System.exit(0):正常退出

System.exit(1):非正常退出(一般放在catch块中)

做一些清理工作,关闭流释放数据库的连接

2 throw, throws

001 throws的使用

语法:方法名称  throws  异常类型1,异常类型2;

01.thows声明在方法名称之后;

02.throws可以声明多个异常类型,每个类型之间使用 '逗号' 隔开;

03.throws声明表示当前方法可以不处理异常,而是由方法的调用者处理;

04.如果在主函数中使用throws声明异常,则由JVM处理异常!

002 throw的使用

语法:throw  new  异常类型([异常提示语句]);

01.异常类型可以是Exception或者其子类;

02.一条throw语句只能抛出一个异常;

03.throw语句只能出现在方法体中

04.针对于thorw抛出的异常,有两种解决方式

使用try...catch...finally代码块处理异常

使用throws声明异常,把异常告诉调用者

7afe280ae489a769de50bde771d69333.png

-------------------------------------------------------这一块理论有一点多也是异常的重点------------------------------------------------------

**异常不光只使用java里写好的也可以咱们自己创建**

自定义异常

1.异常类必须是Throwable的子类

2.定义受查异常,建议继承Exception

3.定义运行异常,建议继承RuntimeException

语法

class 自定义异常类 extend 异常类型

packageexceptionchain;/*** @2018年4月8日

* @王 鸿

* @Administrator*/

public class CustomerException extendsException {publicCustomerException() {

}publicCustomerException(String message) {super(message);

}

}-------------------------------------上面是自己创建的异常---------------------------------

packageexceptionchain;/*** @2018年4月8日

* @王 鸿

* @Administrator*/

/**

* test1();抛出自己定义的异常

* test2(); 捕获这个异常并包装成运行时异常 继续抛出 main中

*

* 调用test2()尝试捕获test()方法的抛出的异常*/

public classChainTest {public static voidmain(String[] args) {

ChainTest chainTest= newChainTest();try{

chainTest.test2();

}catch(Exception e) {

e.printStackTrace();

}

}public void test1() throwsCustomerException {throw new CustomerException("自己创建的异常");

}public voidtest2() {try{

test1();

}catch(CustomerException e) {//包装成运行时异常

RuntimeException runtimeException = newRuntimeException("自己包装的运行时异常");//通过这个方法把捕获的异常传进去

runtimeException.initCause(e);throwruntimeException;

}

}

}

1f99cc3ddbb249bb6ae34619a5efa945.png

这样我们就创建了一个属于自己的异常

----------------------------------------------------------------------------------------异常的使用原则(个人理解)----------------------------------------------------------------------------------------

1.异常只能用于非正常情况

2.为异常提供说明文档

3.尽可能的避免异常,特别是运行时异常

4.保持异常的原子性

5.避免过于庞大的try代码块

6.在catch中指定具体的异常类型

7.不要在catch块中忽略捕获的异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值