• JAVASE(十三) 异常处理


    个人博客网:https://wushaopei.github.io/    (你想要这里多有)

    1、异常体系结构

    说明:

    |-----Throwable
    |-----Error :没针对性代码进行异常的处理
    
    |-----Exception :针对性代码进行异常处理
                      |-----编译时异常 : 代码在编译的时候发生的异常(必须进行处理否则无法运行)
                          |----ParseException
     
                      |-----运行时异常 : 代码在运行时发生的异常
                          |-----NullPointerException
                          |-----ClassCastException
                          |-----IndexOutofBoundsException

    2、异常的处理

    格式 :

    try{
        可能会发生异常的代码
     }catch(异常的类型   e(变量名)){
          关于该异常的处理方式;
     }finally{
          一定会执行的代码;
     }

    说明:

    1. finally是可的,finally中的代码一定会执行
    2. 当try中的代码发生异常时,会根据对应的异常类创建相应的对象,并将异常向外抛出。根据catch后面的异常类型进行匹配,一旦匹配成功则执行catch对应的异常处理方式。异常处理的代码执行完毕则跳出try-catch结构,继续向下执行其它的代码。一旦匹配不成功则抛出异常程序终止。
    3. 可以多个catch,如果多个catch后面的异常类型是子父类关系那么应该(子类在上父类在下)如果是兄弟可系谁上谁下都可以。
    4. catch可以省略不写,但必须要try-finally组合。目的是发生异常不处理,但一定要执行某些代码
    5. 输出异常信息 : ①getMessage()  ②printStackTrace()
    6. 在try声明的变量在try-catch结构外访问不到。因为作用域的问题。

    finally:

    1. 就算catch中发生了异常,finally也一定会执行。
    2. 就算catch中有return,finally中的代码也一定会执行。
    public int getNumber3(){
    		int a = 10;
    		try {
    			return a;
    		} catch (Exception e) {
    			
    		}finally{
    			a++;
    			return a;
    		}
    	}
    	
    	public int getNumber2(){
    		int a = 10;
    		try {
    			return a;
    		} catch (Exception e) {
    			
    		}finally{
    			a++;
    //			return 30;
    		}
    		return 30;
    	}
    	
    	public int getNumber(){
    		try {
    			System.out.println(1 / 0);
    			return 10;
    		} catch (Exception e) {
    			return 20;
    		}finally{
    			System.out.println("aaaaa");
    			return 30;
    		}
    	}

    代码:

                 try{
    			System.out.println("aaa");
    			System.out.println("bbb");
    			System.out.println(1 / 0);
    		}catch(NullPointerException e){
    			System.out.println("空指针异常");
    		}catch(IndexOutOfBoundsException e){
    			System.out.println("下角标越界");
    		}catch(RuntimeException e){
    			System.out.println("算术运算异常");
    		}finally{
    			System.out.println("我是一定会执行的代码");
    		}
    		System.out.println("程序执行完/毕");
    
    
    

    2.2 throws

    格式 :方法名() throws 异常类型1,异常类型2...{}
    throws :抓到异常后自己不处理直接向上抛,抛给方法的调用者。


    throws和try-catch-fianlly的区别?

    1. try-catch-finally真正的处理了异常

    2. throws没真正的处理异常,只是将异常向上抛,抛给方法的调用者,最后还是需要try-catch真正的处理异常

    throws和try-catch-finally的使用场景?

    1. 需要真正解决异常时需要使用try-catch
    2. 必须使用throws : 在main方法中如果需要连续的调用多个方法,每个方法都有可能需要处理异常,那么方法中的异常建议向上抛,抛给方法的调用者。(比如买飞机票输入身份证号的问题)
    3. 一定不能使用throws : 子类继承父类后。父类被重写的方法没有抛异常,那么子类重写的方法也不能抛出异常

    (详见ThrowsTest2.java)

    2.3 手动抛出异常类对象 – throw

    抛 :
    java程序在正常执行的过程中,一旦执行到某行代码发生了异常,系统会根据对应的异常类创建相应的对象并向外抛出,抛出给调用者。同时终止程序的运行。
    ①系统向外抛异常    ②手动向外抛异常
    格式 :

    throw new 异常类型();

    2.4自定义异常类

    代码:

    1. 继承Exception或RuntimeException
    2. 提供重载的构造器。一个无参,一个有参
    3. 提供一个序列版本号(讲IO流再说)

    代码:

    public class MyException extends RuntimeException{
    	
    	/*
    	 * 也可以不写,系统会自动帮我们生成一个序列版本号
    		建议手动添加
    	 */
    	private static final long serialVersionUID = -75646546882580L;
    
    	
    	public MyException(){
    		
    	}
    	
    	public MyException(String message){
    		super(message);
    	}
    }
  • 相关阅读:
    Python--day72--ajax简介
    Python基础1 介绍、基本语法
    10-Python-字符编码
    09-Python-集合
    07-Python-字符串操作
    99-Python-深浅拷贝
    06-Python-字典
    05-Python-判断语句
    04-Python-元组
    03-Python-操作列表
  • 原文地址:https://www.cnblogs.com/wushaopei/p/12259369.html
Copyright © 2020-2023  润新知