Java 基础教程

Java 异常介绍

在程序中总是存在各种错误,使应用程序在运行时终止。为了在程序执行过程中发生错误时能正常运行,可以使用 Java 提供的异常处理机制捕获可能发生的异常,对异常进行处理并使程序能正常运行。

在 Java 编程中,异常(Exception)是指在程序执行过程中出现的错误或异常情况。Java 中的异常是一种对象,它代表了程序在运行过程中的错误状态。对于不同类型的异常,Java 提供了不同的类来表示,它们的继承关系图如下:

Java 异常层次结构图

异常分类

Java 异常分为两类,分别为可检查异常(Checked Exception)和不可检查异常(Unchecked Exception)。

可检查异常

可检查异常又称为已检查异常,是指在编译时需要进行处理的异常。这些异常通常是由外部因素引起的,如文件不存在、网络连接中断等。如果不处理这些异常,编译器将报错。可检查异常必须使用 try-catch 块或者在方法签名中使用 throws 关键字进行处理。处理这些异常可以帮助程序在发生错误情况时进行适当的处理,增加程序的健壮性和可靠性。

常见检查异常

的检查异常包括以下几种:

  • IOException(输入输出异常):当发生输入输出操作错误时抛出,如文件读写错误、网络连接错误等。

  • FileNotFoundException(文件未找到异常):当指定的文件不存在时抛出。

  • SQLException(SQL异常):当访问数据库发生错误时抛出。

  • ClassNotFoundException(类未找到异常):当试图加载不存在的类时抛出。

  • InterruptedException(中断异常):当线程在等待、休眠或阻塞状态下被中断时抛出。

  • ParseException(解析异常):当字符串无法被解析为特定格式时抛出。

  • NoSuchMethodException(方法未找到异常):当试图调用不存在的方法时抛出。

  • IllegalAccessException(非法访问异常):当试图访问私有方法或字段时抛出。

  • InvocationTargetException(调用目标异常):当通过反射调用方法时,被调用方法抛出异常时抛出。

  • MalformedURLException(URL格式异常):当URL的格式不正确时抛出。

检查异常实例

该示例将使用 URL 解析一个网页地址,但是错误将 http:// 写成了 htp://,解析是抛出了 MalformedURLException 错误。代码如下:

import java.net.MalformedURLException;
import java.net.URL;

public class Demo {

   public static void main(String[] args) {
       try {
           new Demo().parseUrl("htp://www.hxstrive.com");
       } catch (MalformedURLException e) {
           e.printStackTrace();
       }
   }

   private URL parseUrl(String url) throws MalformedURLException {
       return new URL(url);
   }

}

运行示例,输出如下:

java.net.MalformedURLException: unknown protocol: htp
at java.net.URL.<init>(URL.java:593)
at java.net.URL.<init>(URL.java:483)
at java.net.URL.<init>(URL.java:432)
at com.hxstrive.demo.Demo.parseUrl(Demo.java:19)
at com.hxstrive.demo.Demo.main(Demo.java:12)

不可检查异常

不可检查异常又称为未检查异常,是指在编译时不需要进行处理的异常。这些异常通常是由程序内部的错误引起的,如数组越界、空指针引用等。不可检查异常是RuntimeException 类及其子类的实例,它们不需要强制处理,但是可以选择进行处理。

常见未检查异常

的未检查异常包括以下几种:

  • NullPointerException(空指针异常):当程序试图访问空对象的方法或属性时抛出。

  • ArrayIndexOutOfBoundsException(数组越界异常):当程序试图访问数组中不存在的索引时抛出。

  • ClassCastException(类转换异常):当程序试图将一个对象强制转换为不兼容的类型时抛出。

  • IllegalArgumentException(非法参数异常):当方法接收到一个不合法的参数时抛出。

  • IllegalStateException(非法状态异常):当对象的状态不满足方法调用的前提条件时抛出。

  • ArithmeticException(算术异常):当发生数学运算错误时抛出,如除以零。

  • UnsupportedOperationException(不支持操作异常):当不支持某个方法或操作时抛出。

  • NumberFormatException(数字格式异常):当字符串无法转换为数字时抛出。

  • OutOfMemoryError(内存溢出错误):当程序无法申请到足够的内存时抛出。

  • StackOverflowError(栈溢出错误):当方法调用的层级过深导致栈空间不足时抛出。

未检查异常示例

该示例使用 Integer.valueOf() 方法将一个字符串解析成 int,如果字符串不能正常解析为 int,则将抛出 NumberFormatException 异常,代码如下:

public class Demo {

   public static void main(String[] args) {
       try {
           int val = Integer.valueOf("hello");
           System.out.println("val = " + val);
       } catch (NumberFormatException e) {
           e.printStackTrace();
       }
   }

}

运行示例,输出如下:

java.lang.NumberFormatException: For input string: "hello"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.valueOf(Integer.java:766)
at com.hxstrive.demo.Demo.main(Demo.java:8)
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号