一、    异常的概念:
  若程序都按我们事先设定的计划运行为正常执行,但通常会出现我们事先预料之外的其他情况,称为程序发生异常,
  在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加斜杠提示生成。

java oop第06章_异常处理的更多相关文章

  1. Java oop 第13章_多线程

    第13章_多线程 一.   多线程相关的概念:  程序:由某种编程语言开发可执行某些功能的代码组合,它是静态的概念.   进程:当程序被执行时的过程可以理解为讲程序从外存调入内存的过程,会为每一个程序 ...

  2. java oop第11章_反射、BaseDao的进一步改造

      引言:从Java5开始,Java中引用了一个新的概念反射,当程序运行时,能动态感知到程序中拥有的所以信息,这个获取信息的过程是采用反射机制来完成. 一.       Class类: Class类用 ...

  3. java oop第07章_集合框架

    一. 什么是集合: 在Java中提供了一些可以保存同一数据类型的数据集称为集合,就是规定了一些集合的规范(接口.抽象类.实现类)及方法, 方便我们程序在保存数据时进行增.删.改.查操作,编程更加高效. ...

  4. Java oop第05章_多态、接口

    一. 为什么需要接口? Java中当一个类继承父类时,最多也只能继承一个父类,扩展性会受到一定的限制,为了弥补这一缺陷,Java又提供了一种新的引用数据类型分类,叫接口. 一个类只能继承一个父类,但可 ...

  5. java OOP第03章_继承、抽象类和抽象方法

    一. 为什么需要继承: 若多个类中都需要一些属性和方法,那么就可以将属性和方法抽取到一个父类中,需要的子类可以通过extends关键字去继承这个父类后拥有相应的属性和方法. 类.数组.方法----引用 ...

  6. java oop第09章_JDBC02(CRUD操作)

    第09章_JDBC02(CRUD操作) CRUD(CREATE . RETIVE . UPDATE . DELETE)增删改查. DAO中会提供一些CRUD操作方法,调用者可以通过调用这些方法完成相应 ...

  7. Java OOP——第五章 异常

    1. 尝试通过if-else来解决异常问题: Eg: public class Test2 {       public static void main(String[] args) {       ...

  8. java oop第15章_Socket网络编程

    一.   TCP/IP协议(Transmission Control Protocol/Internet Protocol)传输控制协议/Internet协议,是通信领域的基础.核心协议, 其他的协议 ...

  9. java oop第14章_Swing(Java界面设计)

    一.   Swing相关的概念: 1.  GUI:(Graphical User Interface):图形化用户界面,通过图形化的方式提供与用户交互的平台,向用户展示信息.收集用户提交的数据. 2. ...

随机推荐

  1. 在jeecg中如何配置多对一和多对多的关系

    多对多: mappedBy指的是当前的类对应的表, cascade属性的可能值有 all: 所有情况下均进行关联操作,即save-update和delete. none: 所有情况下均不进行关联操作. ...

  2. jeecg随笔-3.X的生成后配置

    生成后按以上步骤进行配置即可.

  3. 2、Locust压力测试 实战

    创建测试脚本 创建Test()类继承TaskSet类 创建beigong() 方法表示一个行为,访问北弓官网首页.用@task() 装饰该方法为一个任务.1表示一个Locust实例被挑选执行的权重,数 ...

  4. Xen的半虚拟化(Paravirtualization)

    三个特权级 IA-32体系提供了4个特权级别,正常情况下只用了2个, 操作系统运行在Ring 0,而应用程序运行在Ring 3. Xen让自己运行在Ring 0, 而操作系统运行在Ring 1, 应用 ...

  5. 关于Swagger @ApiModel 返回内容注释不显示问题

    今天做了一天@ApiModel希望Swagger生成的文档出现返回的内容注释,发现需要用到@ApiModel注解到你需要返回的类上 @ApiModelProperty作为字段的描述 例如  之后文档还 ...

  6. DDOS到底是什么,怎么预防,看看就明白了

    可怕的DDOS怎么预防 分布式拒绝服务(DDoS: distributed denial-of-service)攻击是恶意破坏目标服务器.服务或网络的正常通信量的企图,其方法是用大量Internet通 ...

  7. keep-alive用法及(activated,deactivated生命周期)

    <template> <div id="app"> <!-- <img src="./assets/logo.png"> ...

  8. Mac电脑最常见的办公软件是什么?Notion for Mac多功能办公笔记软件使用方法

    Notion for Mac是一款最新的高效率.办公类软件,相信许多用户在办公的时候需要打开特别多的在线工具,譬如Google Drive.Dropbox Paper.Confluence.GitHu ...

  9. Delphi 日期函数列表

    引用单元 :DateUtils CompareDate 比较两个日期时间值日期部分的大小CompareDateTime 比较两个日期时间值的大小CompareTime 比较两个日期时间值时间部分的大小 ...

  10. 记录下工作中用到的Linux命令

    ---恢复内容开始--- 常用的Linux命令以下命令在博主的开发中经常使用,因此在此做一记录,以做备忘! 1.查看java进程ps -ef|grep javaps aux|grep java lso ...