JavaSE学习总结:异常处理

1、什么是异常

  • 不是语法错误
  • 不是逻辑错误
  • 而是在程序运行中,一些不可控的因素,不期而至的各种状况,导致程序运行异常。
  • 例如:文件不存在,网络中断,非法输入等

2、异常的处理机制的原理,过程

  • Java程序在某句代码处发生了异常,JVM会new合适的异常对象,并把异常的信息封装到对象中,然后抛出,如果该代码没有环绕try…catch块,那么会先向上(调用者)抛出,如果上级也没有处理,那么一直往上抛,最终可能到达JVM,导致程序中断。如果其中有一个部分将这个异常对象“捕获”,程序继续进行,不会中断。

3、异常的体系结构

1、java.lang.Throwable

  • Java 语言中所有错误或异常的超类。
  • (1)只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。
  • (2)只有此类或其子类之一才可以是 catch 子句中的参数类型。

2、java.lang.Error

  • 用于指示合理的应用程序不应该试图捕获的严重问题。
  • 例如:VirtualMachineError虚拟机错误
  • StackOverflowError栈溢出
  • OutOfMemoryError内存溢出

3、java.lang.Exception

  • 受检异常

  • 在编译阶段必须编写“异常处理”的代码,否则编译不通过

  • ParseException

  • IOException FileNotFoundException

  • SQLException

  • 运行时异常

  • RuntimeException

  • 在编译阶段不要求强制编写“异常处理”的代码,但是希望程序员,尽量避免
    ClassCastException
    NullPointerException
    ArrayIndexOutOfBoundsException

4、异常的处理机制

1、抛

(1)JVM自动抛
(2)throw 异常对象; (1)JDK中定义异常类型;(2)自定义异常类型

2、抓

5、异常处理

1、捕获处理

  • 语法
    try{
    可能发生异常的代码;
    }catch(异常的类型 对象名){
    异常的处理代码
    }…
    finally{
    无论是否发生异常都会运行的代码
    }

  • 说明
    (1)try不可以单独存在,要么和catch,要么和finally一起使用try{}catch(){}finally{}
    try{}catch(){}
    try{}finally{}

(2)catch可以多个,但是执行时,如果发生异常,只会进入其中一个
(3)多个catch()中的类型不能相同。如果是“互斥”关系,某个异常不是继承关系,顺序随意。
如果“包含”‘关系,异常之间有继承关系,子上父下。
(4)finally
无论是否发生异常都会运行的代码,一般编写释放资源的代码。
尽量避免在finally写return语句

2、上报处理

throws,语法格式:【修饰符】 返回值类型 方法名(形参列表)throws 异常列表。
把异常抛给调用者处理。

6、throw

用于手动抛出异常对象
可以抛出系统已定义异常,也可以抛出用户自定义异常
throw可以代替return语句结束方法,但是没有返回值

7、重写与异常列表

重写方法的要求:
两同:方法名与形参列表
两小:
返回值类型,基本数据类型与void:必须相同。引用数据类型: 子类的方法的返回值类型可以是父类被重写方法的返回值类型的子类。
异常类型,子类抛出的异常类型 要么和父类被重写方法抛出的异常一样,要么是父类被重写方法抛出的异常的子类。
一大 :权限修饰符。子类方法的权限修饰符 》= 父类被重写方法的权限修饰符。
public > protected>缺省>private

8、finally与return都存在

没有异常:try–>【返回值赋值】–>finally–>结束方法。
有异常:try–>catch–>【返回值赋值】–>finally–>结束方法。

9、自定义异常

是一个类,必须继承Throwable或它的子类
必须通过throw才能抛出

public class MyException extends Exception{
	
	/**
	 * 序列版本号唯一的标识当前类
	 */
	private static final long serialVersionUID = 6650357798030558092L;

	public MyException(){}
	
	public MyException(String msg){
		super(msg);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值