java异常处理详细介绍及实例

作者:lqh 时间:2023-11-28 05:07:02 

Java异常层次结构

java异常处理详细介绍及实例

Exception异常

RuntimeException与非RuntimeException异常的区别:


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

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


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

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();
   }
 }
}

输出:


java.lang.NullPointerException
 at TestNullPointException.TestNullPointException.main(TestNullPointException.java:6)

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();
   }
 }
}

输出:


java.lang.ArrayIndexOutOfBoundsException: 10
 at TestArrayIndexOutOfBoundsException.TestArrayIndexOutOfBoundsException.main(TestArrayIndexOutOfBoundsException.java:6)

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();
   }
 }
}

输出:


java.lang.ArithmeticException: / by zero
 at TestArithmeticException.TestArithmeticException.main(TestArithmeticException.java:6)

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();
   }
 }
}

输出:


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

NumberFormatException

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

NumberFormatException代码如下:


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

输出:


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)

ClassCastException

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

ClassCastException代码如下:


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

输出:


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

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:http://blog.csdn.net/songfeihu0810232/article/details/68948874

标签:java,异常处理
0
投稿

猜你喜欢

  • 关于Java float和double精度范围大小

    2023-11-29 00:52:01
  • C#中如何使用Chart图表问题

    2023-04-02 16:35:06
  • 基于Spring Boot使用JpaRepository删除数据时的注意事项

    2023-04-03 09:05:39
  • Android自定义View画圆功能

    2023-05-18 10:47:24
  • Spring拦截器HandlerInterceptor接口代码解析

    2022-09-05 10:51:04
  • Android传感器SensorEventListener之加速度传感器

    2023-03-07 15:05:50
  • C# Bitmap图像处理(含增强对比度的三种方法)

    2023-11-01 02:33:53
  • C#中改变DataGridView控件边框颜色的方法

    2022-07-20 06:00:46
  • 简述Java List去重五种方法

    2022-02-28 03:17:13
  • SpringBoot自动配置实现流程详细分析

    2023-06-23 13:35:45
  • Spring如何使用@Indexed加快启动速度

    2022-05-02 10:50:40
  • java实体类转成map的实现

    2022-03-25 08:56:04
  • C#异步编程由浅入深(一)

    2023-12-16 07:32:29
  • 将Java的List结构通过GSON库转换为JSON的方法示例

    2023-02-13 20:33:52
  • C#、vb.net及SQL判断指定年份是否为闰年的方法

    2023-05-18 09:49:55
  • Java线程间的通信方式详解

    2022-05-20 10:33:47
  • kotlin 协程上下文异常处理详解

    2022-09-30 06:32:52
  • Android实现的仿淘宝购物车demo示例

    2023-09-04 08:59:19
  • Java数据结构之双向链表图解

    2023-02-07 10:07:22
  • Android实现简单卡片布局

    2023-05-22 11:43:37
  • asp之家 软件编程 m.aspxhome.com