【JAVA学习之路 | 提高篇】异常的处理(throws)与手动抛出异常(throw)

简介: 【JAVA学习之路 | 提高篇】异常的处理(throws)与手动抛出异常(throw)

1.格式

除方法的声明外,可以使用"throws 异常对象"来处理编译类型异常.

如public void test () throws 异常类型1,异常类型二...{

   //编译时可能产生的异常.

}

2.是否真正处理了异常

(1). 从编译是否能通过的角度来看,看作为给出了要是出现了异常的解决方法,此时编译通过.

(2). 从另个角度来看,该方案只是将异常上抛给了调用者,调用者仍然需要考虑如何解决异常,故该方案并没有实际解决问题.


3.(联动)方法的重写

在方法的重写中,要求子类重写的方法throws的异常类型可以是父类被重写方法的异常类型相同,也可以是其子类.

举例 : IOException是FileNotFoundExcetion的父类.

class abstract Father throws IOException {
 
    public abstract void method() {
 
        //抛出IOException的代码,此处省略
 
}
 
}
 
class Son throws FileNotFountException {
 
    public void method() {
 
        //抛出FileNotFoundException异常的代码,此处省略.
 
}
 
}

父类的引用指向子类的对象,此时编译类型是Person,编译时期p.method()抛出的是IOException异常对象,故catch括号内捕获的是IOException异常对象.但运行阶段调用的是子类的method(),故抛出的是FileNotFoundException异常对象.如果catch语句内为IOException异常对象,相当于IOException e =new FileNotFoundException() ;此时再次体现多态性.如果catch语句中是IOException异常类的父类(如Exception),则违反了多态性.

Father p =new Son();
 
try{
 
    p.method();
 
} catch (IOException e){
 
    System.out.println(e.printStackException);
 
}

4.throw手动抛出异常对象

java中异常对象的生成方式有两种 :

(1). 一种是JVM自动生成.程序运行过程中,JVM检查代码出了问题,针对该代码,在后台自动创建一个对应异常类型的类的异常对象.

(2). 另一种是使用throw手动抛出 : throw new 异常类型(实参列表).

5.使用场景

在实际开发中,如果出现不满足具体场景的代码问题,可以手动throw抛出指定类型的异常.

//test03抛出的异常抛给主函数,此时主函数必须对异常进行捕获
public static void main(String[] args) {
    try {
        test03();
    } catch (Exception e) {
        e.printStackException;
    }
}
 
 
//test01抛出的异常对象抛给了调用者test03
public void test03() throws Exception {
    test01();
}
public void test01() throws Exception {
        //手动抛出异常对象
        throw new Exception();
    }
    //可以try-catch-finally捕获,也可以将异常抛给调用者,
    //调用者要么再抛给调用者,要么try-catch-finally捕获异常
    public void test02() {
        try {
            throw new Exception();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
相关文章
|
3月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
108 1
|
3月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
175 13
|
2天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
33 14
|
5天前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
27 5
|
25天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
33 10
|
28天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
75 4
|
28天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
29 4
|
28天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
52 1
Java基础异常-自定义异常
Java基础异常-自定义异常
Java基础异常-自定义异常
|
Java 编译器
Java中的异常(抛出异常、自定义异常等)
Java中的异常(抛出异常、自定义异常等)
345 1

热门文章

最新文章