黑马程序员-Java异常学习

本文深入解析Java中异常处理机制,包括异常的分类、如何处理异常、使用try-catch-finally语句、自定义异常以及使用异常处理的好处。通过具体代码示例,详细展示了如何在Java程序中有效管理和处理异常。

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

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


什么是异常

阻止当前方法的运行或作用域继续执行的问题。Java对出现的问题分成两类进行定义——严重的和不严重,分别通过Exception类、Error类描述了这两中问题。对与严重的问题一般不进行处理。而不严重的Exception一般都编写针对性代码进行处理

怎么处理异常

通过对可能出现异常的代码进行监控,如果出现异常,会生成一个异常对象,异常对象封装了异常事件的信息,并把它交给Java运行时系统,这个过程称为抛出异常,Java运行时系统接收到异常时,寻找能处理这异常的代码并把异常对象交给其处理,这过程称为捕获异常。java有针对异常的语句,try…catch…finally
必须处理和可处理可不处理的异常:RunTimeException类和子类的异常是指在运行期间发生的异常,属于不可查异常。

try catch finally

Java 通过try对可能出现异常的代码进行监控,通过catch对出现异常的时候做出应对措施,通过finally完成一些必要的动作,无论是否发生异常,都会执行。
使用异常处理的好处就是程序出错后不会结束,而是处理异常后继续执行下去。



    public void method()
    {
        try
        {
            可能发生异常的代码
        }catch(Exception ex)
        {
            发生异常后的处理代码,ex是Java异常对象,所有在运行时可能发生的异常都是Exception类的子类
        }

    }

小例子:

import java.util.Scanner;

class exceDemo2
{
public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    System.out.println("请输入被除数");
    int num =0;
    int num2 =0;
    int result =0;
    try
    {

    num = input.nextInt();
    System.out.println("请输入除数");
    num2 = input.nextInt();
    result = num / num2 ;
    }
    catch(Exception ex)
    {
        System.out.println("请输入合法的数字");
        return;
    }
    System.out.println(num+"/"+num2+"="+result);
}
}

捕获多个异常对象

为了能更好的知道程序运行过程中出现异常的类别,可以捕获多个异常对象进行处理,
其中的异常对象的顺序不能颠倒,Exception对象要放在后面。
public void method(){
Scanner input = new Scanner(System.in);

System.out.println("请输入被除数");
int num =0;
int num2 =0;
int result =0;
try
{

num = input.nextInt();
System.out.println("请输入除数");
num2 = input.nextInt();
result = num / num2 ;
}
//出现除数为0的时候
catch(ArithmeticException ex)
{
    System.out.println("被除数不能为0");
    return;
}
//出现输入异常的时候
catch(InputMismatchException ex)
{
    System.out.println("请输入合法的整形值");
}
//出现其他异常,使用异常类进行捕获
catch(Exception ex)
{
    System.out.println("出现异常了");
}
System.out.println(num+"/"+num2+"="+result);
}

finally
写在finally块里面的代码无论异常发不发生都会执行。典型的使用就是在流操作中,在finally中对流进行关闭。

自定义异常
自定义异常类要继承Exception类。自定义异常主要是为了规范错误提示信息。

public class ScoreException extends Exception
{
public ScoreException()
{
    super("数值必须介于0-100之间");
}
public ScoreException(String message)
{
    super(message);
}
}

使用自定义异常,使用throw抛出系统异常实例或自定义异常实例。在可能抛出异常的地方使用throw抛出new出来的自定义异常。

throw new ScoreException();

声明异常
在方法后面加上throws关键字声明该功能有可能会出现异常,调用该方法的方法必须进行捕获。

public void show(Object t) throws NullPointerException{

    if(t ==null)
    {
        throw new NullPointerException();
    }else
    {
    System.out.println("demo_exception");
    }
}

public static void main(String[]args)
{
    try
    {
    }
}

throw和throws的区别
throw用于在代码中抛出异常实例,而throws用在方法后面,声明该方法在执行中可能会抛出异常,让调用该方法的方法要做好异常处理。

public void show(Object t) throws NullPointerException
{...}

throws后面跟着方法可能抛出的异常类,常见的IOException异常。
throw 在代码中抛出异常实例 throw new NullPointerException();

public void show(Object t) throws NullPointerException{

    if(t ==null)
    {
        throw new NullPointerException();
    }else
    {
    System.out.println("demo_exception");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值