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)
相关推荐
实验报告涵盖了三个主要的Java编程主题:异常处理、图形用户界面设计和输入输出。以下是这些主题的详细说明: **异常处理** 在Java中,异常处理是程序错误处理的关键部分。异常(Exception)是程序执行期间发生的非...
实验报告——Java异常处理 实验名称:Java异常处理实验 实验时间:2019年10月1日 学号:未提供 姓名:小雪 班级:未提供 成绩:未提供 一、实验目的 本次实验的主要目的是: 1. 掌握Java程序流程控制的关键元素,...
本资料“错误处理.zip”包含了作者在学习Java异常处理时的心得体会,结合了《编程简洁之道》的理念,为开发者提供了一份宝贵的参考资料。其中,主要文件“错误处理.pptx”很可能是一个详细的幻灯片教程,涵盖了以下...
最后,异常处理是Java编程中必不可少的一部分。通过理解Exception类、try-catch-finally结构,学习者可以编写出健壮的代码,处理运行时可能出现的问题。掌握异常处理机制,不仅能让程序运行更稳定,也是提高编程素质...
Java异常处理 - **Exception**: Java中的异常分为两大类:**checked exception** 和 **unchecked exception**。前者需要在方法声明中抛出或捕获,后者则不需要。 - **IllegalStateException**: 当方法调用处于不...
Java编程体会主要涵盖以下几个关键知识点: 1. **内部类**: - **内部类向上转型**:内部类可以被声明为父类或接口的类型,这使得内部类的实例可以被当作其父类或接口的实例来使用,隐藏其实现细节。 - **局部...
如果设置LookAndFeel失败,则可以通过捕获异常并处理它来确保程序能够正常运行。例如,可以在异常发生时退出程序: ```java try { UIManager.setLookAndFeel(...
6. **异常处理**:在除法操作中,如果除数为零,JAVA会抛出ArithmeticException。为了使程序更加健壮,可以使用try-catch块来捕获并处理这种异常。 7. **函数封装**:为了保持代码的整洁和可维护性,可以将每个计算...
1. 异常处理(Exception Handling):用于捕获和处理运行时错误,确保程序的健壮性。在处理用户操作时,可能会遇到如余额不足、输入非法等情况,需要通过异常处理来优雅地处理这些问题。 2. 集合框架(Collections ...
理解和应用Java异常,常用类,IO,集合和多线程等开发技术。 课时安排 总学时:52学时 授课:48学时 (含约20学时实验) 考试:4学时 预备知识 了解和使用操作系统,...
这篇实验报告是关于Java语言课程中...总的来说,这个实验帮助学生理解了Java异常处理的基本概念和实践操作,包括异常的抛出、捕获、处理,以及finally块的作用,这些都是编写健壮、可维护的Java代码时必不可少的知识。
本文将基于给定的标题“简单直观-实战体会Java多线程编程的精要”来详细阐述Java多线程的核心概念、实现方式以及实战中的关键点。 一、Java多线程基础 1. **线程定义**:线程是程序执行的最小单位,一个进程中可以...
7. **异常处理(Exception Handling)**:可能包含一些错误处理代码,以防用户输入无效或程序遇到其他意外情况。 学习这个项目,不仅可以理解Java的基本语法和面向对象编程,还可以掌握AWT库的使用,增强控制流程的...
### 标签:数据库连接,异常处理,java 这三个标签分别指出了文章讨论的核心方面: 1. **数据库连接**:这是文章的主题,涉及到如何建立应用程序与数据库之间的通信。 2. **异常处理**:在编程过程中,异常处理是...
通过设计和实现一个计算器,学生能够深入理解Java语言的特点和应用,包括数据类型、逻辑结构、存储结构、算法实现以及异常处理等。 1、设计思路 设计计算器的关键在于构建用户友好的图形用户界面(GUI),这通常...
- **自定义异常:** 可以根据需要定义自己的异常类,继承自 `Exception` 或其子类。 **4. 多线程编程:** - **线程创建:** 可以通过继承 `Thread` 类或者实现 `Runnable` 接口来创建线程。 - **同步与通信:** ...
作者提到了将Servlet中的`throws Exception`改写为`try-catch`来捕获和处理异常,这是确保程序稳定运行的关键。 5. **调试技巧**:作者学会了通过屏蔽部分代码或使用`System.out.println()`来检查程序错误,这些都...
2. **错误二**:`$java test` 这条命令同样抛出了`NoClassDefFoundError`异常,原因是Java类文件的名字应该与类名完全一致且位于正确的目录结构中。 **解决方法**: - 正确的运行命令应该是`$java test`,前提是`...
- **exception**:捕获未被捕获的异常。 4. **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)** - **EL**:简化JSP中的表达式处理,如获取属性值、执行算术运算等。 - **JSTL**:一...
- **异常处理**:合理地处理SQLException,避免因为异常而导致的程序崩溃。 - **资源释放**:确保所有的`ResultSet`、`Statement`和`Connection`对象在使用完毕后被正确关闭。 通过以上介绍,我们可以看到JDBC不仅...