Java程序运行过程中所发生的异常事件可分为两类:

§错误(Error):JVM系统内部错误、资源耗尽等严重情况
§违例(Exception): 其它因编程错误或偶然的外在因素导致的一般性问题,例如:
    –对负数开平方根
    –空指针访问
    –试图读取不存在的文件
    –网络连接中断
例:
public class ExceptionTest01{
public static void main(String[] args) {
String friends[]={"lisa","bily","kessy"};
for(int i=0;i<5;i++) {
System.out.println(friends[i]);
}
System.out.println("\nthis is the end");
}
}

public class ExceptionTest02 {

      public static void main(String[] args){
String user[] = {"lilei","lucy","lisa"};
try{
for(int i=0; i<5; i++) {
System.out.println(user[i]);
} }catch(java.lang.ArrayIndexOutOfBoundsException e){
System.out.println("异常:" + e.getMessage());
} System.out.println("程序结束!");
}
}

异常处理块的一般形式

try{
// 要监控错误的代码块
methodGeneratingException();
} catch (Exception e) {
// Exception e 的异常处理程序
} finally{
// 在 try 结束前要执行的代码块
cleanup();
}
•Throwable 具有两个子类,它们是
–Exception:处理用户程序应当捕获的异常情况
–Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们 

常见  异常类 

§RuntimeException
–错误的类型转换
–数组下标越界
–空指针访问
§IOExeption
–从一个不存在的文件中读取数据
–越过文件结尾继续读取
–连接一个不存在的URL

 

捕获异常

捕获异常是通过try-catch-finally语句实现的。

try{

  ......  //可能产生异常的代码

}catch( ExceptionName1 e ){

  ......  //当产生ExceptionName1型异常时的处置措施

}catch( ExceptionName2 e ){

......    //当产生ExceptionName2型异常时的处置措施

}  {finally{

......   //无条件执行的语句

  }

  }
§try

捕获异常的第一步是用try{…}语句块选定捕获异常的范围。

§catch

在catch语句块中是对异常对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。

–getMessage( ) 方法,用来得到有关异常事件的信息
–printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。
当使用多重catch的时候  越外面的 级别越高 
如:
    try { …… }

    catch(ClassCastException ex){ …… }

    catch(NumberFormatException ex){ …… }

    catch(Exception ex){ …… }  // 此句必须放在最后!
 
§finally
–捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。
–finally语句是任选的
 
  try {
startFaucet();
waterLawn();
}
catch (BrokenPipeException e){
logProblem();
}
finally {
stopFaucet();
}

 声明抛弃异常

§声明抛弃异常是Java中处理异常的第二种方式
–如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应声明抛弃异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
public void readFile(String file)     throws IOException {
……
// 读文件的操作可能产生IOException类型的异常
FileInputStream fis = new FileInputStream(file);
..……
}

重写方法声明抛弃异常原则

•重写方法不能抛出比被重写方法范围更大的异常类型
    public class A {
public void methodA() throws IOException {
……
}
}
public class B1 extends TestA {
public void methodA() throws FileNotFoundException {
……
}
}
public class B2 extends TestA {
public void methodA() throws Exception {
……
}
}

人工抛出异常

§Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出
–首先要生成异常对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。

IOException e =new IOException();

throw e;

–可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:

throw new String("want to throw");

•用户自定义异常类MyException,用于描述数据取值范围错误信息:
class MyException extends Exception {
private int idnumber;
public MyException(String message, int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}

 用户自定义异常类

public class ExceptionTest05{
public void regist(int num) throws MyException {
if (num < 0) {
throw new MyException("人数为负值,不合理",3);
}
System.out.println("登记人数" + num);
}
public void manager() {
try {
regist(100);
} catch (MyException e) {
System.out.print("登记失败,出错种类"+e.getId()));
}
System.out.print("本次登记操作结束");
}
public static void main(String args[]){
ExceptionTest05 t = new ExceptionTest05();
t.manager();
}
}
•异常是运行时发生的错误
•可以使用 try、catch、throw、throws 和 finally 来管理 Java 异常处理。要监控的程序语句包含在 try 块内catch 块中的代码用于捕获和处理异常。在方法返回之前绝对必须执行的代码应放置在 finally 块中
•要手动引发异常,使用关键字 throw。任何被抛到方法外部的异常都必须用 throws 子句指定
•多重catch 和嵌套try-catch的使用
•自定义异常的编写和使用
 

