day20 Java 异常机制 throw(s) final( ly / lize )


I know, i know
地球另一端有你陪我




异常机制

Java程序出现的错误,程序出现了不正常的情况

1、所有异常有一个公共的父类
      Throwable
2、往下可以分为两大类
      Error(错误)
      Exception(异常)
3、其中,Exception(异常)可以继续划分为两大类
      RuntimeException(运行时异常)
      除运行时异常之外的异常类(编译异常 / 非运行时异常)

异常处理机制
如果程序出现了问题,我们没有做任何处理,最终JVM会给出一个默认的处理
把异常的名称,相关的原因,以及出现问题的相关信息,包括位置输出在控制台
同时程序会结束,后面的代码不会运行

一、 Error (错误)

指程序无法处理的错误,大多数与执行者的代码无关
如内存溢出、类定义错误等,一般不处理


二、 Exception(异常)

指程序可以处理的错误,下分为运行时异常和编译时异常

常用方法

1、String getMessage()
获取异常信息,返回字符串

2、String toString()
获取异常类名和异常信息,返回字符串

3、void printStackTrace()
获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void

1、 RuntimeException(运行时异常)

指程序世纪运行中会出现的问题,一般是由于代码逻辑出现错误
如下标越界异常、空指针异常等
若使用 try — cahth 捕获或 throws 抛出,也可以不处理
在代码编译过程中不会被发现

2、 其他异常类(编译异常)

指在代码编译过程中就会被发现的问题
如部分类型转换错误
这些错误必须要进行处理,否则代码无法编译通过


三、 异常处理

在 Java 应用程序中,异常处理机制为:捕捉异常、抛出异常

1、 try — catch — finally(捕获异常)

代码格式

    try {
    
    
        可能出错的代码
    } catch (可能出现异常类1 变量名) {
    
    
        针对问题处理,如:
        e.printStackTrace();
    } catch (可能出现异常类2 变量名) {
    
    
        针对问题处理,如:
        e.printStackTrace();
    } 	......
	  finally{
    
    
    	善后工作,释放资源、关闭流等
    }
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
    
    
        Date parse = sdf.parse(s);
        System.out.println(parse);
        //	其后的代码均不会被执行
        System.out.println("韭菜盒子");
    } catch (ParseException e) {
    
    
        e.printStackTrace();
    } finally {
    
    
        System.out.println("月光德彪西");
    }
    System.out.println("fgh");	
/*
	月光德彪西
    java.text.ParseException: Unparseable date: "2021-10-18"
    fgh
    at java.text.DateFormat.parse(DateFormat.java:366)
    at javase.day20.Exception1.main(Exception1.java:23)
*/

1、try 中语句尽可能少
2、catch 可以一次导入多个,但一定要有处理语句
3、能明确异常的类型的时候尽量明确,不要用父类大的作处理
4、平级关系,多个 catch 异常没有前后顺序关系,若有父类,必须在子类后
5、若 try 中代码出错,将会在那一代码后跳出至 catch
6、绝大部分情况下, finally 中代码一定会被执行

JDK 1.7中,新特性处理多个异常

代码格式

JDK7的新特性及注意事项
新特性处理多个异常
	try{
    
    
		可能会出现问题的代码;
	} catch (异常类名1|异常类名2|... 变量名){
    
    
		异常处理语句;
	}

1、异常类必须平级关系
2、格式原因,处理代码方式唯一

2、 throws(声明抛出异常)

针对某些无法处理的异常,一般使用 throws 抛出

格式:

	修饰词 方法名() throws 异常类 {
    
    
	}
public static void main(String[] args) {
    
    
	//	此处调用方法时依然需要捕获可能的异常
    try {
    
    
        fun();
    } catch (ParseException e) {
    
    
        e.printStackTrace();
    }
}

public static void fun() throws ParseException {
    
    
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String s1 = "2021-10-18 21:42:59";
    String s2 = "2021-10-18";

    sdf.parse(s2);
    //sdf.parse(s2);

    System.out.println("fgh");
/*    
java.text.ParseException: Unparseable date: "2021-10-18"
	at java.text.DateFormat.parse(DateFormat.java:366)
	at javase.day20.Exception2.fun(Exception2.java:23)
	at javase.day20.Exception2.main(Exception2.java:11)
*/

1、编译时期异常抛出,方法内可以不做处理,但是调用该方法时必须做处理
2、一旦调用出错,方法内后面的代码程序不会执行
3、推荐抛出的是详细的异常类型,可以抛出大的异常类型,但是处理的时候要对应上
4、做开发的时候,尽量不要在main方法上抛出,否则无法捕获异常

3、 throw(抛出异常)

在功能方法内部出现某种情况,程序不能继续运行
需要进行跳转时,就用 throw 主动把异常对象抛出

格式:

	throw new 异常类类型
    public static void main(String[] args) {
    
    
        fun();       
    }

    public static void fun() {
    
    
        int a = 10;
        int b = 0;
        System.out.println(a/b);
        throw new ArithmeticException();
    }
/*
	Exception in thread "main" java.lang.ArithmeticException: / by zero
	at javase.day20.Exception3.fun(Exception3.java:19)
	at javase.day20.Exception3.main(Exception3.java:10)
*/

四、 throw & throws

throws:
用在方法声明的后面,跟的是异常的类名
可以跟多个异常类名,用逗号隔开
类似一种声明,表示出现异常的可能性
为了程序的正常运行,我们选择抛出给调用者处理

throw:
用在方法体内,跟着的是异常的对象
只能抛出一个异常对象
类似一种行为,直接抛出这种异常
交由调用者捕获和处理


五、 final & finally & finalize

final
可以修饰类,成员变量,成员方法
修饰类:类不能被继承
修饰成员变量:变量就是常量
修饰成员方法:方法不能被重写

finally
是处理异常的一部分,一般情况下用于释放资源的作用,一般来说都会执行
特殊情况下:在执行finally之前JVM就停了(System.exit(0))

finalize
是Object类中的一个方法,用于手动垃圾回收,但是不一定会立即回收


总结

Throwable

┕ Eoore

┕ Exception
   ┕ RuntimeException(运行时错误)
   ┕ 其他类错误(编译错误)

throw & throws
final & finally & finalize
上翻

Guess you like

Origin blog.csdn.net/qq_41464008/article/details/120833402