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. excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史

    前两天,一个朋友问我,有没有办法在excel里实现一个表单里是原始数据,在另一个表单里显示搜索到的行,搜索关键词可用~分隔开,并把搜索历史记录下来? 我想了想,用vba实现肯定可以啊,但是我又在想,有 ...

  2. LINUX 硬盘分区及文件系统

    一,top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 1. 第一行是任务队列信息 2. 第二.三行为进程和CPU的信息 3. 第 ...

  3. 一步一步实现基于GPU的pathtracer(一):基础

    出于3D计算机图形学和图形渲染方面的个人兴趣,脑子里便萌生出了自己实现一个渲染器的想法,主要是借助pathtracing这种简单的算法,外加GPU加速来实现,同时也希望感兴趣的朋友们能够喜欢,也欢迎提 ...

  4. centos rabbitmq 安装

    MQ 的一个产品[消息队列] rabbitmq 的本质<1>rabbitmq 是用什么语言编写的? => erlang<2>rabbitmq 其实是遵循amqp 协议的一 ...

  5. c++概括

    c++到底是什么样的语言 在过去的几十年,计算机技术的发展令人吃惊,当前的笔记本电脑的计算速度和存储信息的能力超过了20世纪60年代的大型机.20世纪七十年代,C和Pascal语言引领人们进入结构化编 ...

  6. backbone中get和fetch的区别

    我也是刚开始接触backbone.js对于里面的很多东西都看过,但是具体在使用起来还是有很多问题,其中一个就是get和fetch的区别,这个让我很纠结,都是获取模型的数据,干嘛要有两个呢?最近好像弄明 ...

  7. Xamarin App文件(apk)大小和启动时间的影响因素

    Xamarin开发的时候大家都有一个疑问,就是apk文件会不会特别的大,启动会不会很慢.答案是肯定的,文件肯定大,启动肯定会慢,但是具体大多少.具体慢多少,有什么因素可以使apk文件稍微小一点.可以使 ...

  8. (转)Javascript的DOM操作 - 性能优化

    转载:https://my.oschina.net/blogshi/blog/198910 摘要: 想稍微系统的说说对于DOM的操作,把Javascript和jQuery常用操作DOM的内容归纳成思维 ...

  9. 利用Excel做一些简单的数据分析

    先来几个原始数据的截图,如下所示: 示例图就举一个吧,因为这些数据量还挺大的,大概的总结了一下,这下列这几栏中不合规范的数据占比很大: (1)民族(经分析,在此表中所涉及到的民族分别为:汉族,满族,蒙 ...

  10. windows利用iis配置反向代理实现ECS内网互通oss

    IIS实现反向代理 新建两个站点,端口分别使用 80 和 81,在DNS中新建A记录,指向该计算机(10.4.34.41) 配置过程如下: 1.在Windows Server 2012 R2上 安装A ...