Java 异常处理笔记的更多相关文章

  1. Java学习笔记(五):异常处理

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.而在我们的程序中需要对这些异常进行捕获和处理来避免程序卡死等情况. Ja ...

  2. Java面向对象笔记 • 【第5章 异常处理】

    全部章节   >>>> 本章目录 5.1 异常概述 5.1.1 程序中的异常 5.1.2 异常分类 5.1.3 实践练习 5.2 try-catch处理异常 5.2.2 使用f ...

  3. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  4. 瘋耔java语言笔记

    一◐ java概述                                                                                        1.1 ...

  5. java异常处理的设计

    有一句这样话:一个衡量Java设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码. 本文主要讨论开发Java程序时,如何设计异常处理的代码,如何时抛异常,捕获到了怎么处理,而不是讲 ...

  6. 20145330第五周《Java学习笔记》

    20145330第五周<Java学习笔记> 这一周又是紧张的一周. 语法与继承架构 Java中所有错误都会打包为对象可以尝试try.catch代表错误的对象后做一些处理. 使用try.ca ...

  7. Thinking In Java读书笔记--对象导论

    Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...

  8. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  9. Java异常处理总结

    题记:本文为工作十年回顾总结系列之Java语言之异常处理篇,主要内容为<Thinking in Java >第四版和<Effective Java>第二版的阅读笔记,网上流传的 ...

随机推荐

  1. python+unittest框架整理(一点点学习前辈们的封装思路,一点点成长。。。)

    预期框架整理目标: 1.单个用例维护在单个.py文件中可单个执行,也可批量生成组件批量执行 2.对定位参数,定位方法,业务功能脚本,用例脚本,用例批量执行脚本,常用常量进行分层独立,各自维护在单独的. ...

  2. js实现导航菜单栏随着屏幕的滚动进行滚动的效果

    $(window).scroll(function () { var $nav = $(".floatingMenu ul li"), length = $nav.length-1 ...

  3. jQuery杂项方法

    前面的话 杂项方法其实也是工具类方法,但由于其不是定义在jQuery构造函数上的方法,所以不能称为工具方法.本文将详细介绍jQuery中的杂项方法 数据操作 [data()] 该方法用于在匹配元素上存 ...

  4. Discuz插件开发之全站论坛目录结构注释

    基本上新版本的discuzX系列目录结构都差不多,刚好大神整理出来了,就拿来看吧. |-- /api        uc.php   UCenter通信文件        |-- /api/addon ...

  5. 在ROS中使用花生壳的域名服务

    ROS功能强大,也比较复杂,各个版本的脚本可能也大同小异,我现在使用的是6.37.3的版本. 添加Script 进入菜单System->Scripts. 点击加号,像图中这样,添加代码,我给这段 ...

  6. Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法

    有时候我们的Macbook电脑运行某个程序卡在那里耗了很长时间,程序本身有可能提供了取消按钮,点了也没有反应,这时候我们就很想强制关闭它了,那么Macbook怎么强制关闭后台运行的程序呢?下面完美小编 ...

  7. jQuery 提供多个与 AJAX 有关的方法。

    jQuery 提供多个与 AJAX 有关的方法. 通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本.HTML.XML 或 JSON - ...

  8. XML配置文件中写版本号.xsd和不写版本号的区别

    如果写版本号则默认从网上下载并指定最新版本,如果不写版本号则默认从本地下载并使用最新版本.

  9. 处理jQuery append加入的元素 绑定事件无效的方法

    通过jquery append(或者before.after,一样)新添加进网页的元素,常用的事件不能触发,比如:append了id 为 abc 的元素,那么 $(#abc).click(functi ...

  10. 配置lnmp

    ===================准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state –state NEW ...