一、    异常的概念:
  若程序都按我们事先设定的计划运行为正常执行,但通常会出现我们事先预料之外的其他情况,称为程序发生异常,
  在java中会对一些可能出现异常的代码进行分类,达到尽量对可能发生的异常进行判断。

二、 异常处理之抛出异常:
  说明:在方法中有代码会出现异常,方法自己不捕获异常,将异常向外抛出,由调用者来处理异常,若所以的调用者都不处理异常,则由JVM最终处理。
  1. throws关键字:声明异常,在方法定义部分使用throws指定方法中可以抛出的异常范围,可以指定多个异常范围,之间使用逗号隔开。
  2. throw关键字:抛出异常,显式抛出某种异常,该异常是方法定义部分声明过的异常范围。
package com.oop.ch06;

import org.junit.Test;

public class ThrowTest {

    @Test
public void test1() throws ClassNotFoundException {
//加载MySQL的驱动:表示当前要去链接MySQL数据库管理系统
//隐式抛出异常:没有手动显式的抛出异常,而是调用方法时抛出异常
Class.forName("com.jdbc.mysql.Driver");
} @Test
public void test2() throws ClassNotFoundException {
//显式抛出异常:通过throw关键字显式的抛出指定范围的异常类型
throw new ClassNotFoundException("抛出类找不到的异常");
}
}

三、    异常处理之捕获异常:
  说明:在方法中有代码会出现异常,方法自己可以通过try…catch…finally捕获并处理异常,调用者就不需要再处理异常。
  1. 语法:
try {
//试图执行的目标代码,其中可能有异常出现
} catch(异常类型 异常对象){
//在try代码块中若出现异常会自动执行的代码块
}finally{
//不管try代码块中是否出现异常都会被执行的代码块
} 2. 举例:com.oop.ch06.TryTest
package com.oop.ch06;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.*;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.junit.Test; /*
* 异常处理之捕获异常:
说明:在方法中有代码会出现异常,方法自己可以通过try…catch…finally捕获并处理异常,调用者就不需要再处理异常。
*/
public class TryTest {
@Test
public void test1() {
//表示加载c:/windows/hh.exe下的文件到内存,等待后续的处理。
try {
InputStream inputStream = new FileInputStream("c:/windows/hhh.exe");
} catch (FileNotFoundException e) { //FileNotFoundException e = new FileNotFoundException();
//若try代码块发生异常,打印堆栈信息
e.printStackTrace();
}
}
@Test
public void test2() {
//调用者就不需要再处理异常
this.test1();
}
@Test
public void test3(){
//加载MySQL的驱动:表示当前要去链接MySQL数据库管理系统
//隐式抛出异常:没有手动显式的抛出异常,而是调用方法时抛出异常
Connection ct = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {
Class.forName("com.jdbc.mysql.Driver");
ct = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/数据库名", "root", "root");
pst = ct.prepareStatement("SELECT * FROM tb_grade WHERE grade_id = ?");
pst.setInt(1, 3);
rs = pst.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
/*
* 通常用于关闭一些打开的资源:IO的资源、SQL的资源。
* 关闭资源的顺序应采用倒叙的方式来关闭:先开的后关,后开的先关
*/
if (rs != null) {
rs.close();
}
if (pst != null) {
pst.close();
}
if (ct != null) {
ct.close();
}
} catch (Exception e2) { }
}
}
}   3. 使用try。。catch。。。finally捕获异常的注意事项:
    a) Catch代码块可以有多个,每个catch代码块可以捕获一种类型的异常,但需要注意:范围小的异常要放置在范围大的异常前面;
        若异常类型之间没有继承关系顺序没有限制。
    b) 可以使用try。。。catch或try。。。finally或try catch finally三种组合的使用方式。
    c) 通常用于关闭一些打开的资源:IO的资源、SQL的资源。
        关闭资源的顺序应采用倒叙的方式来关闭:先开的后关,后开的先关
四、 myeclipse生成try catch finally代码块的三种方式:
  1、 代码本身提示抛出异常时通过IDE工具提供的提示生成。
  2、 选择需要捕获异常的代码=>右键=>surround With =>try catch生成(单个和多个catch)。
  3、 手动输入try,alt加斜杠提示生成。

最新文章

  1. mysql 二进制文件增量备份
  2. [Android] adb 命令 dumpsys activity , 用来看 task 中的activity。 (uninstall virus)
  3. BZOJ-1189 紧急疏散evacuate BFS预处理+最大流+二分判定+神建模!!
  4. Java Day 13
  5. CF Two Buttons (BFS)
  6. Linux学习三部曲(之一)
  7. gshop.data 编辑器通杀版本 支持146-151版本
  8. Android Studio SDK Manager无法正常下载如何设置
  9. Matlab聚类分析[转]
  10. .Net互操作2
  11. sqlserver不能直接create table as select
  12. IOS ARC和非ARC文件混用
  13. 网站Web业务架构从小到大演变
  14. MySQL:表的操作 知识点难点总结:表完整性约束及其他常用知识点二次总结🙄
  15. Python 上下文管理器和else块
  16. ML笔记-sklearn.classification_report
  17. 安装selenium
  18. JavaMap的一些常用方法
  19. vscode之常用快捷键
  20. poj 1164 深度优先搜索模板题

热门文章

  1. 软件测试工程师如何提高提BUG逼格
  2. Bagging vs Boosting vs Stacking
  3. HDU 4109 Instrction Arrangement
  4. 你真的懂return吗?
  5. Install .NET Core Runtime on Linux Ubuntu 16.04 x64
  6. 小白如何在Windows下使用Redis
  7. UTF-8 - ASCII 兼容的多字节 Unicode 编码
  8. linux redis的启动---后台启动
  9. 笔记33 Spring MVC的高级技术——Spring MVC配置的替代方案
  10. 论文阅读笔记:《Interconnected Question Generation with Coreference Alignment and Conversion Flow Modeling》