异常+面试题

1.异常的概述

对Java来说,异常就是一个类,产生了一个异常,就是产生了一个类的对象,这个类代表不正常的现象

整个异常体系 :重要
Throwable(生病)
Error (不可治愈的疾病) 错误:宕机,断点,海啸
Exception (能治愈的疾病) : 异常,程序员能处理
非RuntimeExcetion 非运行时期异常,编译器异常,要求我们在编译器就必须进行处理
RuntimeException(运行时期异常 )

2.异常的注意事项:

异常的注意事项:
1.如果对发生的异常一直不处理,程序不再继续执行
2.如果对发生的异常进行try,catch,此時發生了異常,try下的代碼不會執行,此異常會被catch捕獲,同时程序继续执行

3.异常处理的第一种方式:

第一种方式:捕获异常(分为单异常捕获,和多异常捕获)
使用规则:异常捕获
try{
// 可能产生异常的代码
}catch(Exception e){
// 如果产生异常,进行处理
}
Java处理异常的机制:如果不处理异异常,则代码停止执行,并且将异常直接抛给JVM。

  使用规则:多异常捕获
     try{
     // 可能发生异常的代码
     }catch(异常类型  | 异常类型 e2){
      //如果产生异常,进行的处理
      // e.printStackTrace() 打印 针对于程序员的public class Demo01 {

	public static void main(String[] args) {
            Test t  = new Test();
            int method = t.method();
            System.out.println(method);
	}
}

class Test{
	public int method(){
		int i = 0;
        try{
           	System.out.println(1/0);
        	return i;
        }catch(Exception e){
        	  e.printStackTrace();
        }finally{
        	i = 200;
        	System.out.println("我一定会运行");
        }
		return i;
	}//返回路径:每次碰到return就会在返回路径中临时存储这个被返回的值,
无论方法内有任何的改变,返回路径中的这个值一致不变。
}
       //异常名字,异常描述,异常发生在哪儿 
     }
 问题为什么要分开捕获
 注意:该异常处理,只能是针对同级异常

4.异常处理的第二种方式

使用规则:抛出异常,在方法后边加上throws
两个问题:
如果不处理异常,那么异常最终会到哪儿
如果拋出了异常,谁处理。

5.自定义异常

使用规则: extends RuntimeException
4个构造方法

1.创建自定义异常 -->extends
RuntimeException
非RuntimeException
需要实现父类的构造方法(传入自己的异常信息)
throw 进行抛出,并且进型处理

6.子父类异常注意事项:

运行异常的特点:
父类的方法,如果抛出异常,子类重写后可以不抛出异常也可以抛出异常,但是,如果子类要抛,抛出的异常不能大于父类的异常大于,都指的是继承关系

父类的方法,没有异常抛出,子类重写后也不能抛出异常,如果子类中调用了抛出异常的方法,别无选择,只能try…catch处理意义

面试题

1、 throw 和throws 的区别是什么
throw
定义在方法中,后边跟的是异常对象
同时只能抛出一个异常对象

throws
定义在方法的声明上,后边跟的是异常的类型
后边同时可以跟多个数据类型

2、 finally 返回路劲面试题
2. finally :在正常情况下,肯定执行的代码
在try中return,在finally中修改:
//返回路径:每次碰到return就会在返回路径中临时存储这个被返回的值,无论方法内有任何的改变,返回路径中的这个值一致不变。
代码:
public class Demo01 {
public static void main(String[] args) {
Test t = new Test();
int method = t.method();
System.out.println(method);
}
}
class Test{
public int method(){
int i = 0;
try{
System.out.println(1/0);
return i;
}catch(Exception e){
e.printStackTrace();
}finally{
i = 200;
System.out.println(“我一定会运行”);
}
return i;
}
//返回路径:每次碰到return就会在返回路径中临时存储这个被返回的值,无论方法内有任何的改变,返回路径中的这个值一致不变。
}

猜你喜欢

转载自blog.csdn.net/qq_41573718/article/details/88750686