`
passion99
  • 浏览: 12741 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java异常处理Exception的一点体会

    博客分类:
  • JAVA
 
阅读更多

Java基础之异常处理Exception的一点体会

一、异常的结构划分

所有异常都继承于Throwable类,Throwable有两大子类:

1、Error类,无法捕获的异常,常见的有内存溢出等系统性错误;

2、Exception,分为检查异常和非检查异常,检查异常指编译器可以识别、发现,强制程序猿进行处理的异常,常见的有FileNotFound等;非检查异常也称运行时异常,均为RuntimeException的派生类,编译器不能识别,自然不会强制要求程序猿进行异常处理。

二、异常处理语句throws/throw、try/catch/finally

throws: 用于函数声明可能抛出的异常,将异常传播给调用者(前提:内部没有做catch捕获处理);

throw :抛出异常实例,一个函数内抛出了异常实例,要么自身catch捕获处理,要么throws传播给调用者处理;

finally :无论是否抛出异常,finally语句总是执行。

throws-throw和throw-try/catch的区别:前者指抛出了异常,未捕获,阻塞了后面的语句的执行;而try/catch后的语句是可以正常执行的。

public class ExceptionTest {

   public static void display(int num) throws Exception{
       //1、一个函数内抛出了异常实例,
       //要么使用throws抛出交由调用者处理,要么自己catch捕获处理
       if(num>9){
           try{  
            throw new Exception("num大于9");
       }catch(Exception e){  //2、自身捕获处理
           e.printStackTrace();
       }
       }
   }

public static void main(String[] args){

            try {
                ExceptionTest.display(56);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                System.out.println("第一个catch一旦捕获后,之后的catch不执行"); //display()方法已捕获,此处不执行
                e.printStackTrace();
            }
            finally{
                System.out.println("虽然此处并未捕获异常,finally仍然执行");
            }

  }

}

输出:

java.lang.Exception: num大于9
    at exceptionPackage.ExceptionTest.display(ExceptionTest.java:9)
    at exceptionPackage.ExceptionTest.main(ExceptionTest.java:19)
虽然此处并未捕获异常,finally仍然执行

 

三、异常链传播

假设调用关系:

method3调用method2,method2调用method1,一旦method1发生异常,会将异常向上层传播,直到遇到catch捕获处理语句,若无处理语句,将由调用线程抛出给JVM。

//method2处理异常,停止向上传播

package exceptionPackage;

public class ExceptionTest {
    public static void method1() throws Exception{
        throw new Exception("method1 抛出异常");
    }
    public static void method2() throws Exception {
        try{
        ExceptionTest.method1();
        }
        catch(Exception e){
            e.printStackTrace();
            System.out.println("method2处理了异常,停止了本次异常的传播.");
        }
    }
    public static void method3() throws Exception{
//        try {
            ExceptionTest.method2();
/*        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println("method3处理异常");
        }*/
    }

    public static void main(String[] args) throws Exception {
            ExceptionTest.method3();
    }
}

输出:

java.lang.Exception: method1 抛出异常
    at exceptionPackage.ExceptionTest.method1(ExceptionTest.java:5)
    at exceptionPackage.ExceptionTest.method2(ExceptionTest.java:9)
    at exceptionPackage.ExceptionTest.method3(ExceptionTest.java:18)
    at exceptionPackage.ExceptionTest.main(ExceptionTest.java:26)
method2处理了异常,停止了本次异常的传播.

//异常一直传播到JVM

package exceptionPackage;

public class ExceptionTest {
    public static void method1() throws Exception{
        throw new Exception("method1 抛出异常");
    }
    public static void method2() throws Exception {
    //    try{
        ExceptionTest.method1();
    //    }
    /*    catch(Exception e){
            e.printStackTrace();
            System.out.println("method2处理了异常,停止了本次异常的传播.");
        }*/
    }
    public static void method3() throws Exception{
//        try {
            ExceptionTest.method2();
/*        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println("method3处理异常");
        }*/
    }

    public static void main(String[] args) throws Exception {
            ExceptionTest.method3();
    }
}

Exception in thread "main" java.lang.Exception: method1 抛出异常
    at exceptionPackage.ExceptionTest.method1(ExceptionTest.java:5)
    at exceptionPackage.ExceptionTest.method2(ExceptionTest.java:9)
    at exceptionPackage.ExceptionTest.method3(ExceptionTest.java:18)
    at exceptionPackage.ExceptionTest.main(ExceptionTest.java:26)

分享到:
评论
1 楼 passion99 2016-11-09  
本人抛砖引玉,欢迎各位Java爱好者根据自己的理解各抒己见!希望结识更多程序猿同道

相关推荐

    Java+银行取款+异常处理+计算器设计+图形用户界面设计+实验报告.pdf

    实验报告涵盖了三个主要的Java编程主题:异常处理、图形用户界面设计和输入输出。以下是这些主题的详细说明: **异常处理** 在Java中,异常处理是程序错误处理的关键部分。异常(Exception)是程序执行期间发生的非...

    JAVA实验02.doc

    实验报告——Java异常处理 实验名称:Java异常处理实验 实验时间:2019年10月1日 学号:未提供 姓名:小雪 班级:未提供 成绩:未提供 一、实验目的 本次实验的主要目的是: 1. 掌握Java程序流程控制的关键元素,...

    错误处理.zip

    本资料“错误处理.zip”包含了作者在学习Java异常处理时的心得体会,结合了《编程简洁之道》的理念,为开发者提供了一份宝贵的参考资料。其中,主要文件“错误处理.pptx”很可能是一个详细的幻灯片教程,涵盖了以下...

    2022年java学习心得体会_JAVA实训的心得.docx

    最后,异常处理是Java编程中必不可少的一部分。通过理解Exception类、try-catch-finally结构,学习者可以编写出健壮的代码,处理运行时可能出现的问题。掌握异常处理机制,不仅能让程序运行更稳定,也是提高编程素质...

    java 心得体会 基础总结

    Java异常处理 - **Exception**: Java中的异常分为两大类:**checked exception** 和 **unchecked exception**。前者需要在方法声明中抛出或捕获,后者则不需要。 - **IllegalStateException**: 当方法调用处于不...

    Java编程体会.pdf

    Java编程体会主要涵盖以下几个关键知识点: 1. **内部类**: - **内部类向上转型**:内部类可以被声明为父类或接口的类型,这使得内部类的实例可以被当作其父类或接口的实例来使用,隐藏其实现细节。 - **局部...

    java组件使用心得(实用)

    如果设置LookAndFeel失败,则可以通过捕获异常并处理它来确保程序能够正常运行。例如,可以在异常发生时退出程序: ```java try { UIManager.setLookAndFeel(...

    一个小的JAVA计算器

    6. **异常处理**:在除法操作中,如果除数为零,JAVA会抛出ArithmeticException。为了使程序更加健壮,可以使用try-catch块来捕获并处理这种异常。 7. **函数封装**:为了保持代码的整洁和可维护性,可以将每个计算...

    JAVA移动营业厅.zip

    1. 异常处理(Exception Handling):用于捕获和处理运行时错误,确保程序的健壮性。在处理用户操作时,可能会遇到如余额不足、输入非法等情况,需要通过异常处理来优雅地处理这些问题。 2. 集合框架(Collections ...

    AIC的Java课程1-6章

     理解和应用Java异常,常用类,IO,集合和多线程等开发技术。  课时安排  总学时:52学时  授课:48学时 (含约20学时实验)  考试:4学时  预备知识  了解和使用操作系统,...

    222019321062074_冯春霖_Lab51

    这篇实验报告是关于Java语言课程中...总的来说,这个实验帮助学生理解了Java异常处理的基本概念和实践操作,包括异常的抛出、捕获、处理,以及finally块的作用,这些都是编写健壮、可维护的Java代码时必不可少的知识。

    简单直观-实战体会Java多线程编程的精要(转)

    本文将基于给定的标题“简单直观-实战体会Java多线程编程的精要”来详细阐述Java多线程的核心概念、实现方式以及实战中的关键点。 一、Java多线程基础 1. **线程定义**:线程是程序执行的最小单位,一个进程中可以...

    猜数字游戏 java

    7. **异常处理(Exception Handling)**:可能包含一些错误处理代码,以防用户输入无效或程序遇到其他意外情况。 学习这个项目,不仅可以理解Java的基本语法和面向对象编程,还可以掌握AWT库的使用,增强控制流程的...

    数据库连接的重要教训

    ### 标签:数据库连接,异常处理,java 这三个标签分别指出了文章讨论的核心方面: 1. **数据库连接**:这是文章的主题,涉及到如何建立应用程序与数据库之间的通信。 2. **异常处理**:在编程过程中,异常处理是...

    JAVA程序设计 课程设计报告.pdf

    通过设计和实现一个计算器,学生能够深入理解Java语言的特点和应用,包括数据类型、逻辑结构、存储结构、算法实现以及异常处理等。 1、设计思路 设计计算器的关键在于构建用户友好的图形用户界面(GUI),这通常...

    Java学习路线.pdf

    - **自定义异常:** 可以根据需要定义自己的异常类,继承自 `Exception` 或其子类。 **4. 多线程编程:** - **线程创建:** 可以通过继承 `Thread` 类或者实现 `Runnable` 接口来创建线程。 - **同步与通信:** ...

    关于编程的心得体会.doc

    作者提到了将Servlet中的`throws Exception`改写为`try-catch`来捕获和处理异常,这是确保程序稳定运行的关键。 5. **调试技巧**:作者学会了通过屏蔽部分代码或使用`System.out.println()`来检查程序错误,这些都...

    各大公司企业真实面试题-阳光海融科技面试题请用Java语言编写完成如下任务的程序代码.doc

    2. **错误二**:`$java test` 这条命令同样抛出了`NoClassDefFoundError`异常,原因是Java类文件的名字应该与类名完全一致且位于正确的目录结构中。 **解决方法**: - 正确的运行命令应该是`$java test`,前提是`...

    JSP编程(绝对经典的jsp编程经验总结)

    - **exception**:捕获未被捕获的异常。 4. **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)** - **EL**:简化JSP中的表达式处理,如获取属性值、执行算术运算等。 - **JSTL**:一...

    自学JDBC数据编程(PDF)

    - **异常处理**:合理地处理SQLException,避免因为异常而导致的程序崩溃。 - **资源释放**:确保所有的`ResultSet`、`Statement`和`Connection`对象在使用完毕后被正确关闭。 通过以上介绍,我们可以看到JDBC不仅...

Global site tag (gtag.js) - Google Analytics