【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();
        }
    }
相关文章
|
9天前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
78 43
Java学习十六—掌握注解:让编程更简单
|
1天前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
|
1天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
4天前
|
存储 安全 Java
如何避免 Java 中的“ArrayStoreException”异常
在Java中,ArrayStoreException异常通常发生在尝试将不兼容的对象存储到泛型数组中时。为了避免这种异常,确保在操作数组时遵循以下几点:1. 使用泛型确保类型安全;2. 避免生类型(raw types)的使用;3. 在添加元素前进行类型检查。通过这些方法,可以有效防止 ArrayStoreException 的发生。
|
5天前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
19 2
|
8天前
|
Java 索引
如何避免在 Java 中引发`StringIndexOutOfBoundsException`异常
在Java中,处理字符串时若访问了不存在的索引,会抛出`StringIndexOutOfBoundsException`异常。为避免此异常,应确保索引值在有效范围内,例如使用`length()`方法检查字符串长度,并确保索引值不小于0且不大于字符串长度减1。
|
10天前
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
|
15天前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
31 0
Java基础异常-自定义异常
Java基础异常-自定义异常
Java基础异常-自定义异常
|
Java 编译器
Java中的异常(抛出异常、自定义异常等)
Java中的异常(抛出异常、自定义异常等)
296 1