package cn.jbit.exception;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 测试类
*
* @author kyaccp
*
*/
public class Test {
/**
* 程序入口
*
* @param args
* 输入参数
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try { // 捕获 异常
System.out.print("请输入课程代号(1~3之间的数字):");
int num = input.nextInt(); // 课程编号
switch (num) {
case 1:
System.out.println("C#编程");
break;
case 2:
System.out.println("Java编程");
break;
case 3:
System.out.println("SQL基础");
break;
default:
System.out.println("请输入(1~3之间的数字!)");
}
// 异常处理
} catch (InputMismatchException e) {
System.err.println("输入的数字必须是整数。");
e.printStackTrace();
} catch (Exception e) {
System.err.println("程序正在缓冲,请稍等!");
} finally {
System.out.println("谢谢查询!");
}
}
}
效果图:
package cn.jbit.exception;
import java.util.InputMismatchException;
import java.util.Scanner;
import org.apache.log4j.Logger;
/**
* 测试类
*
* @author chaoyi
* @2013-10-25
*/
public class ArithmeticTest {
/**
* 实例化控件类
*/
static Logger logger = Logger.getLogger(ArithmeticTest.class.getName());
/**
* 程序入口
*
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try { // 捕获异常
System.out.print("请输入被除数:");
int num1 = input.nextInt();
logger.debug("请输入被除数:" + num1);
System.out.print("请输入除数:");
int num2 = input.nextInt();
logger.debug("请输入除数:" + num2);
System.out.println(String.format("%d/%d=%d", num1, num2, num1
/ num2));
logger.debug(String.format("输出运算结果是:%d/%d=%d", num1, num2, num1
/ num2));
// return; //finnally语句仍旧会执行
// 处理异常
} catch (InputMismatchException e) {
logger.error("出现错误:被除数和除数必须是整数。", e);
} catch (ArithmeticException e) {
logger.error("出现错误:除数不能为零。", e);
} catch (Exception e) {
logger.error(e.getMessage());
// return; //finnally语句仍旧会执行
} finally {
System.out.println("感谢使用本程序!");
}
}
}
效果图:
Java的异常处理是通过五个关键字来实现的:try、catch、finally、throw和throws,下面将依次学习。
try-catch块
try-catch-finally块
多重catch块
声明异常——throws
抛出异常——throw
常用的异常类型
异常 | 说明 |
Exception | 异常层次结构的根类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问null对象成员 |
ClassNotFoundException | 不能加载所需的类 |
InputMismatchException | 欲得到的数据类型与实际输入的类型不匹配 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把“abc”转换成数字 |
throw和throws的区别表现在以下三个方面。
作用不同:throw用于程序员自行产生并抛出异常,throws用于声明在该方法内抛出了异常。
使用的位置不同:throw位于方法体内部,可以作为单独语句使用。throws必须跟在方法参数列表的后面,不能单独使用。
内容不同:throw抛出一个异常对象,而且只能是一个。throws后面跟异常类,而且可以跟多个异常类。
Throwable类:所有异常类型都是Trowable类的子类,它派生两个子类:Error和Exception。
Error类:表示仅靠程序本身无法恢复的严重错误,比如说内存溢出动态链接失败,虚拟机错误。应用程序不应该抛出这种 类型的对象(一般是由虚拟机抛出)。假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以在进行 程序设计,应该更关注Exception类。
Exception类:由Java应用程序抛出和处理的非严重错误,比如所需文件找不到、网络连接不通或中断、算术运算错误(如 被零除)、数组下标越界、装载了一个不存在的类、对null对象操作、类型转换异常等。它的各种不同的子类分别对应不同类型 的异常。
运行时异常:包括RuntimeException及其所有子类。不要求程序必须对它们做出处理。
Checked异常(非运行时异常):除了运行时异常外的其他由Exception继承来的异常类。程序类必须捕获或者声明抛出这 种异常,否则会出现编译错误,无法通过编译。处理方式包括两种:通过try-catch在当前位置捕获并处理异常,通过throws声 明抛出异常交给上一级调用方法处理。
异常是由Java应用程序抛出和处理的非严重错误,它可以分为Checked异常和运行时异常两大类。
Checked异常必须捕获或者声明抛出,否则无法通过编译。运行时异常不要求必须捕获或者声明抛出。
Java的异常处理是通过五个关键词来实现的:try、catch、finally、throw和throws。
即使在try块、catch块存在return语句,finally块中语句也会执行。finally块中语句不执行的唯一情况是:在异常处理 代码中执行System.exit(1)。
可以在一个try语句块后面跟多个catch语句块,分别处理不同的异常。但排列顺序必须是从特殊到一般,最后一个一般都 是Exception类。
log4j是一个优秀的日志记录工具。常用使用方式是配置log4j.properties文件,从而控制日志的输出级别,控制日志的目 的地和控制日志输出格式。