Java 异常处理笔记

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的使用

•自定义异常的编写和使用

时间: 2024-11-06 07:24:42

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

【java读书笔记】——java的异常处理

程序在实际环境的运行过程中,安全成为需要首先考虑的重要因素之一,这也是用户和程序员最关心的问题.同时,Java语言健壮性也体现在了能够及时有效地处理程序中的错误,准确的说是Java的异常处理机制为解决安全问题提交了一份满意的答卷. 先从整体上看一下本文要介绍的内容,然后进行详细的分析: 1.异常的概念 异常又称为例外,是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制. 上面的概念是书本上说的,下面我谈一下自己的看法 其实异常处理机制提供了统一的机制来识别和响应程序错误,异常可以为我

Java学习笔记-6.Java异常处理

一.异常简介 1.异常:程序在运行过程中有时会出现一些意外的情况导致程序退出的情况 2.一个异常是由一个对象来表示的,所有的异常都直接或间接地继承自Throwable接口 Throwable接口是类库java.lang包中的一个类,它派生出两个子类:Error 和 Exception (1)Error类主要用来描述一些Java运行时系统内部的错误或资源枯竭导致的错误,此类错误一般由系统进行处理,一般程序本身不需要捕获和处理 (2)Exception类分为RuntimeException异常 和

Java 异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出 java.lang.ArithmeticException 的异常. 异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据. 要打开的文件不存在. 网络通信时连接中断,或者JVM内存溢出. 这些异常有的是因为用户错误引起,

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记16--异常

java学习笔记16--异常 异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失, 所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行. 异常类的继承结构 在整个java的异常结构中,实际上有以下两个最常用的类:Exception.Error,这两个类全都是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try...catch处理. Error:一般指

java学习笔记12--异常处理

java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/arch

java 异常处理(1)

概念 今天在看了JAVA编程思想,特地来做一个小小的总结. 异常的好处就是降低错误代码的复杂度,因为异常机制可以在合适的地方捕获到合适的异常. 基本异常 当异常抛出以后,会使用new对象在堆上创建异常对象.异常处理机制会找到一个合适的切入点去往下面继续执行程序,要不就是这张方式运行,要不就是那种方式允许. o(╯□╰)o. 因为是别的地方接管了异常,哦NO!我的语文是数学老师教的... 异常参数 有多种不同的构造器呢,可以把异常看成一种不同的返回处理机制.关键字throw在不同的情况下有不同的结

Java异常处理终结篇——如何进行Java异常处理设计

有一句这样话:一个衡量Java设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码. 本文主要讨论开发Java程序时,如何设计异常处理的代码,如何时抛异常,捕获到了怎么处理,而不是讲异常处理的机制和原理. 在我自己研究Java异常处理之前,我查过很多资料,翻过很多书藉,试过很多搜索引擎,换过很多英文和中文关键字,但是关于异常处理设计的文章实在太少,在我研究完Java异常处理之后,我面试过很多人,也问过很多老员工,极少碰到对Java异常有研究的人,看来研究这个主题的人很少,本文内

【转】深入理解java异常处理机制

深入理解java异常处理机制 1. 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,"猜猜"它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦. <span style="background-color: rg