关于Java异常处理的整理说明

关于Java异常处理的整理说明

一、异常的体系结构

1. |-------Throwable:
|------Error: 发生的异常是没有办法使用针对性的一些代码去解决的
|------Exception: 可以通过一些针对性的代码进行处理

|------运行时异常 :代码在运行时发生的异常(java 字节码文件)
ArithmeticException : 算术运算异常
|------编译时异常 :代码在编译时发生的异常(javac 源文件名.java)
FileNotFoundException: 文件找不到异常

2. 抓抛模型 :

①抛(制造异常):当程序在执行的过程中,如果执行到某行代码时发生了异常,那么系统就会根据对应的异常类创建异常对象并抛出。同时终止程序的运行。

方式一:系统向外抛异常
方式二:手动向外抛异常(throw)

②抓(处理异常):

方式一 :try-catch-finally
方式二 : throws

二、处理异常方式一

/*
	方式一 :try-catch-finally
	格式:
    	try{
    		可能发生异常的代码
        }catch(异常的类型1 变量名){
        	异常的处理方式1
        }catch(异常的类型2 变量名){
        	异常的处理方式2
        }
        ........
        finally{
        	一定会执行的代码
        }
     说明:
		1. 当try中的代码发生异常时,系统会创建对应的异常对象并抛出。
                抛出的异常对象的类型会和catch中异常的类型进行匹配,
                一旦匹配成功则执行相应的异常处理代码。执行完后跳出try-catch结构,继续向下执行。
                一旦匹配失败则抛出异常终止程序。
        2. catch可以有多个,但是catch中的异常类型一旦存在子父类关系,那么子类在上父类在下。
        3.finally中的代码一定会执行(无论是否catch到了异常都会执行)
        4.try-catch-finally  try-catch   try-finally
        5.异常处理方式  getMessage()  printStackTrace()
        
    注意 :
             1.编译时异常 :必须处理否则程序不能执行。
             2.运行时异常一般情况下我们都不处理。
*/

三、处理异常方式二

/*
	处理异常方式二 :throws

	格式 : (形参列表) throws 异常类型1,异常类型2 ......{}
	
	说明: throws是抓到异常后向上抛,抛给方法的调用者来处理该异常。(谁调用该方法处理该异常)
	
	throws和try-catch-finally的区别?
		throws并没有真正的处理掉异常,而是将异常向外抛,抛给方法的调用者处理。
		try-catch-fianlly:真正的处理掉了异常
		
	
	1.什么时候必须使用throws?
        如果是因为传入的数据导致的异常,那么在整个传参过程中的所有方法都不能对该异常进行try-catch
        只能throws。最终还是由传数据的那个方法进行try-catch解决。
    2.什么时候不能使用throws?
        ①如果需要真正的处理掉异常那么不能使用throws
        ②如果父类被重写的方法没有throws那么子类重写的方法也不能throws
*/


class MyException{
    
    public void setAge(int age) throws FileNotFoundException{
        
    }
    
}

四、手动抛异常

/*
	格式:  throw new 异常的类型 
		  throw 异常类型的对象
*/

class MyException{
    public void setAge(int age){
        if(age < 0){
            throw new RuntimeException("不能小于0");//抛的是运行时异常
        }
    }
    
     public void setAge2(int age)throws Exception{
        if(age < 0){
            throw new Exception("不能小于0");//抛的是编译时异常
        }
    }
}

五、自定义异常类

/*
    自定义异常类:

    步骤:
        1.自定义一个类并继承Exception(编译时异常类)/RuntimeException(运行时异常类)
        2.写两个构造器:一个空参的,一个有参的
        3.显示提供一个serialVersionUID(可以不写系统会自动提供一个serialVersionUID)
 */
public class MyException extends RuntimeException{

    //显示提供一个serialVersionUID(可以不写系统会自动提供一个serialVersionUID)
    static final long serialVersionUID = 532323232323L;

    public MyException(){

    }

    public MyException(String message){//异常的信息说明
        super(message);//调用父类的构造器
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值