Java中的异常

Posted hbc314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的异常相关的知识,希望对你有一定的参考价值。

本文将简要介绍Java中的一些异常和处理机制

简介

  • 老版程序员需要对各种错误进行选择判断,错误处理代码和逻辑代码放在一起,复杂且易乱;
  • 新版程序员只需要用try catch处理,使用面向对象的方法来处理,将异常包装为对象后抛出,最终由JRE来捕获处理

 

运行时异常(RuntimeException

定义

  • 编译时不会出错,运行时报错
  • 需要加入逻辑判断语句来处理

分类

空指针异常(NullPointerException)

  • 对象为空你却调用了他的属性和方法
  • 加入判断是否为空的条件语句

强制转型错误(ClassCastException)

  • 部分类型之间无法强转导致发生错误
  • 通常是继承于同一父类的两个子类实例化出的对象,类型比较模糊,编译器看不出来
  • 逻辑判断是否可转

数组越界异常(ArrayIndexOutOfBoundsException

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

数字格式化异常(NumberFormatException)

  • 使用包装类时将字符串转为数字时字符串中有非数字成分
  • 使用正则表达式解决

注意

  • catch捕获异常时注意子类异常类型在前父类异常类型在后

测试

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

已检查异常(CheckedException)

定义

  • 所有非运行时异常
  • 编译不会通过,需要自己做处理

处理方式

try catch处理法

格式
  • try{}包围可能出现异常的语句
  • catch(可能的异常类型,一般在源码中查找){

          写出处理方法,一般是直接打印出异常

                }

  • finally{写出永远都会执行的代码,一般是关闭一些出错的程序}
运行流程

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

直接抛出法

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

 

以上是关于Java中的异常的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段

片段中的Android致命异常

异常和TCP通讯

片段中的getView()导致抛出异常,不确定原因

java 反射代码片段

片段中的空指针异常