在throwable下有Exception(异常)和Error(错误)。 错误和异常的区别: Error:当栈溢出的时候会报错误、内存溢出的时候会报错误 Exception:分为编译异常和运行异常 编译异常:代码编译无法通过,无法运行,例如:
byte s=128;//编译无法通过 byte -128~127运行异常:编译通过,但运行是产生异常,例如数组下标越界异常(ArrayIndexOutOfBoundsException):
//编译通过 ,但是运行会报数组下标越界异常 int [] s=new int[3]; System.out.println(s[3]);方法一:
try { System.out.println(chu(10, 0)); } catch (Exception e) { System.out.println(e.getMessage());//有返回值,内容描述简洁 System.out.println(e.toString());//有返回值,内容描述完整 e.printStackTrace();//没有返回值,内容描述详尽 } finally { System.out.println("=========");//finally无论是否抛出异常都会执行 }try:负责捕获可能发生异常的程序 catch:负责对异常进行处理 finally:为异常处理提供一个出口,对程序进行统一管理,final一定会被执行 若try中没有捕获到异常,则catch不执行。 try可以和多个catch连用,并且级别大的异常类放在异常类小的后面 组合: try{ }catch(){ }finally{ } try{ }catch(){ } try{ }catch(){ }catch(){ }… try{ }finally{ } 方法二:
public static int chu(int a,int b) throws IOException {//编译异常必须写在throws后面,如果有多个用“,”分隔,运行异常可以不写 int s=a/b; if (b==0) { throw new ArithmeticException();//运行异常 }if (b==1) { throw new IOException();//编译异常 }//一个方法只能抛出一个异常 return s; throws与throw的区别 throws:在方法头抛异常,可以抛多个,用“,”分隔 throw:在方法内抛异常,抛的是异常对象,只能抛一个 throw 运行期异常方法头不必须throws throw 编译期异常方法头必须throws,并且有几个抛几个return在try中,try获取到异常时,try–>catch–>finally–>return return在try中,try未获取到异常时,try–>finally–>return return在catch中,try中有异常,try–>catch–>finally–>return 总之finally永远都被执行 return返回的值会放入一个临时的不同于初始变量的临时的局部变量中,finally中对初始变量的操作不会影响return的结果
当方法抛出异常(运行期异常)时,子类如何重写 子类方法可以不抛 子类方法抛出异常与父类相同 子类抛出的异常是父类异常的子类
当方法抛出异常(编译期异常)时,子类如何重写 子类方法抛出异常与父类相同 子类抛出异常是父类异常的子类
父类中没有异常时 子类可以不抛 子类可以抛运行期异常
创建一个自定义异常类,去继承Exception
public class MyException extends Exception { MyException() {//默认构造方法 super(); } MyException(String str){//自定义构造方法 super(str); } }自定义的异常用正常的方式使用即可
public class MyException extends Exception { MyException() {//默认构造方法 super(); } MyException(String str){//自定义构造方法 super(str); }使用
public static void main(String[] args) throws MyException{ int i=10; if (i==0) { throw new MyException(); } }