异常的概念
异常又叫做例外是一个程序在执行期间发生的事件。他中断了正在执行的程序的正常指令流。为了能够及时有效地处理程序中的运行错误必须使用异常类这样可以让我们的程序有更好的容错性
异常的分类
Thwable:最大的异常java中所有的异常都在这里面
Error:属于严重异常不需要处理比如
堆内存溢出
栈内存异常
Exception:需要我们处理的异常
运行期异常:代码不规范所出现的异常
编译期异常:RuntimeException 编写是自己写的异常必须处理
异常的两种处理方式
捕获并处理try{}catch{}
int [] a = {1,2,3};//此时索引在2
System.out.println(a[3]);
try {//可能会出现异常的代码
System.out.println(a[3]);//此是这里的代码应该会报运行是的索引越界异常
}catch (ArrayIndexOutOfBoundsException e) {//在这里我们使用chtch来捕获异常
e.printStackTrace();//代码快中我们输出如果捕获到异常该做出什么样的行为
}finally {
//这里是必须执行的代码
//一般我们配合流来使用释放资源
}
抛出异常
在方法头部 throws 异常类型
就是将我们的问题抛向调用这个方法的程序让他去解决这个异常一直向上会抛到虚拟机去处理这件事情如果出错就会直接停止运行影响下面的代码我们建议遇到异常直接捕获并处理
public class Fan_fa {
public static int js(int a,int b) throws Myexception{
int he = 0;
if(a<=0 || b<=0) {
throw new Myexception("参数不能小于或等于0");
}else {
int max = a-b>0?(a):(b);
int min = a-b>0?(b):(a);
he = max-min;
}
return he;
}
}
自定义异常
概念
自定义异常类不是系统监测到的异常,而是由用户自己定义的异常。 自定义异常同样需要try-catch-finally语句捕获,但 必须由用户自己抛出异常 (throw new MyException)
1,我们先创建一个异常类并让其你所以要的异常类型的类 extends (Exception/RuntimeException)
2,其次在方法中进行判断满足条件则抛出这个异常 (throw new MyException("你的格式有误"))
抛出异常后我们要进行捕获处理不进行的话在方法头部抛出这个异常(throws 对应的异常类型)
然后谁调用谁就需要解决这个异常
//定义的异常类
public class Myexception extends Exception{
public Myexception() {
super();
}
public Myexception(String message) {
super(message);
}
}
//测试类
public static void main(String[] args){
int js = Fan_fa.js(-1, 0 );
System.out.println(js);
}
//方法
public static int js(int a,int b){
int he = 0;
if(a<=0 || b<=0) {
try {
throw new Myexception("参数不能小于或等于0");//可能出现异常的代码
} catch (Myexception e) {
e.printStackTrace();//捕获到异常后执行的代码
}
}else {
int max = a-b>0?(a):(b);
int min = a-b>0?(b):(a);
he = max-min;
}
return he;
}
try{}chtch{}finally{}总结
finally:表示一定会执行的,可以去掉,一般用来释放资源(之后会学到)。
使用try将可能出现的代码包起来,一旦出现异常就会产生一个异常对象,抓住此异常对象,去catch中匹配,匹配上了
执行catch中的处理方式。
常用处理方式:
1、e.printStackTrace();
2、e.getMessage();
一旦try中的异常在catch中匹配成功,程序就会进入catch中执行异常的处理代码,处理完成就会跳出catch,如果有finally就执行finally中的代码,再继续往下执行,没有finally就直接继续往下执行。
catch中可使用多个,当多个catch中的异常没有父子关系时,则谁在上,谁在下,无所谓。但是
当多个catch中的异常存在父子关系时,则子类异常必须在上,父类异常必须在下,否则会报错。
注意:try中的变量外部不能使用。
try catch finally处理程序,只能保证代码编译时不再出错,运行时还是可能会出错。
最后总结几个问题
1.什么是异常
2.异常分类(结构体系)
3.异常处理方式
4.自定义异常
5.throw和throws的区别?
理解完这几句话你就算是学会异常的使用了