Java不得不说的事之异常篇

本文详细介绍了Java中的异常处理机制,包括异常的概念、异常体系结构、常见的异常类型如运行时异常和非运行时异常,以及如何使用try、catch、finally、throw和throws关键字来处理异常。通过三个具体的示例演示了异常处理的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 异常是什么?

异常:程序在运行过程中发生由于硬件设备问题、软件设计错误等导致的程序异常事件。(在Java等面向对象的编程语言中)异常本身是一个对象,产生异常就是产生了一个异常对象。 ——百度百科

异常,它代表这一个错误的产生,又可以代表一个消息。

2、异常体系

首先我们可以把异常当做一个对象来看待。
JAVA中定义了这么一个类 java.lang.Throwable 。他是所有所有异常的父类。
Throwable之下可以分成Error以及Exception。
Error:代表的是比较严重的错误,这个问题不是程序能解决的。而是java虚拟机抛出的,这种问题出现了就让它挂了吧,因为解决不了,比如内存溢出什么的,这种问题出现的时候,JVM就让程序停下来了。
Exception:异常又分成运行时异常和非运行时异常。
这个通常是需要程序员进行处理的部分。
运行时异常既 RunTimeException 及其子类,如 空指针异常(NullPointerException)、下标越界异常(IndexOutOfBoundsException)、算术异常(ArithmaticException)、类型转换异常(ClassCastException)
非运行时异常:是程序员必须要处理的异常,没有处理的话程序无法编译通过。
JAVA 异常结构图

3、异常处理

异常处理用到的几个关键字 try、catch、finally、throw、throws

  • try – 将可能出现异常的代码块放在这个区域中,try会对try块中的代码进行监控,如果运行正常,会在运行结束后正常向下运行。如果监控到异常,会将异常抛出。
  • catch – 用于捕获异常。catch用来捕获try语句块中发生的异常。
  • finally – finally块是肯定会被执行的部分。经常被用来回收try中打开的资源。只有finally块执行结束之后才会返回执行try或者catch块中的return或者throw语句。所以如果在finally中使用了return的话,那么异常信息将被隐藏。
  • throw – 抛出异常
  • throws – 在方法签名中使用,用于声明该方法可能抛出的异常。

Demo1:try…catch 的基本用法

public class demo1{
	public static void main(String[] args){
		try{
		int 10/0;
		System.println.out("i="+i);
		}catch(Exception e){
		//	对异常的处理
		System.out.println("Caught Exception"); 
            System.out.println("e.getMessage(): " + e.getMessage()); 
            System.out.println("e.toString(): " + e.toString()); 
            System.out.println("e.printStackTrace():");
            e.printStackTrace(); 
			}
		}		
	}

运行结果:

Caught Exception
e.getMessage(): / by zero
e.toString(): java.lang.ArithmeticException: / by zero
e.printStackTrace():
java.lang.ArithmeticException: / by zero
    at Demo1.main(Demo1.java:6)

Demo2:finally的基本用法

public class Demo2 {

    public static void main(String[] args) {
        try {
            int i = 10/0;
              System.out.println("i="+i); 
        } catch (ArithmeticException e) {
              System.out.println("Caught Exception"); 
            System.out.println("e.getMessage(): " + e.getMessage()); 
            System.out.println("e.toString(): " + e.toString()); 
            System.out.println("e.printStackTrace():");
            e.printStackTrace(); 
        } finally {
            System.out.println("run finally");
        }
    }
}

运行结果

Caught Exception
e.getMessage(): / by zero
e.toString(): java.lang.ArithmeticException: / by zero
e.printStackTrace():
java.lang.ArithmeticException: / by zero
    at Demo2.main(Demo2.java:6)
run finally

Demo3 throw以及throws的基本用法。

class MyException extends Exception {
    public MyException() {}
    public MyException(String msg) {
        super(msg);
    }
}

public class Demo3 {

    public static void main(String[] args) {
        try {
            test();
        } catch (MyException e) {
            System.out.println("Catch My Exception");
            e.printStackTrace();
        }
    }
    public static void test() throws MyException{
        try {
            int i = 10/0;
              System.out.println("i="+i); 
        } catch (ArithmeticException e) {
            throw new MyException("This is MyException"); 
        }
    }
}

运行结果

Catch My Exception
MyException: This is MyException
    at Demo3.test(Demo3.java:24)
    at Demo3.main(Demo3.java:13)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值