在程序开发中,异常指不期而至的各种状况。它是一个事件,当发生在程序运行期间,会干扰正常的指令流程。在Java中,通过Throwable及其子类描述各种不同的异常类型,Throwable有Exception和Error两个重要的子类。
Error是程序无法处理的错误, 表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关, 而表示代码运行时JVM ( Java虚拟机) 出现的问题。例如, Java 虚拟机运行错误( VirtuaI MachineError ) ,当JVM 不 再有继续执行操作所需的内存资源时, 将出现OutOfMemoryError。这些错误是不可查的, 因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说, 即使确实发生了错误, 本质上也不应 该试图去处理它所引起的异常状况。因此我们编写程序时不需要关心这类异常。
Exception 是程序本身可以处理的异常。异常处理通常指针对这种类型异常的处理。Exception 类的异常包括checked exception 和unchecked exception。
Java 编译器会检查这些异常, 当程序中可能出现这类异常时, 要求必须进行异常处理, 否则编译不会通过。
在Java应用程序中,异常处理机制为:抛出异常、捕捉异常
抛出异常
捕获异常
import java.util.InputMismatchException;
import java.util.Scanner;
public class TryDemoOne {
public static void main(String[] args) {
/* // 要求:定义两个整数,输出两数之商
int one=12;
int two=2;
System.out.println("one和two的商是:"+ (one/two));
*/
// 要求:定义两个整数,接受用户的键盘输入,输出两数之商
Scanner input=new Scanner(System.in);
System.out.println("=====运算开始=====");
try{
System.out.print("请输入第一个整数:");
int one=input.nextInt();
System.out.print("请输入第二个整数:");
int two=input.nextInt();
System.out.println("one和two的商是:"+ (one/two));
}catch(ArithmeticException e){
System.exit(1);//终止程序运行
System.out.println("除数不允许为零");
e.printStackTrace();
}catch(InputMismatchException e){
System.out.println("请输入整数");
e.printStackTrace();
}catch(Exception e){
System.out.println("出错啦~~");
e.printStackTrace();
}finally{
System.out.println("=====运算结束=====");
}
}
}
使用规则:
使用的经验总结:
public void method() throws Exception1,Exception2{
}
throws的使用规则 1 、如果是不可查异常( unchecked exception ) 即Error 、RuntimeException 或它们的子类, 那么可以不使用throws 关键字来声明要抛出的异常, 编译仍能顺利通过, 但在运行时会被系统抛出。 2 、如果一个方法中可能出现可查异常, 要么用try-catch 语句捕获,要么用throws 子句声明将它抛出,否则会导致编译错误 3 、当抛出了异常, 则该方法的调用者必须处理或者重新抛出该异常。 4 、当子类重写父类抛出异常的方法时, 声明的异常必须是父类方法所声明异常的同类或子类。
package com.imooc.test;
import java.util.Scanner;
public class TryDemoFour {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
testAge();
} catch (HotelAgeException e) {
System.out.println(e.getMessage());
System.out.println("酒店前台工作人员不允许办理入住登记");
}catch(Exception e){
e.printStackTrace();
}
}
public static void testAge() throws HotelAgeException {
System.out.println("请输入年龄:");
Scanner input = new Scanner(System.in);
int age = input.nextInt();
if (age < 18 || age > 80) {
//throw new ArithmeticException();
//throw new Exception("18岁以下,80岁以上的住客必须由亲友陪同");
throw new HotelAgeException();
} else {
System.out.println("欢迎入住本酒店");
}
}
}
public class HotelAgeException extends Exception {
public HotelAgeException(){
super("18岁以下,80岁以上的住客必须由亲友陪同");
}
}