Rumah > Java > javaTutorial > 详解java异常处理实例

详解java异常处理实例

Y2J
Lepaskan: 2017-04-27 09:49:24
asal
1668 orang telah melayarinya

这篇文章主要介绍了java异常处理详细介绍及实例的相关资料,本文对java异常进行了知识层次的总结,需要的朋友可以参考下

Java异常层次结构

Exception异常

RuntimeException与非RuntimeException异常的区别:

非RuntimeException(检查异常):在程序中必须使用try…catch进行处理,否则程序无法编译。 
RuntimeException:可以不使用try…catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。
比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。
出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,
如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。
如果是主程序抛出的异常,那么这整个程序也就退出了。
Salin selepas log masuk

Error类和Exception类的父类都是throwable类,他们的区别是:

Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。
对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。 
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,
使程序恢复运行,而不应该随意终止异常。
Salin selepas log masuk

RuntimeException异常

NullPointException异常

一般报Java.lang.NullPointerException的原因有以下几种:

1. 字符串变量未初始化;
2. 对象没有用具体的类初始化;

NullPointException代码如下:

package TestNullPointException;
public class TestNullPointException {
  public static void main (String[] args) {
    String str = null;
    try {
      if (str.equals(null)) {
        System.out.println("true");
      } else {
        System.out.println("false");
      }
    } catch (NullPointException e) {
      e.printStackTrace();
    }
  }
}
Salin selepas log masuk

输出:

java.lang.NullPointerException
  at TestNullPointException.TestNullPointException.main(TestNullPointException.java:6)
Salin selepas log masuk

ArrayIndexOutOfBoundsException异常

数组下标越界异常,当引用的索引值超出数组长度时,就会发生此异常。

ArrayIndexOutOfBoundsException 代码如下:

package TestArrayIndexOutOfBoundsException;
public class TestArrayIndexOutOfBoundsException {
  public static void main (String[] args) {
    Integer[] array = new Integer[10];
    try {
      Integer temp = array[10];
    } catch (ArrayIndexOutOfBoundsException e) {
      e.printStackTrace();
    }
  }
}
Salin selepas log masuk

输出:

java.lang.ArrayIndexOutOfBoundsException: 10
  at TestArrayIndexOutOfBoundsException.TestArrayIndexOutOfBoundsException.main(TestArrayIndexOutOfBoundsException.java:6)
Salin selepas log masuk

ArithmeticException

ArithmeticException是出现异常的运算条件时,抛出此异常。

ArithmeticException代码如下:

/**
 * ArithmeticException
 */

 packet TestArithmeticException;
 public class TestArithmeticException {
  public static void main(String[] args) {
    Integer temp = 1;
    try {
      System.out.println(temp/0);
    } catch (ArithmeticException e) {
      e.printStackTrace();
    }
  }
 }
Salin selepas log masuk

输出:

java.lang.ArithmeticException: / by zero
  at TestArithmeticException.TestArithmeticException.main(TestArithmeticException.java:6)
Salin selepas log masuk

ArrayStoreException

当你试图将错误类型的对象存储到一个对象数组时抛出的异常。

ArrayStoreException代码如下:

/**
 * ArrayStoreException
 */

 packet TestArrayStoreException;
 public class TestArrayStoreException {
  public static void main(String[] args) {
    Object array = new Integer[10];
    try {
      array[0] = "123";
    } catch (ArrayStoreException e) {
      e.printStackTrace();
    }
  }
 }
Salin selepas log masuk

输出:

Exception in thread "main" java.lang.ArrayStoreException: java.lang.String
  at TestArrayStoreException.TestArrayStoreException.main(TestArrayStoreException.java:6)
Salin selepas log masuk

NumberFormatException

继承IllegalArgumentException,字符串转换为数字时出现。

NumberFormatException代码如下:

/**
 * NumberFormatException
 */
package test;
public class ExceptionTest {
   public static void main(String[] args) { 
      String s = "q12";
      Integer i = Integer.parseInt(s);
   }
 }
Salin selepas log masuk

输出:

Exception in thread "main" java.lang.NumberFormatException: For input string: "q12"
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
  at java.lang.Integer.parseInt(Integer.java:580)
  at java.lang.Integer.parseInt(Integer.java:615)
  at test.ExceptionTest.main(ExceptionTest.java:8)
Salin selepas log masuk

ClassCastException

类型转换错误,通常是进行强制类型转换时候出的错误。

ClassCastException代码如下:

/**
 * ClassCastException 父类赋值给子类,向下转型
 */
package test;
public class ExceptionTest {
   public static void main(String[] args) { 
     Object obj=new Object();
     Integer s=(Integer)obj;
   }
 }
Salin selepas log masuk

输出:

Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.Integer
  at test.ExceptionTest.main(ExceptionTest.java:5)
Salin selepas log masuk

Atas ialah kandungan terperinci 详解java异常处理实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Isu terkini
Bolehkah java digunakan sebagai bahagian belakang web?
daripada 1970-01-01 08:00:00
0
0
0
Tidak dapat memasang java
daripada 1970-01-01 08:00:00
0
0
0
Pasang JAVA
daripada 1970-01-01 08:00:00
0
0
0
Bagaimanakah php melaksanakan penyulitan sha1 java?
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan