JAVA学习:异常处理


众所周知,我们第一次运行程序时,程序大都不会按我们想象中的那样运行,而是会出现各种各样的错误,我们把其称之为异常。异常发生在程序的执行期间,会中断正在执行的程序的正常指令流。


异常捕捉
异常捕捉由3部分组成:

try{
     //可能发生的异常
}
catch{
       //激发被捕捉的异常
}
finally{
    //执行异常之后的语句
}

try语句中发生异常时,程序会跳转到catch语句块中执行,执行完后会继续运行而不会因为try处的异常而使程序结束。

虽然catch语句块可以为空也可以执行,但如此一旦程序出现了错误,原因就会变得十分难找,所以最好还是加上printStackTrace() 用于输出异常的性质

注意:无论程序中有无异常发生,无论try-catch是否顺利执行,finally语句块都会执行!
以下四种情况除外:
1.在finally语句块中发生异常
2.前面程序中使用了System.exit()退出了程序
3.程序所在线程死亡(暂时不理解)
4.关闭CPU

异常捕捉的例子:


public class Take {
	public static void main(String[] args) {
		try { 
			String str = "Bob";
			System.out.println(str + "年龄是:"); 
			int age = Integer.parseInt("20L"); // 数据类型转换
			System.out.println(age);
		} catch (Exception e) { // catch语句块用来获取异常信息
			e.printStackTrace(); // 输出异常性质
		}
		System.out.println("program over"); // 输出信息
	}
}

编译可以通过,输出如图:
在这里插入图片描述
如果没有异常捕捉,则:


public class Take { 
	public static void main(String[] args) {
			String str = "Bob"; 
			System.out.println(str + "年龄是:"); 
			int age = Integer.parseInt("20L"); // 数据类型转换
			System.out.println(age);
		    System.out.println("program over"); // 输出信息
	}
}

输出如图:
在这里插入图片描述
可以看到System.out.println("program over");语句未被执行


异常抛出
问:什么是抛出异常?
答:如果程序出现了异常,没有办法将具体的异常打印出来,则不做任何处理;程序中断。

如果某个方法发生了异常,但不想在当前方法中处理此异常,则可使用throws 在方法中抛出异常。

public class MyException extends Exception { // 创建自定义异常类
    String message; // 定义String类型变量

    public MyException(String ErrorMessagr) { // 父类方法
        message = ErrorMessagr;
    }

    public String getMessage() { // 覆盖getMessage()方法
        return message;
    }
}

public class Captor {
    static int quotient(int x, int y) throws MyException { 
        // 定义方法抛出异常
        if (y < 0) { // 判断参数是否小于0
            throw new MyException("除数不能是负数"); // 异常信息
        }
        return x / y; // 返回值
    }

    public static void main(String args[]) { // 主方法
        try { // try语句包含可能发生异常的语句
            int result = quotient(3, -1); // 调用方法quotient()
        } catch (MyException e) { // 处理自定义异常
            System.out.println(e.getMessage()); // 输出异常信息
        } catch (ArithmeticException e) { 
            // 处理ArithmeticException异常
            System.out.println("除数不能为0"); // 输出提示信息
        } catch (Exception e) { // 处理其他异常
            System.out.println("程序发生了其他的异常"); // 输出提示信息
        }
    }
}

输出:
除数不能是负数在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值