异常处理

异常处理

1. 异常是什么

	JVM 针对于代码运行过程中,出现的错误,异常信息。打包之后抛出到方法外部或者自行处理。在异常信息中,需要给予开发者足够的信息提示,包括异常和错误的前因后果。
	Java中异常基类
		Throwable 类 Java中所有异常和错误的基类,规定了基础方法,和必要的构造方法形式。
	Throwable 有两个子类
		Error     错误
		Exception 异常

2. Throwable 核心方法

构造方法相关:
	Throwable();
		创建 Throwable 对象,Throwable 对象中错误/异常信息为 null
	Throwable(String message);	
		创建 Throwable 对象,Throwable 对象中错误/异常信息为 message

成员方法相关:
	String toString();
    	获取错误/异常的简要信息描述,包括出现错误/异常类型信息。
    	例如:
    		java.lang.ArrayIndexOutOfBoundsException:10
	String getMessage();
		仅获取当前错误/异常中存储的异常信息
	void printStackTrace();
		在控制台展示错误的前因后果,红色字体!!!
package com.qfedu.a_throwable;

/*
 * Throwable 类
 * 代码中出现错误/异常 JVM会自动选择创建对应类型的错误/异常
 */
public class Demo1 {
	public static void main(String[] args) {
		Throwable throwable = new Throwable("有啥别有病,没啥别没钱");
		
		// System.out.println("getMessage : " + throwable.getMessage());
		// System.out.println("toString : " + throwable.toString());
		// throwable.printStackTrace();
	
		test();
		
	}
	
	private static void test() {
		Throwable throwable = new Throwable("异常演示");
		
		throwable.printStackTrace();
	}
}

3. 异常和错误的区别

异常:
	Exception
	车小剐小蹭 异常,可以维修!!!
	车有大故障!!!街边的修理厂,不行,修不了,你可以考虑去4S
		捕获
		抛出
错误:
	Error
		"720" 你的车在地下车库三层,你的车距离水面以上有将近15米,泡了一个半月。
		车直接报废!!!

最大区别就是错误和异常类型结尾单词不同!!!

4. 异常处理两种形式

4.1 捕获异常
格式:
	try {
		// 有可能出现异常的代码 JVM会自动创建对应异常类型,同时提供必要的异常信息
	} catch(异常类型对象1) {
		// 针对当前异常类型的处理方式
	} catch(异常类型对象2) {
		// 针对当前异常类型的处理方式
	}
	
	try {
	
	} catch() {
	
	} finally {
	
	}

package com.qfedu.a_throwable;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/*
 * 文件操作演示异常问题
 * 
 * FileNotFoundException 文件未找到!!!
 */
public class Demo2 {
	public static void main(String[] args) {
		
		try {
			/*
			 * Unhandled exception type FileNotFoundException 
			 * 未处理异常,异常类型为 FileNotFoundException 文件未找到异常
			 * 
			 * Ctrl + 1 快速修复
			 * 		surround with try/catch
			 */
			FileInputStream fis = new FileInputStream("G:/aaa/1.txt");
			
			/*
			 * Unhandled exception type SQLException 
			 * 未处理异常,异常类型为 SQLException 数据库异常
			 */
			Connection connection = DriverManager.getConnection(null);
		} catch (FileNotFoundException e) {
			// 针对于文件未找到异常情况处理
			System.out.println("日志记录:");
			e.printStackTrace();
		} catch (SQLException e) {
			// 针对 SQL 数据库异常处理
			System.out.println("日志记录:");
			e.printStackTrace();
		}
		
		System.out.println("代码继续执行.....");
	}
}
1. 在 try 大括号是有可能出现异常的代码
2. 代码如果有异常存在,JVM会在运行阶段创建对应异常对象,保留必要信息,可以提供给 catch 块捕获操作
3. 在 catch 小括号中是针对于异常的处理类型
4. JDK 1.8 中允许出现一个 catch 块同时捕获多个异常,使用 位或(二进制运算符) |
	案例
		catch (FileNotFoundException | SQLException e) 
5. 在 catch 块是针对当前异常的处理方式,后期可以进行日志记录,消息记录,转发给其他程序,提供给用户一定的提示页面
6. 如果代码执行 try catch 获取异常之后,JVM 认为当前程序中没有异常,代码可以从 catch 块之后继续执行。
4.2 抛出异常
关键字
	throw 在方法内部指定条件下,抛出异常对象!!!
	throws 在方法声明位置,告知调用者当前方法有哪些异常抛出!!!
package com.qfedu.a_throwable;

import java.io.FileNotFoundException;
import java.sql.SQLException;

public class Demo4 {
	public static void main(String[] args) throws FileNotFoundException, SQLException {
		
		// 调用带有异常抛出的方法,第一种方式,捕获异常
		try {
			test("111", "222");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// 调用带有异常抛出的方法,第二种方式,捕获异常 按照 JDK 1.8 规则可以用一个 catch 利用【位或】处理多个异常
		try {
			test("111", "222");
		} catch (FileNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// 调用带有异常抛出的方法,第三种方式 继续抛出异常
		test("111", "222");
	}
	
	/*
	 * @throws 文档注释中用于提示用户当前方法有哪些异常抛出
	 */
	/**
	 * 测试方法
	 * 
	 * @param fileName 文件名称
	 * @throws FileNotFoundException 文件未找到异常
	 * @throws SQLException          SQL异常
	 */
	public static void test(String fileName, String sql) throws FileNotFoundException, SQLException {
		// 如果文件名不合法,抛出 FileNotFoundException 文件未找到异常!
		if (null == fileName) {
			/*
			 * 抛出异常,当前文件未找到 
			 * throw 方法内部抛出异常关键字
			 * new FileNotFoundException("给予方法文件名称不合法!");
			 * 			创建了一个 FileNotFoundException 异常对象,同时给予必要的异常信息 message ==> "给予方法文件名称不合法!"
			 * 
			 * Unhandled exception type FileNotFoundException
			 * 未处理异常,异常类型 FileNotFoundException
			 */
			throw new FileNotFoundException("给予方法文件名称不合法!");
		}
		
		if (null == sql) {			
			throw new SQLException("SQL异常");
		}
	}
}
4.3 抛出和捕获的选择

5. 编译时异常和运行时异常

package com.qfedu.a_throwable;

import java.sql.SQLException;

public class Demo5 {
	public static void main(String[] args) {
		
	}
	
	/*
	 * JVM虚拟机针对于异常类型进行了分类
	 * 		1. 编译时异常
	 * 			在代码编译阶段对异常进行抛出或者捕获处理,解决方法中出现的异常问题 
	 * 		2. 运行时异常
	 * 			JVM针对于运行时异常有一定的处置方式,同时这一类异常较为普遍
	 * 			例如:
	 * 				ArrayIndexOutOfBoundsException 数组下标越界异常
	 * 				NullPointerException 空指针异常
	 * 				StringIndexOutOfBoundsException 字符串下标越级异常
	 */
	public static void test() throws SQLException {
//		throw new ArrayIndexOutOfBoundsException("数组下标越级异常");
		throw new SQLException("SQL语句异常");
	}
}
posted @ 2022-05-15 23:08  qtyanan  阅读(65)  评论(0编辑  收藏  举报