异常专题总结

生活中和程序中都有异常,它们有很多的共同点,唯一一个特别相似的就是给人们带来很多的烦恼,但是异常是不可避免的,下面来举例一下。比如:平时8点10分上课,老师都会7.50之前到达教师,有一次,老师迟到了,8.20才到的教室,这就是出现了异常。

而程序中也有许许多多的异常,没有一个程序说是完美的,一点隐藏的异常都没有。

异常的父类、超类:Throwable(可抛出的,一切错误或异常的父类位于java.lang包中)

概念:程序在运行过程中出现的特殊情况

异常处理的必须性:任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确处理,则可能导致程序的中断,造成不必要的损失

Throwable子类:Error和Exception

 

Error
JVM、硬件、执行逻辑错误,不能手动处理

 

Exception
程序在运行和配置中产生的问题,可处理

Exception子类:RuntimeException(运行时异常,可处理,可不处理)、CheckedException(受查异常,必须处理)

异常的产生:

1.自动抛出异常:当程序在运行时遇到不合规范的代码结果时,会产生异常

2.手动抛出异常:语法:throw new 异常类型("实际参数");

3.产生结果异常:相当于遇到return语句,导致程序因异常而终止

异常的传递:

1.异常的传递:按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认异常处理(打印堆栈跟踪信息)

2.受查异常:throws声明异常,修饰在方法参数列表后端

3.运行时异常:因可处理可不处理,无需声明异常

异常的处理:

throws Exception 位于参数后,表示提供异常,一旦提供,不在此处解决异常,向上报告,在调用除解决异常或JVM打印堆栈跟踪信息

常见异常处理结构:

try{}  catch(){}

try{} catch(){}  catch(){}     (父类要在子类的下面,子类顺序无所谓,Exception的同级别的throwable的子类(满足需求才能太添加的)位置在父类前面即可)

try{} catch(){}  finally{}

try{} catch(){}  catch(){}  finally{}

try{} finally{}

多重catch,遵循从子(小)到父(大)的顺序,父类异常在最后。

finally:

无论出不出现异常都会执行finally中的逻辑代码。

 

//核心方法(每个用户都需要使用)5万
try{
    //使用资源对象-->发生了异常
    //发生了异常
}catch(Exception e){
       e.printStackTrace();
}finally{
    //使用完毕,关闭资源
}

 

 

自定义异常:

场景:根据自身的需求去创建异常

要求:需要继承Exception 或 RuntimeException,常用于RuntimeException

public class TestTimeException {
    public static void main(String[] args) {
        Student stu = new Student();
        try {
            stu.setTime(50);
        } catch (TimeException e) {
            System.err.println("程序错误原因:" + e.getMessage());
        }
    }
}
class Student{
    private int time;
    public int getTime() {
        return time;
    }
    public void setTime(int time) throws TimeException {
        if(time > 36){
            throw new TimeException("假期时间过长异常");
        }
        else{
            this.time = time;
        }
    }
}
class TimeException extends Exception{
    public TimeException(String maessage){
        super(maessage);
    }    
}

输出结果:程序错误原因:假期时间过长异常

方法覆盖:

方法名、参数列表、返回值必须和父类相同

子类的访问修饰符符合父类相同或是比父类更宽

子类中的方法,不能抛出比父类更宽泛的异常

下面是可能出现的场景:

//带有异常的方法覆盖
//1.父类中方法声明了异常。子类重写后可声明也可不声明
class Super{
    public void m()throws Exception{}
}
class Sub extends Super{
    public void m(){}
}

 


//2.父类中方法没有声明异常,则子类也不可以声明异常。
class Super{
    public void m(){}
}
class Sub extends Super{
    public void m(){}
}

 


//3.父类中方法声明了异常,子类可以声明的异常与其相等或是其子类
class Super{
    public void m()throws Exception{}
}
class Sub extends Super{
    public void m()throws Exception{}
}
//--------------------------------------------------------------------
class Super{
    public void m()throws Exception{}
}
class Sub extends Super{
    public void m()throws RuntimeException{}
}


//4.子类可以声明比父类更多的异常。必须小于其父类声明的异常
class Super{
    public void m()throws Exception{}
}
class Sub extends Super{
    public void m()throws RuntimeException , InterruptedException ,MimeTypeParseException , IOException{}
}
接口与相似

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
好的,下面是一些异常练习题以及实验总结: 1. 编写一个程序,要求实现两个整数相除的功能,如果分母为0,抛出一个自定义的异常。 ```java class MyException extends Exception { public MyException(String message) { super(message); } } public class Divide { public static void divide(int a, int b) throws MyException { if (b == 0) { throw new MyException("除数不能为0!"); } else { System.out.println(a / b); } } public static void main(String[] args) { try { divide(8, 2); divide(8, 0); } catch (MyException e) { System.out.println(e.getMessage()); } } } ``` 2. 编写一个程序,要求实现对一个数组的操作,如果数组下标越界,抛出一个自定义的异常。 ```java class MyException extends Exception { public MyException(String message) { super(message); } } public class ArrayTest { public static void arrayTest(int[] arr, int index) throws MyException { if (index < 0 || index >= arr.length) { throw new MyException("数组下标越界!"); } else { System.out.println(arr[index]); } } public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; try { arrayTest(arr, 2); arrayTest(arr, 5); } catch (MyException e) { System.out.println(e.getMessage()); } } } ``` 实验总结: 在 Java 中,异常是一种处理错误的机制。当程序出现错误时,异常会被抛出,如果没有被处理,程序就会崩溃。因此,我们需要在程序中使用 try-catch 块来捕获异常并进行处理。同时,Java 也提供了一些标准的异常类,比如 NullPointerException、IndexOutOfBoundsException 等等,我们可以使用这些类来处理常见的异常情况。如果需要自定义异常,可以继承 Exception 类或其子类,并重写构造方法。在处理异常时,我们可以使用 getMessage() 方法来获取异常信息,也可以使用 printStackTrace() 方法来输出异常信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值