java笔记7 异常,以及异常的处理机制

文章详细阐述了Java中的异常处理,包括Error和Exception的区别,异常的分类,如何使用throws声明异常,以及try-catch-finally结构的使用方法。通过实例展示了如何捕获和处理ArithmeticException。强调了finally块的重要性和异常处理的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、throws
1.分类:异常分两种,一种是Error(即系统错误,我们无法处理这种异常);另一种是Exception(是我们可以捕获并处理的异常)。其中Exception又分为两种:
1)RuntimeException的子类异常 ,是我们可以处理也可以不处理的异常
2)其他凡是继承自 Exception 但又不是 RuntimeException子类的异常,我们都必须得捕捉并进行处理

2.throws A的解释:

void f() throws A
{
   .......
}
  • thows A 表示调用 f 方法时 f 方法可能会抛出A类异常,建议调用f方法时最好对f方法可能抛出的A类异常进行捕捉,
  • throws A 不表示f方法一定会抛出A类异常throws A,f方法也可以不抛出A类异常,
  • throws A 不表示调用f方法时,必须的对A异常进行捕捉假设A是RuntimeException子类异常,
  • 由于RuntimeException的子类异常可以处理也可以不处理,所以编译器允许你调用f方法时,对f方法抛出的RuntimeException子类异常不进行处理
  • 最好对throws出的所有异常进行处理,如果一个方法内部已经对A异常进行了处理,则就不要再throws A了

3.异常处理步骤:

try
 {
       可能出现异常的代码块
 }
catch (ExceptionName1 e)
{
       当产生ExceptionName1 异常时的处理措施
}
catch (ExceptionName2 e)
{
       当产生ExceptionName2异常时的处理措施
}
......
finally
{
        无论是否捕捉到异常都必须处理的代码
}

例如:

import java.io.IOException;

class F{
    public void f() throws IOException{
        throw new IOException();  //throw 抛出异常,让调用者来处理
    }
    public void g(){
        throw new ArithmeticException();
    }
}

public class Exp1 {
    public static void main(String[] args) {
        F ff=new F();
        try {
            ff.f();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述
在这里插入图片描述

补充:Finally的作用

  • 无论try所指定的程序块中是否抛出异常,也无论catch语句的异常类型是否与所抛弃的异常的类型一致,finally中的代码一定会得到执行;
  • finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理;
  • 通常在finally语句中可以进行资源的清除工作,如关闭打开的文件、删除临时文件等。

3.处理异常的一些例子:

package com.Tanya;

public class 随便 {
        public static void main(String[] args) {
            A aa=new A();
            ArithmeticException ari=new ArithmeticException();
            //ari.printStackTrace();
            System.out.println(ari);
            try{
                aa.f();
                ari.printStackTrace();
                System.out.println();
            }catch (ArithmeticException e){
                System.out.println();
                System.out.println("捕获成功!");
            }
        }

    }
    class A{
        public static int f(){
            int a=10;
            int b=0;
            System.out.println(a/b);
            return a/b;
        }
    }

在这里插入图片描述

package com.Tanya;

public class 随便 {
        public static void main(String[] args) {
            A aa=new A();
            ArithmeticException ari=new ArithmeticException();
            ari.printStackTrace();
            System.out.println(ari);
            try{
                aa.f();
                ari.printStackTrace();
                System.out.println();
            }catch (ArithmeticException e){
                System.out.println();
                System.out.println("捕获成功!");
            }
        }

    }
    class A{
        public static int f(){
            int a=10;
            int b=0;
            System.out.println(a/b);
            return a/b;
        }
    }

在这里插入图片描述

  • 异常的处理机制(重点
  1. 当Java程序运行时出现问题时,系统会自动检测到该错误,并立即生成一个与该错误对应的异常对象。
  2. 然后把该异常对象提交给Java虚拟机,
  3. Java虚拟机会自动寻找相应的处理代码来处理这个异常,如果没有找到,则由Java虚拟机做一些简单的处理后,程序被强行终止。
  4. 可以自己编写代码来捕捉可能出现的异常,并编写代码来处理相应的异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值