一般不对error错误进行处理
常见异常举例:
空指针访问异常,NullPointerException
类型强制转换异常,ClassCastException
数组角标越界,ArrayIndexOutOfBoundsException
字符串越界,StringIndexOutOfException
数值格式异常(字符串"abc"转化为int),NumberFormatException
输入不匹配,InputMismatchException
算术异常(除0),ArithmeticException读取的文件不存在,FileNotFoundException
网络连接中断
1. try - catch - finally
try{
可能出现的异常
某一句出现异常之后直接catch,代码块内报错下面的语句不执行
try内创建的数据是局部变量
}
catch(异常类型1 e){
处理异常方式
System.out.println(e.getMessage()); 获得简单的报错信息,返回结果为string
e.printStackTrace(); 获得详细的报错信息。直接写这个语句就行,不用主动打印
}
catch(异常类型2 变量名2){
处理异常方式......
}
finally{
finally可以不写
一定会执行的代码,即使catch内部有报错
}
2. throws + 异常类型
在方法头部定义的
并没有处理异常,只是将异常抛给了自己的上级(谁调用的抛给谁),所以说总有一个地方要try-catch
异常代码后面的代码不会被执行
3.throw 手动抛出异常
public class play{
public static void main(String[] args) {
qwe test = new qwe();
try {
test.data(-10);
System.out.println(test.a);
}
catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
class qwe {
int a;
void data(int a) throws Exception {
if(a>0)
this.a = a;
else
throw new Exception("您输入的数据非法,请输入正数");
带参构造方法,设置异常的描述
}
}
4.重写方法抛出异常规则
1.子类重写方法throws抛出异常的类型不大于父类抛出的异常(子类也可以不抛出)
2.如果父类被重写的方法没有抛出异常,则自类重写的方法也不能抛出异常,所以说需要异常处理时只能用try catch
重写规则
1.建立一个然后继承Exception
2.给这个类设置无参构造方法
3.设置一个带参构造方法,参数为string类型,然后调用super(str)
自定义异常类只能通过throw抛出
class test extends Exception{
public test(){}
public test(String str){
super(str); //这个str在抛异常之后调用e.getMessage()可以看到
}
}