JAVA 面向对象(异常,异常处理,自定义异常)

异常

我们写代码是一定会有出错的时候,判断错误的类型,是我们解决它的第一要务。所以我们先来看一下异常。
听名字就知道这个东西是为了处理或者说是为了我们明白出错地方和出错类型的。
由此对它的定义:用于封装错误信息的对象。
那么它的基本构成是什么呢?
在这里插入图片描述

我们可以看到前半部分红字的翻译 “异常的线程main”,后边有java.lang应该是这个类的位置后边是错误信息和错误地点。
当然此处有一个点要注意“Exception”异常的例外的,也就是说这个异常的事情是可以修复的。而一旦此处变为"Error"那么就预示着出现了不可以修复的错误(程序逻辑错误)。

异常继承结构

在这里插入图片描述

运行时异常

RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等, 这些异常是不检查异常(可处理异常),程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

非运行时异常

RuntimeException以外的异常,类型上都属于Exception类及其子类, 从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过,如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

异常的处理

我们采用两种方式来进行异常处理捕获和向上抛出。

捕获
try{
    需要捕获的代码(可能出现异常的代码)
}catch(异常类型  异常名){
    处理方案
}finally {
解决问题后,需要重新执行的代码  
}

我们举个例子:

public class yichang {
	public static void main(String[] args) {
		int x=1;
		int y =new Scanner(System.in).nextInt();
		try {
			System.out.println(x/y);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("y不能为0");
		}
	}
}

这个异常其实就属于运行时异常修饰词是Exception。
同时请注意
catch作为捕获错误,错误种类不同,捕获后补救的措施自然也不一样,所以catch可以有多个
finall作为仅仅是一个解决错误后是否需要回去执行的代码,自然只能有一个,并且不想重新执行刚开始错误的那段代码代码该关键字可以不写。

向上抛出

在感觉会出问题的方法后加入:throws 异常类型
举个例子:

public class yichang {
 void play(int y)throws Exception {
		if (y!=0) {
			throw new Exception("y!=0");
		}
	}
	public static void main(String[] args) throws Exception
	{		
		int y = new Scanner(System.in).nextInt();
		yichang y1 = new yichang();
		y1.play(y);
	}
}

我们定义一个当输入的y不是0的时候输出异常,那么我们看如果我们输入一个1会发生什么
在这里插入图片描述
我们看到这个错误被发现后,我们会把它发给main方法(调用它的方法)去解决,结果是解决不了,自然就出错了。

这个时候我们可能会想如果这个问题无法解决那么我要它何用,别慌

public class yichang {
	
 void play(int y)throws Exception {
		if (y!=0) {
			throw new Exception("y!=0");
		}
	}
	public static void main(String[] args) throws Exception
	{		
		int y = new Scanner(System.in).nextInt();
		yichang y1 = new yichang();
		try {
			y1.play(y);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(y);
		}
	}
}

通过这种方式我们可以让调用该方法的方法抓取错误类型,从而补救,这样就不会报错了。

自定义异常

正如我刚刚让y!=0作为异常一样,我们往往可以自己定义异常(现有的异常往往无法具体的表示出我们的错误)
此处我就不过多赘述了,代码如下:

public class yichang {
	
 void play(int y)throws Exception {
		if (y!=0) {
			throw new Exception("y!=0");
		}
	}
	public static void main(String[] args) throws Exception
	{		
		int y = new Scanner(System.in).nextInt();
		yichang y1 = new yichang();
		y1.play(y);
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值