Java中的异常和错误

本文将简要介绍Java中的一些异常和错误

  简介:Java中的异常或者错误都有一个共同的祖先Throwable(可抛出),它有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error指的是代码运行时JVM出现的故障,不属于程序员的责任范畴,故在这里只做介绍。Exception指的是应用程序中可由程序员解决的问题。主要可分为两种:

  • 运行时异常(RuntimeException):指可以在编写代码时避免的异常,编译器懒得帮你指出
  • 已检查异常(CheckedException):指外部环境因素可能导致的异常,比如调取外部文件时文件根本不存在。编译器大部分情况下会帮你指出,让你把代码写的更严谨更科学(当然编译器是人写的,他也有看不出来的时候),省的在涉及外部因素这一步时出故障,导致程序直接挂掉而产生损失。使用一些方法让程序运行出错时立马转到挽救的语句上去,从而减少损失。(直接就挂在那了有可能前面做的事情得到的数据会丢失)

  下面我们分别来讨论这两种异常

RuntimeException

分类

算数异常(ArithmeticException)

  • 数学运算上出了问题,比如分母为0

空指针异常(NullPointerException)

  • 对象为空你却调用了他的属性和方法

强制转型错误(ClassCastException)

  • 部分类型之间无法强转导致发生错误
  • 通常是继承于同一父类的两个子类实例化出的对象,引用类型模糊。

数组越界异常(ArrayIndexOutOfBoundsException)

  • 超出了数组的容纳范围而出错,如本有5个元素你想要输入或者输出六个就会越界

数字格式化异常(NumberFormatException)

  • 包装类中,将字符串转为数字时字符串中有非数字成分

测试

 1 package cn.hbc.exception;
 2 
 3 public class Test01 {
 4     /**
 5      * 介绍基本异常类型并测试
 6      * @param args
 7      */
 8 
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11         //数学异常
12         int a=0;
13         if(a!=0)
14         System.out.println(3/a);
15         //空指针异常
16         String str=null;
17         if(str!=null) {
18             System.out.println(str.length());
19         }
20         //强制转型异常
21         Cat cat;
22         Animals dog=new Dog();
23         if(dog instanceof Cat)
24             cat=(Cat)dog;
25         //数组越界异常
26         int[] in=new int[5];
27         for(int i=0;i<5;i++){
28             in[i]=1;
29         }
30         if(in.length>5)
31             System.out.println(in[5]);
32         //数字格式化异常
33         String st="2342adc";
34         System.out.println(Integer.parseInt(st));
35     }
36 
37 }
38 class Animals{
39     
40 }
41 class Cat extends Animals{
42     
43 }
44 class Dog extends Animals{
45     
46 }

CheckedException

处理方法

try catch法

格式:
  • try{可能出现异常的语句}
  • catch(特定类型的异常对象,可以自定义异常类型){

          写出处理方法,一般是直接打印出异常,或者关闭一些出错的程序,对可能产生的损失加以弥补

                }

  • finally{写出不管怎样都会执行的代码}
运行流程

  在try中出现异常,停止执行try中的语句,包装成一个异常对象传到对应的catch中,执行catch中的语句,最后统一执行finally中的语句

直接抛出法

  • 使用throws声明异常并抛出
  • 谁调用谁处理,比如上面try catch的异常类型查源码看类型,就是找到抛出的异常的类型,然后解决别人留下来的异常
  • 最终在main方法中抛出会丢给虚拟机,虚拟机会直接打印出异常日志

注意

  • catch捕获异常时注意子类异常类型在前父类异常类型在后
  • 处理异常不可以代替简单测试---只在异常情况下使用异常机制
  • 不要进行小粒度的异常处理---应该将整个任务包装在一个Try语句块中
  • 异常往往在调用者处处理,暂时先了解

猜你喜欢

转载自www.cnblogs.com/hbc314/p/12183428.html