JavaSE---异常

1.异常

1.1 异常的概念

程序在运行的过程出现的错误,称之为异常。

1.2 异常处理的重要性

如果异常不处理,那么就会终止java虚拟机的运行。意味着出现异常后面的代码就不会再执行了

int a = 10;
System.out.println(a/0);
//ArithmeticException
System.out.println("执行吗?");//不会执行

1.3 异常的分类

Throwable (异常的父类)

  • Error(错误) 内存溢出、硬件等等(程序员无法通过程序解决)
  • Exception(异常)
    • 运行期异常(未检查) 程序运行期间出现的异常 RuntimeException
      • 举例:空指针异常、类转换异常、数组下标越界异常、输入异常、下标越界异常等
    • 编译期异常 (受检) 程序在编译期间出现的异常 Exception
      • 举例:ParseException InterruptedException等

1.4 异常的解决(异常处理机制)

如果正确的处理了异常,那么不会终止JVM的运行

1.4.1 捕获(主动处理)

try、catch、finally

语法:

try{
可能会出现异常的代码
}catch(要捕获的异常类型1 变量名){
如果出现对应异常所执行的代码
}catch(要捕获的异常类型2 变量名 ){
如果出现对应异常所执行的代码
}…

  • catch需要注意的点
    • 1、catch中捕获的异常类型必须要与出现异常的类型要一致(大于等于),否则相当于没有处理异常
    • 2、catch中的异常类型可以捕获多个,注意:捕获异常的顺序是从小到大
    • 3、捕获异常的时候,可以捕获最大的异常Exception
  • finally的特点
    • 1、无论代码是否出现异常,都会执行finally中的代码
    • 2、 一般在finally写释放资源的代码
    • 3、如果方法中出现return关键字,finally依旧会执行.(但是如果调用System.exit(0);那么finally不会再执行)
  • try catch finally使用语法
    • try{…}catch(){…} 一起使用
    • try{…}catch(){…}catch(){…} 一起使用
    • try{…}finally{…} 一起使用
    • ttry{…}catch(){…}catch(){…}finally{…} 一起使用
    • 不能单独使用

捕获异常 代码执行的顺序

  • 先执行try中的代码
    • 1、没有异常,正常执行完整个程序
    • 2、有异常 ,就会执行对应catch语句块。而try后面的代码就不会执行了

1.4.2 抛出(被动抛出)

  • a、在方法上声明 throws

    • 语法: public void show() throws 异常的类型1,异常的类型2{}
    • 特点:
      • 1、如果在方法上声明异常,那么方法的调用者就要进行处理
      • 2、如果异常声明在了main方法上,实际上就是给jvm处理(那就是没有处理)
      • 3、声明异常可以声明多个
    • 场景:
      • 1、当前无法对异常进行处理的时候,就可以把异常抛给方法的调用者。
      • 2、现在如果代码出现异常(直接try、catch)
  • 特殊案例:

    • 如果在main方法上声明(抛出)异常,那么这个异常就交给了main 方法的调用者。而main方法的调用者是jvm,所以这个异常并没有处理。
  • b、在方法内部抛出 throw

    • 语法: throw 异常对象;
    • 特点:
      • 1、如果抛出运行期异常,那么直接抛出即可
      • 2、如果抛出编译期异常,那么需要在方法上声明抛出
    • 场景:
      • 一般写框架的时候,设计

1.5 总结

  • 1、运行期异常,可以利用逻辑判断解决(避免)
  • 2、编译期异常,必须要解决 现在如果代码出现异常(直接try、catch)

1.6 自定义异常

  • 1、自定义运行时异常
    • 写一个类继承自RuntimeException
    • 编写有参和无参构造方法
  • 2、自定义编译期异常
    • 写一个类继承自Exception
    • 编写有参和无参构造方法
  • 应用场景:
    • 1、一般在系统的异常无法满足自己公司需求的时候会自定义异常。
    • 2、自定义异常一般和throw抛出一起配合使用
public class AgeException extends RuntimeException{

	public AgeException() {
		super();
	}

	public AgeException(String message) {
		super(message);
	}
	
}

使用自定异常

public static void setAge(int age) {
    if(age < 0 || age > 120) {
        throw new AgeException("你的年龄不合法");
    }
}

1.7 方法重写

继承中方法的重写

  • 子类重写父类的方法,不能抛出比父类更大、更多的编译器异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值