java程序中的异常处理心得(一)异常处理

学习在于总结,谢谢提出这个观点的朋友---尹当

1.1相关英文详解
try 试图 catch 捕获 finally 最终 exception:异常  throw: 抛
arithmetic:算术 mismatch:错配 illegal:不合法 argument:论证

1.2异常处理
   (1)  try{
  有可能出异常的代码;
 }catch(异常类型   变量){
  异常处理代码;
 }
   (2)try{
  有可能出异常的代码;
 }catch(异常类型   变量){
  异常处理代码;
 }finally{
  释放资源语句;
 }
   (3)try{
  有可能出异常的代码;
 }finally{
  释放资源语句;
 }
   (4)try{
  有可能出异常的代码;
 }catch(异常类型   变量){
  异常处理代码;
 }catch(异常类型   变量){
  异常处理代码;
 finally{
  释放资源语句;
 }
1.2异常的常用类型
Exception:异常层次结构的根类
ArithmeticException:算术错误情形
ArrayIndexOutOfBoundsException:数组小于或大于实际的数组大小
NullPointerException:尝试访问null对象成员
ClassNotFoundException:不能加载所需的类
InputMismatchException:欲得到的数据类型与实际输入的类型不匹配
IllegalArgumentException:方法接收到非法参数
实例说明:
ArithmeticException
InputMismatchException
ArrayIndexOutOfBoundsException
需求:计算类(compute)要求用户输入二个数执行相除并保存结果用异常类进行处理
代码实现:
import java.util.InputMismatchException;//导入异常处理包
import java.util.Scanner;//导入用户输入包
public class Compute {
 // 声明数组
 private int[] num = new int[2];

 // 封装属性
 public int[] getNum() {
  return num;
 }

 public void setNum(int[] num) {
  this.num = num;
 }

 /**
  * 实现计算
  *
  * @param args
  */
 public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    Compute compute = new Compute();
    int result = 0;
    int[] num = compute.getNum();
    String answer = null;
    try {
        System.out.println("请输入第一个数字:");
        num[0] = input.nextInt();
        System.out.println("请输入第二个数字:");
        num[1] = input.nextInt();
        result = num[0] / num[1];
        System.out.println("是否保存结果?(y/n)");
        answer = input.next();
        if (answer.equalsIgnoreCase("y")) {
           num[2] = result;// 试图将计算结果保存到数组中
          }
    } catch (InputMismatchException e) {
        System.out.println("用户输入数据类型错误!");
    } catch (ArithmeticException ae) {
        System.out.println("发生算术错误!" + ae.getMessage());
    } catch (ArrayIndexOutOfBoundsException aee) {
        System.out.println("数组发生越界!");
    }catch (Exctption ex) {
        System.out.println("程序发生异常,给您带来不便,请重新启动!");
    }finally {
        System.out.println(num[0] + "除以" + num[1] + "的计算结果为:" + result);
      }

   }
}
错误分析:
预错误一:用户输入的不是数字时,InputMismatchException捕获到异常,结束程序,输出提示:用户输入数据类型错误!
预错误二: 用户输入的第二个数即除数为0时,ArithmeticException捕获到异常,结束程序,输出提示:发生算术错误!/ by zero
预错误三:程序提示:"是否保存结果?(y/n)",如果输入"Y"后,ArrayIndexOutOfBoundsException捕获到异常,结束程序,输出提示:数组发生越界
因为数据长度为2,而程序试图"num[2] = result;// 试图将计算结果保存到数组中",发生越界!
预错误四:未知错误,Exception超类捕获到异常,结束程序,输出提示"程序发生异常,给您带来不便,请重新启动!"
注意最后都会输出:<num[0] + "除以" + num[1] + "的计算结果为:" + result>的结果;

总结:
1.finally里面的语句是一定会执行的.
2.try-catch-finally的语法结构只有上面四种
3.(4)中的多重catch中,Exception异常类只能出现在最后面,如果在放于前面,
后面的异常处理则不执行,因为Exception是异常超类
4.ae.getMessage()即是得到异常原因
5.一定要导入异常处理包:import java.util.InputMismatchException;

--------------------------------------------------------------------------------

学习交流.个人心得_尹当

你可能感兴趣的:(java,数据结构)