java 异常来了

异常就是Java程序在运行过程中出现的错误。

异常的继承体系

Throwable
   * Error
   * Exception
        * RuntimeException

异常处理的两种方式
* a:try…catch…finally
* try catch
* try catch finally
* try finally
* b:throws
* try...catch的方式处理多个异常 但是第一个异常被捕获之后,就不再执行了

A:编译期异常和运行期异常的区别
* Java中的异常被分为两大类:编译时异常和运行时异常。
* 所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常就是编译时异常

* 编译时异常
* Java程序必须显示处理,否则程序就会发生错误,无法通过编译
* 运行时异常
* 无需显示处理,也可以和编译时异常一样处理

/**
* * A:Throwable的几个常见方法
* a:getMessage()
* 获取异常信息,返回字符串。
* b:toString()
* 获取异常类名和异常信息,返回字符串。
* c:printStackTrace()
* 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
* B:案例演示
* Throwable的几个常见方法的基本使用
*/

Throws 方法的处理

/**
* * A:throws的方式处理异常
* 定义功能方法时,需要把出现的问题暴露出来让调用者去处理。
* 那么就通过throws在方法上标识。
* B:案例演示
* 举例分别演示编译时异常和运行时异常的抛出
* 编译时异常的抛出必须对其进行处理
* 运行时异常的抛出可以处理也可以不处理
* @throws Exception
*/

finally 特点就是

/**
* * A:finally的特点
   * 被finally控制的语句体一定会执行
   * 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
* B:finally的作用
   * 用于释放资源,在IO流操作和数据库操作中会见到
   * C:案例演示
* finally关键字的特点及作用
    *return语句相当于是方法的最后一口气,那么在他将死之前会看一看有没有finally帮其完成遗愿,如果有就将finally执行
*后在彻底返回
*/

class Finally_Demo{

public static void main(String[] args) {
try {
System.out.println(10/0);
} catch (Exception e) {
System.out.println("除数为零了");
//System.exit(0); //    这条语句是退出jvm虚拟机
return;
} finally {
System.out.println("看看我执行了吗");
}
}

}

执行结果:

除数为零了
看看我执行了吗

throw的概述
       * 在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。

   * C:throws和throw的区别
    * a:throws
   * 用在方法声明后面,跟的是异常类名
   * 可以跟多个异常类名,用逗号隔开
     * 表示抛出异常,由该方法的调用者来处理
 * b:throw
 * 用在方法体内,跟的是异常对象名
 * 只能抛出一个异常对象名
 * 表示抛出异常,由方法体内的语句处理

自定义异常类

       1)首先创建自定义异常类,语法格式:自定义异常类名 extends Exception。

  2)在方法中通过关键字throw抛出异常对象。

  3)若是在当前抛出异常的方法中处理异常,可以用try-catch语句捕获并处理;若不是,在方法的声明处通过关键字throws指明要抛出给方法调用的异常。

  4)在出现异常方法的调用中捕获并处理异常。

例子:

class NumeratorIsZeroException extends Exception
{
 public NumeratorIsZeroException(String msg)
 {
  super(msg);
 }
}

public class Number
{
 public int divition(int iNum1,int iNum2)    throws NumeratorIsZeroException
 {
  if(0 == iNum2)
  {
   throw new NumeratorIsZeroException("分子不能为零。");
  }
 
  return (iNum1/iNum2);
 }

}

运行:

public class Test
{
 public static void main(String[] args)
 {
  Number num = new Number();
  try
  {
   System.out.println("商:" + num.divition(12,0));
  }
  catch(NumeratorIsZeroException e)
  {
   System.out.println(e.getMessage());
   e.printStackTrace();
  }
  catch(Exception e)
  {
   System.out.println(e.getMessage());
   e.printStackTrace();
  }
 }
}

运行结果:

妃子不能为0
com.heima.exception.NumeratorIsZeroException: 妃子不能为0
at com.heima.exception.Number2.divition(Number2.java:6)
at com.heima.exception.Test.main(Test.java:9)

原文地址:https://www.cnblogs.com/lixiaowei395659729/p/7102500.html