异常

@java入门基础
异常
1.什么是异常 :在程序运行的过程中,也会发生各种非正常状况。比如程序运行时磁盘空间不足,网络连接中断,被装载的类不存在。针对这种情况,在Java语言中,引入了异常,以异常类的形式对这些非正常情况进行封装,通过异常处理机制对程序运行时发生的各种问题进行处理;
在Java中提供了大量的异常类,这些类都继承自Java.lang.Throwable类。
Throwable类的继承体系:
在这里插入图片描述
Throwable有两个直接子类Error和Exception,其中Error代表程序中产生的错误,Exception代表程序中产生的异常。

  • Error类为错误类。通常由JVM抛出,程序本身无法修复错误。出现问题后,应该在程序以外查找,解决问题。
  • Exception类代表了标准Java库方法所激发的异常。Exception类还包含运行异常类Runtime_Exception和非运行异常类Non_RuntimeException这两个直接的子类。

Throwable的常用方法
在这里插入图片描述
接下来通过一个案例来认识一下什么是异常;
Example1:

    public class Example1 {
	public static void main(String[] args) {
		int result = divide(4,0);
		System.out.println(result);
	}
    public static int divide(int x,int y) {
    	int result = x/y;
    	return result;
    }
}

运行结果:
在这里插入图片描述
从运行结果看出,程序发生了算数异常(ArithmeticException),这个异常时由于程序中的第3行代码调用divide()方法时传入了参数0,出现错误;在这个异常发生后,程序会立即结束,无法继续向下执行。
2.try…catch和finally

try{
//存放可能出现异常的代码块
}catch(ExceptionType(Exception类及其子类) e){
//对异常进行处理
}

Example2:

public class Example2 {
	public static void main(String[] args) {
		try {
			int result = divide(4,0);
			System.out.println(result);
		}catch(Exception e) {
			System.out.println("捕获的异常信息为:"+e.getMessage());
		}
      System.out.println("程序继续向下执行...");
	}
	public static int divide(int x,int y) {
		int result = x/y;
		return result;
	}
}

运行结果:
在这里插入图片描述
在try代码块中发生被0除的异常,程序会转而执行catch中的代码块,通过调用Exception对象的getMessage()方法,返回异常信息“by zero”。需要注意的是:catch代码块对异常处理完毕后,程序仍会向下执行,而不会异常终止;在try代码块中,发生异常语句后面的代码是不会被执行的;

在程序中,有时候我们希望有些语句无论发生异常都要执行,这是可以在try…catch语句后,加上一个finally代码块;
Example3:

public class Example3 {
	public static void main(String[] args) {
		try {
			int result = divide(4,2);
			System.out.println(result);
		}catch(Exception e) {
			System.out.println("捕获的异常信息为:"+e.getMessage());
			return;
		}finally {
			System.out.println("进入finally代码块");
		}
      System.out.println("程序继续向下执行...");
	}
	public static int divide(int x,int y) {
		int result = x/y;
		return result;
	}
}

运行结果:
在这里插入图片描述
在catch代码块后,加入一个return语句,用于结束当前方法,此时“System.out.println(“程序继续向下执行…”);”不会执行,而finally中的代码块仍会被执行。**不论程序是发生异常还是使用return语句结束,finally中的语句都会被执行。**由于这种特殊性,在程序设计时,经常会在try…catch后使用finally代码块完成必须要做的事,例如释放系统资源。
但是,finally中的代码块在try…catch中执行了System.exit(0)语句时不会执行。
3.throws关键字
在调用别人的方法时,为了判断方法中是否有异常。在Java中允许用throws关键字对外声明该方法有可能发生的异常。
throws关键字声明抛出异常的语法格式:

修饰符 返回值类型 方法名([参数1,参数2…])throws ExceptionType1[,ExceptionType2…]{
}

throws 关键字需要写在方法声明的后面,throws后面需要声明方法中发生异常的类型(抛出一个异常)

Example4:

public class Example4 {
	public static void main(String[] args) {
		try {
			int result = divide(4,2);
			System.out.println(result);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static int divide(int x,int y)throws Exception{
		int result = x/y;
		return result;

运行结果:
在这里插入图片描述
在使用try…catch方法中对divide()方法进行了异常处理,所以程序编译通过。
当在调用divide()方法时,如果不知道怎么处理声明抛出的异常,也可以使用throws关键字继续将异常抛出,但需注意的是,程序一旦发生异常,如果没有被处理,程序就会非正常终止。
4.运行与编译时异常

  • 从继承上来看,只要是继承RunTimeException类的,都是运行时异常,其它为编译时异常。
  • 运行时异常:runtime exception ,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机 接管。
    5.自定义异常
    很多时候项目会出现特有问题,而这些问题并未被java所描述并封装成对象,所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的问题进行自定义异常封装。在Java中要想创建自定义异常,需要继承Throwable或者他的子类Exception。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值