------- android培训、java培训、期待与您交流! ----------
异常
异常分为两种:
Error (这个是严重的异常 表示JVM不能够处理的)
Exception (这个是非严重异常 JVM可以处理)
Error和Exception都继承自父类Throwable
在程序中发生错误的地方会产生一个 Exception或者Error的子类对象,然后把对象返回被调用的地方,然后在catch中用(Exception e)来接收产生的对象,再进行操作
JVM默认的异常处理机制就是调用PrintStackTrace方法,打印堆栈中的异常跟踪信息,直接执行的没有返回值 这个方法是重写的Throwable中的方法
在有可能发生错误的方法上抛出异常 throws Exception
当在函数内部出现了throw抛出异常对象时必须要给对应的处理动作。要么就在内部try catch处理,要么就在函数抛出。在其他程序调用他的时候有两种解决方式:继续抛出、用try catch 捕获
如果一直都是抛出没人捕获该异常的话将由JVM用默认的方式对他进行处理,一发生异常程序会马上终止
在函数上声明异常便于提高安全性,让调用处处理,不处理就编译失败。
函数中只要有异常发生没在该函数用try catch处理的话这个函数就结束了
对多异常的处理:
1,在抛出异常的时候最好抛出声明更为具体的异常。这样处理的可以更具体
2,如果该段代码中有多个异常,就要有多少个cathc块,对每个异常都要有专门的处理,如果几个异常出现的继承关系那么必须把大的放下面小的放上面,不能在catch最后用Exception来兜底 发生异常应该让程序立刻停掉,进行处理,抛出相应的异常,保证代码的严谨性。
注意:
在catch中处理时一定要定义具体的处理方式。不要简单的定义一句e.printStackTRace(),也不要简单的就写一句输出语句
自定义异常:
因为项目中会出现特有的问题,
而这些问题并未被java所描述并封装对象。
所以对于这些特有的问题可以按照java的对问题封装的思想。
将特有的问题。进行自定义的异常封装。
自定义异常必须是自定义类继承Exception。
继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。
他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象才可以被throws和throw操作。
throws和throw的区别:
throws使用在函数上。throws后面跟的异常类,可以跟多个,用逗号隔开。
throw使用在函数内。throw后跟的是异常对象
package test; /** * 自定义异常 * @author Administrator * */ public class CustomException { public static void main(String[] args) { //实例化对象 Demo demo = new Demo(); try { //调用运算方法 int num = demo.count(0, -2); System.out.println(num); } catch (FuShuException e) {//捕捉异常 //打印异常信息和引发该异常的数字 e.printStackTrace(); e.getVlaue(); } } } //自定义负数异常 class FuShuException extends Exception{ private int value; FuShuException(String mes){ //直接调用父类的构造方法 super(mes); } FuShuException(String mes,int value){ super(mes); //给记录引发异常的数字 this.value = value; } public void getVlaue(){ System.out.println("出现的负数是:" + value); } } class Demo{ //声明异常 int count(int a,int b) throws FuShuException{ if(a < 0 || b < 0) //抛出异常 throw new FuShuException("有出现负数,负数:" + (a < 0 ? a : b),a < 0 ? a : b); return a + b; } }