Java基础:异常

Java 异常

Java教程 - Java异常

 

异常是在运行时在代码序列中出现的异常状况。例如,读取一个不存在的文件。

Java异常是描述异常条件的对象发生在一段代码中。

关键词

Java异常处理通过五个关键字管理: try,catch,throw,throws和finally。

try block包含要监视的程序语句异常。

如果在块中发生异常,则抛出异常。

catch 语句可以捕获异常并以合理的方式处理它。

要手动抛出异常,请使用关键字throw。

任何抛出的异常一个方法必须由一个 throws 子句指定。

任何代码绝对必须是在try块完成之后执行的命令被放在 finally 块中。

一旦抛出异常,程序控制就会从try块转移到catch块中。执行从未从catch返回到try块。

多个catch子句

您可以指定两个或多个catch子句,每个捕获不同类型的异常。

当抛出异常时,将按顺序检查每个catch语句,并执行类型与异常类型匹配的第一个。

在执行一个catch语句之后,绕过其他catch语句,并在try/catch块之后继续执行。

当您使用多个catch语句时,异常子类必须在它们的任何超类之前。

Java throws语句

如果一个方法想抛出一个异常,它必须指定这个行为。

这是包含throws子句的方法声明的一般形式:

type method-name(parameter-list) throws exception-list 
{ 
// body of method 
}

Java finally语句

任何代码,将被执行,不管try块放在一个 finally 阻止。

finally 创建一个代码块在 try/catch 块完成后执行。

即使没有catch语句与异常匹配, finally 块也将执行。

finally 块可用于关闭文件句柄和释放任何其他资源。finally子句是可选的。

Java异常类型层次结构:

Throwable
 |
 |
 +---Exception. 
 |    |
 |    |
 |    +--- RuntimeException
 |
 +---Error

异常及其子类用于用户程序应捕获的异常条件。您可以子类化Exception以创建自己的自定义异常类型。

错误定义在正常情况下不期望捕获的异常。 Java运行时系统使用错误以指示运行时环境中的错误。 堆栈溢出是这种错误的一个例子。

什么是Java的内置异常

子类化RuntimeException的异常不需要包含在任何方法的throws列表中。这些被称为未检查异常。

java.lang中定义的未检查异常在下表中列出。

异常含义
ArithmeticException算术错误,如除以零。
ArrayIndexOutOfBoundsException数组索引超出边界。
ArrayStoreException分配给不兼容类型的数组元素。
ClassCastException投射无效。
EnumConstantNotPresentException尝试使用未定义的枚举值。
IllegalArgumentException用于调用方法的非法参数。
IllegalMonitorStateException非法监视器操作,例如等待解锁的线程。
IllegalStateException环境或应用程序状态不正确。
IllegalThreadStateException请求的操作与当前线程状态不兼容。
IndexOutOfBoundsException一些类型的索引是超出界限的。
NegativeArraySizeException使用负尺寸创建的数组。
NullPointerException无效引用的使用无效。
NumberFormatException字符串到数字格式的转换无效。
SecurityException试图违反安全。
StringIndexOutOfBounds尝试在字符串的边界之外建立索引。
TypeNotPresentException未找到类型。
UnsupportedOperationException遇到不支持的操作。

检查的异常在下表中列出。

异常含义
ClassNotFoundException找不到类。
CloneNotSupportedException尝试克隆不实现Cloneable接口的对象。
IllegalAccessException对类的访问被拒绝。
InstantiationException尝试创建抽象类或接口的对象。
InterruptedException一个线程已被另一个线程中断。
NoSuchFieldException请求的字段不存在。
NoSuchMethodException请求的方法不存在。

Java自定义异常类

您可以通过定义 Exception 的子类来创建自己的异常类。

异常类没有定义自己的任何方法。它继承由 Throwable 提供的方法。

class MyException extends Exception {
  private int detail;

  MyException(int a) {
    detail = a;
  }

  public String toString() {
    return "MyException[" + detail + "]";
  }
}

public class Main {
  static void compute(int a) throws MyException {
    System.out.println("Called compute(" + a + ")");
    if (a > 10)
      throw new MyException(a);
    System.out.println("Normal exit");
  }

  public static void main(String args[]) {
    try {
      compute(1);
      compute(20);
    } catch (MyException e) {
      System.out.println("Caught " + e);
    }
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值