• Java 异常类总结


    Java异常的分类和类结构图

    Java标准裤内建了一些通用的异常,这些类以Throwable为顶层父类。

    Throwable又派生出Error类和Exception类。

    错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

    异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

    图1 Java异常类层次结构图

    java.lang.Error

    Direct Known Subclasses:

    AnnotationFormatError, AssertionError, AWTError, CoderMalfunctionError, FactoryConfigurationError, FactoryConfigurationError, IOError, LinkageError, ServiceConfigurationError, ThreadDeath, TransformerFactoryConfigurationError, VirtualMachineError等

    java.lang.RuntimeException

    Direct Known Subclasses:

    ArithmeticException[算术异常], ArrayStoreException[数组存储异常], BufferOverflowException, BufferUnderflowException,  ClassCastException, DataBindingException, DOMException, EmptyStackException, EnumConstantNotPresentException, EventException, FileSystemAlreadyExistsException, FileSystemNotFoundException, IllegalArgumentException,IllegalPathStateException, IllegalStateException, IllformedLocaleException, ImagingOpException, IncompleteAnnotationException, IndexOutOfBoundsException, JMRuntimeException,  MissingResourceException[缺少资源异常], NegativeArraySizeException, NoSuchElementException,NullPointerException, ProfileDataException, ProviderException, ProviderNotFoundException,  RejectedExecutionException, SecurityException, SystemException, TypeConstraintException, TypeNotPresentException, UndeclaredThrowableException, UnknownEntityException, UnmodifiableSetException, UnsupportedOperationException, WebServiceException, WrongMethodTypeException等。

     1 public class ArithmeticException extends RuntimeException {
     2     private static final long serialVersionUID = 2256477558314496007L;
     3 
     4     public ArithmeticException() {
     5         super();
     6     }
     7 
     8     public ArithmeticException(String s) {
     9         super(s);
    10     }
    11 }
     1 public
     2 class ArrayStoreException extends RuntimeException {
     3     private static final long serialVersionUID = -4522193890499838241L;
     4 
     5     public ArrayStoreException() {
     6         super();
     7     }
     8 
     9     public ArrayStoreException(String s) {
    10         super(s);
    11     }
    12 }

    国际化找不到资源文件,会报MissingResourceException异常,需要在classpath下添加message_en_US.properties、message_zh_CN.properties等资源文件。

    message_en_US.properties中内容:hello = Welcome you!

     1 import java.util.Locale;
     2 import java.util.ResourceBundle;
     3 
     4 public class Main {
     5     public static void main(String[] args) {
     6         Locale locale = new Locale("en","US"); // new Locale("zh","CN");  
     7         //设置本土化显示国家语言  
     8         ResourceBundle bundle = ResourceBundle.getBundle("message", locale);  
     9         //此类的作用是通过ResourceBundle类来进行资源文件的绑定  
    10         String value = bundle.getString("hello");  
    11         //从资源文件中通过键拿到值  
    12         System.out.println(value);
    13     }
    14 
    15 }
     1 public class MissingResourceException extends RuntimeException {
     2 
     3     public MissingResourceException(String s, String className, String key) {
     4         super(s);
     5         this.className = className;
     6         this.key = key;
     7     }
     8 
     9    
    10     MissingResourceException(String message, String className, String key, Throwable cause) {
    11         super(message, cause);
    12         this.className = className;
    13         this.key = key;
    14     }
    15 
    16     
    17     public String getClassName() {
    18         return className;
    19     }
    20 
    21     public String getKey() {
    22         return key;
    23     }
    24 
    25     //============ privates ============
    26 
    27     // serialization compatibility with JDK1.1
    28     private static final long serialVersionUID = -4876345176062000401L;
    29 
    30     /**
    31      * The class name of the resource bundle requested by the user.
    32      * @serial
    33      */
    34     private String className;
    35 
    36     /**
    37      * The name of the specific resource requested by the user.
    38      * @serial
    39      */
    40     private String key;
    41 }

    从大体来分异常为两块:

    1. error---错误 : 是指程序无法处理的错误,表示应用程序运行时出现的重大错误。例如jvm运行时出现的OutOfMemoryError以及Socket编程时出现的端口占用等程序无法处理的错误。

    2. Exception --- 异常 :异常可分为运行时异常跟编译异常

    3. 检查性异常: 不处理编译不能通过

    4. 非检查性异常:不处理编译可以通过,如果有抛出直接抛到控制台

    5. 运行时异常: 就是非检查性异常

    6. 非运行时异常: 就是检查性异常

    异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。

    常见异常总结:

    非检查性异常(RuntimeException):

    java.lang.ArithmeticException,算术异常,当出现异常的运算条件时,抛出此异常,divide by zero

    java.lang.ArrayStoreException,数组存储异常

    java.lang.IllegalArgumentException,方法的参数错误

    java.lang.ClassCastException,类型转换异常,当试图将对象强制转换为不是实例的子类时,抛出该异常

    java.lang.IndexOutOfBoundsException,数组下标越界异常,具体分:java.lang.ArrayIndexOutOfBoundsException、java.lang.StringIndexOutOfBoundsException

    java.lang.NullPointerException,空指针异常,调用了未经初始化的对象或者是不存在的对象

    java.lang.NumberFormatException,字符串转换为数字异常

    检查性异常类:

    java.io.IOException,IO流异常

    java.lang.ClassNotFoundException,类未找到异常

    java.lang.IllegalAccessException,没有访问权限,拒绝访问一个类的时候,抛出该异常

    java.lang.NoSuchMethodException,方法不存在异常

    java.lang.NoSuchFiledException,属性不存在异常

    java.lang.EOFException,文件已结束异常,当程序在输入的过程中遇到文件或流的结尾时,引发异常

     1. Java.lang.NullPointerException

      这个异常大家肯定都经常碰到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(假如要调用的话)

      2. java.lang.ClassNotFoundException

      这个异常是很多原本在JB等开发环境中开发的程序员,把JB下的程序包放在WTk下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,假如是在JB下做的程序包,一般都是默认加上Package的,所以转到WTK下后要注重把Package的路径加上。

      3. java.lang.ArithmeticException

      这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。

      4. java.lang.ArrayIndexOutOfBoundsException

      这个异常相信很多朋友也经常碰到过,异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太轻易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。

      5. java.lang.IllegalArgumentException

      这个异常的解释是"方法的参数错误",很多J2ME的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数假如写成负数就会出现这个异常,再比如g.setColor(int red,int green,int blue)这个方法中的三个值,假如有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。

      6. java.lang.IllegalAccessException

      这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注重这个异常。

  • 相关阅读:
    关于初学者Could not find action or result :No result defined for action com.lyw.action.LoginAction and result success
    tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法
    关于jQuery中环境配置中的问题
    myeclicps开发web时候复制一个工程改名字后执行出现404错误
    非正常关闭myeclicps后,出现错误Errors occurred during the build.的解决方法
    【软件工程】读《人月神话》有感
    【软件工程】一个学期软件工程课的感想
    【软件工程】“谁是卧底”之NABC分析
    [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
    【软件工程】软件开发方法综述
  • 原文地址:https://www.cnblogs.com/beidongxing/p/7477201.html
Copyright © 2020-2023  润新知