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的使用
•自定义异常的编写和使用
目录
相关文章
|
5天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
|
5天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑】设计模式——原型模式
对比原型模式和传统方式的实现思路、代码方案、优缺点,阐述原型模式的使用场景,以及深拷贝、浅拷贝等相关概念,并扩展原型模式在Spring源码中的应用。
【Java笔记+踩坑】设计模式——原型模式
|
2天前
|
安全 Java 开发者
Java中的异常处理:从基础到高级
【9月更文挑战第16天】在Java的世界里,异常处理是代码的守护神,它确保了程序的健壮性和稳定性。本文将带你深入理解Java异常处理的机制,从简单的try-catch块到复杂的自定义异常和finally语句的使用。我们将通过实际代码示例探索如何有效地捕获和处理异常,以及如何设计异常安全的应用。无论你是Java新手还是有经验的开发者,这篇文章都将提供有价值的见解和技巧,帮助你提升代码质量和编程技能。
13 8
|
2天前
|
Java 程序员 开发者
Java中的异常处理机制深度解析
本文旨在深入探讨Java中异常处理的核心概念与实际应用,通过剖析异常的本质、分类、捕获及处理方法,揭示其在程序设计中的关键作用。不同于常规摘要,本文将直接切入主题,以简明扼要的方式概述异常处理的重要性及其在Java编程中的应用策略,引导读者快速把握异常处理的精髓。
|
1天前
|
Java 程序员 UED
掌握Java中的异常处理:从基础到进阶
【9月更文挑战第17天】在Java的世界里,异常处理是每个程序员必须精通的技能。就像驾驶一艘船穿越变幻莫测的海洋,了解如何应对风暴(异常)是确保航行顺利的关键。本文将引导你从理解异常的本质开始,逐步深入到高级处理技巧,让你的代码更加健壮和可靠。准备好,让我们启航,探索Java异常处理的奥秘!
10 4
|
4天前
|
Java 开发者
Java中的异常处理机制
本文将深入探讨Java中异常处理的基本概念和机制,包括try-catch-finally块、throws关键字以及自定义异常类的使用方法。我们将通过实例演示如何在Java程序中有效地捕获和处理异常,确保程序的健壮性和稳定性。无论您是Java编程的初学者还是有一定经验的开发者,本文都能为您提供有价值的参考。
|
2天前
|
Java 编译器 开发者
Java中的异常处理机制:从基础到高级应用
在Java编程中,异常处理是一个至关重要的部分,它帮助开发者处理运行时错误,确保程序的鲁棒性和可靠性。本文将深入探讨Java异常处理的基础和高级应用,包括异常的分类、捕获和处理方法,以及如何使用自定义异常和异常链。通过实际案例,我们将展示如何有效利用Java的异常处理机制来提升代码质量。
|
5天前
|
Java 开发者
深入解析Java中的异常处理机制
本文将深入探讨Java中异常处理的核心概念和实际应用,包括异常的分类、捕获、处理以及最佳实践。我们将通过具体示例展示如何有效使用try-catch块、throws关键字和自定义异常类,以帮助读者更好地理解和应用Java异常处理机制。
10 1
|
5天前
|
Java 数据库连接 开发者
Java中的异常处理机制:理解与应用
在Java编程中,异常处理是一个核心概念,它允许程序在遇到错误时优雅地恢复或终止。本文将深入探讨Java的异常处理机制,包括异常的分类、如何正确使用try-catch-finally块以及throw关键字。我们将通过实例来说明如何在Java应用程序中有效地捕获和处理异常,以确保程序的健壮性和稳定性。
|
5天前
|
Java 程序员 开发者
Java中的异常处理机制深度解析
本文旨在深入探讨Java中异常处理的机制,包括异常的分类、如何捕获和处理异常,以及自定义异常的最佳实践。通过实例讲解,帮助读者更好地理解如何在Java编程中有效管理和利用异常处理来提高代码的健壮性和可维护性。