------- android培训、java培训、期待与您交流! ----------
public class ClassExceptionDemo { public static void main(String[] args) { Demo d = new Demo(); int result = d.div(5, 0); /* * Exception in thread "main" : java.lang.ArithmeticException/ by zero * at Demo.div(ClassExceptionDemo.java:18) * at ClassExceptionDemo.main(ClassExceptionDemo.java:5) */ System.out.println(result); System.out.println("over"); } } class Demo{ public int div(int x, int y) { return x / y; } }
2、Error
是 Throwable
的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然 ThreadDeath
错误是一个“正规”的条件,但它也是 Error
的子类,因为大多数应用程序都不应该试图捕获它。在执行该方法期间,无需在其 throws
子句中声明可能抛出但是未能捕获的 Error
的任何子类,因为这些错误可能是再也不会发生的异常条件。
Exception
类及其子类是 Throwable
的一种形式,它指出了合理的应用程序想要捕获的条件。
try{需要被检测的代码;}catch(异常类 变量){处理异常的代码;(处理方式)}finally{一定会执行的语句;}
并且注意:1. try{} catch (){} 2. try{} finally{} 3. try{} catch (){} finally{}
String | getMessage() 返回此 throwable 的详细消息字符串。 |
void | printStackTrace() 将此 throwable 及其追踪输出至标准错误流。 |
class Demo { public int div(int a,int b) { return a/b; } } class ExceptionDemo { public static void main(String[] args) { Demo d = new Demo(); try { int x = d.div(4,1); System.out.println("x="+x); } catch (Exception e)//Exception e = new ArithmeticException(); { System.out.println("除零啦"); System.out.println(e.getMessage());// / by zero; System.out.println(e.toString());// 异常名称 : 异常信息。 e.printStackTrace();//异常名称,异常信息,异常出现的位置。 //其实jvm默认的异常处理机制,就是在调用printStackTrace方法。 //打印异常在堆栈的跟踪信息。 } System.out.println("over"); } }
public int div(int a,int b)throws Exception//在功能上通过throws的关键字声明了该功能有可能会出现问题。
便于提高安全性,让调用者进行try catch处理(也可以继续向上抛,若一直这样,最终会抛给虚拟机)。不处理编译失败。(将异常从运行时发现到编译时就能发现,提高程序的安全性)
class MyException extends Exception{MyException ( String message ){super ( message );}}
public class ClassExceptionDemo { public static void main(String[] args) { Demo d = new Demo(); int result; try { result = d.div(5, 0); System.out.println(result); } catch (ArithmeticException e) { System.out.println(e.toString()); } catch (FuShuException e) { System.out.println(e.toString()); } System.out.println("over"); } } class Demo{ public int div(int x, int y) throws ArithmeticException,FuShuException { if(y<0) throw new FuShuException("除数小于0了"); return x / y; } } class FuShuException extends Exception{//自定义的异常类 FuShuException(String msg){ super(msg); } }
- throws使用在函数上,throw使用在函数内。
- throws后面跟的异常类,可以跟多个,用逗号隔开,throw后跟的是异常对象。
- 当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。
try { throw new AException(); } catch (AException e) { throw e; }
- 如果该异常处理不了,但并不属于该功能出现的异常。可以将异常转换后,再抛出和该功能相关的异常。(并 且异常链不能断)
- 或者异常可以处理,当需要将异常产生后和本功能相关的问题提供出去,让调用者知道,并处理。也可以将捕 获异常处理后,转换新的异常。
五、覆盖时异常的特点:try{throw new AException ();}catch ( AException e ){/ / 对AException处理。throw new BException(e); //并且异常链不能断}
class AException extends Exception{} class BException extends AException{} class CException extends Exception{} class Fu{ void show()throws AException{ } } class Zi extends Fu{ void show()throws AException{//该类继承了Fu这个类,并覆盖了show()方法,在根据自定义的异常体系,该方法只能 //抛出,AException、AException和BException、BException、或不抛出异常。若有其他 //异常出现,只能try处理不能抛出。 } }