异常:运行期间出现的错误,而不是编译时的语法错误
* 异常体系树:
* Throwable:
* Error:错误 一般指的是灾难性的问题,写代码解决不了,所以不解决
* Exception:
* RuntimeException: 非检查型异常 (数组越界异常),运行时期异常 可处理可不处理 通常不处理 不用try-catch
* IOException:检查性异常,必须处理
*
* 处理方式有两种:
*1.自行处理:使用 try-catch-finally
* 可能出现异常的代码放入try中 如果try中的代码块出现异常 这此代码块不被执行
* 将捕获或者处理代码的内容放入catch 中 可以写多个catch catch中从上到下类型异常类型从小
到大 或者 用 | 来隔离放在一个catch里 但是不能写带有父子关系的异常类型
* finally语句中的代码块 不管异常是否被捕获都要被执行 通常取放释放资源的代码
try {//可能出现异常的代码
while(i<3) {
System.out.println(greentings[i]);
i++;
}
}catch(ArrayIndexOutOfBoundsException | ArithmeticException e) {//捕获并且处理异常 小括号里面写的是可能出现的异常类型
System.out.println("这里出现数组越界异常了");
e.printStackTrace();//查看是什么异常
}catch(Exception e) {//捕获并且处理异常 小括号里面写的是可能出现的异常类型
System.out.println("这里出现异常了");
e.printStackTrace();
}finally {
System.out.println("最终执行");
}
* 2.回避异常:使用 throws 写在方法后
* 所谓的检查和非检查是指编译器在编译时是否检查
* e.printStackTrace();//查看是什么异常
*
public class throwa {
public static void main(String[] args) {
show3();
}
public static void show() throws Exception{
System.out.println(10/0);
}
public static void show2() throws Exception{
show();
}
public static void show3() {
try {
show2();
} catch (Exception e) {
e.printStackTrace();
}
}
}
* 常见异常:(至少五个,面试题)
* 1.数组越界异常 2.整数除0异常 3.类型转换异常 4.空指针异常 5.sql语句异常
*
* throw 和 throws 的区别
* 1.throw定义在方法体里面 throws定义在方法体上
* 2.throw表示制造或者产生了一个异常,throws代表声明该方法中有异常
自定义异常:定义一个类 继承exception
public class MyException extends Exception{
public static void main(String[] args) {
try {
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
add(a,b);
}catch(MyException e) {
System.out.println("输入错误!");
}
}
public static void add(int a,int b)throws MyException{
if(a<0&&b<0) {
throw new MyException();
}else {
System.out.println(a+b);
}
}
}