代码编织梦想

Java异常处理

异常

异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。

Java异常处理关键字

try、catch. finally、throw、throws

捕获异常声明异常抛出异常
try执行可能产生异常的代码throwsthrow
catch捕获异常声明方法可能要抛出的各种异常手动抛出异常
finally无论是否发生异常,代码总能执行

try catch处理异常分为三种情况

  1. 程序正常执行。
  2. 出现异常,在catch中找到对应的匹配项,处理并停掉程序。
  3. 在catch里面的异常不匹配的时候也会停掉程序。

常见的异常类型

异常类型说明
Exception异常层次结构的父类
ArithmeticException算数错误情形,如以零作为除数
ArrayOutOfBoundsException数组下标越界
NullPointerException尝试访问null对象成员
ClassNotFoundException不能加载所需的类
IllgalArgumentException无法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常,比如把"aba"转换为数字

try catch异常处理案例:

package unusual;

import java.util.InputMismatchException;
import java.util.Scanner;

import org.junit.Test;

/**
 * 测试异常
 * 
 * @author XRY
 *
 */
public class TestException {
    Scanner scan = new Scanner(System.in);
    int numOne;
    /**
     * 没有用异常处理时
     */
    @Test
    public void testOne() {
        System.out.println("请输入被除数");
        
        if(scan.hasNextInt()) {
            int numOne = scan.nextInt();
            System.out.println("请输入除数");
            int numTwo = scan.nextInt();
            System.out.println(String.format("%d / %d = %d", numOne, numTwo, numOne / numTwo));
            System.out.println("感谢使用本程序");
        }else {
            System.out.println("你输入的不是数字!!");
        }

    }
    
    
    /**
     * 加入try-catch后处理
     */
    @Test
    public void testTwo() {
        try {
            System.out.println("请输入被除数。");
            int numOne = scan.nextInt();
            System.out.println("请输入除数。");
            int numTwo = scan.nextInt();
            System.out.println(String.format("%d / %d = %d", numOne, numTwo, numOne / numTwo));
        //捕获输入不匹配的异常并处理
        } catch (InputMismatchException e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
            System.out.println("输入的不是数字!!");
        }catch (ArithmeticException e) {
            System.out.println("除数不能为零");
        }
        System.out.println("感谢使用本程序");
    }
}

当在处理异常但不知道怎么判断是什么异常时,可以使用它的父类Exception

package unusual;

import java.util.InputMismatchException;
import java.util.Scanner;

import org.junit.Test;

/**
 * 测试异常
 * 
 * @author XRY
 *
 */
public class TestException {
    Scanner scan = new Scanner(System.in);
    int numOne;
    /**
     * 没有用异常处理时
     */
    @Test
    public void testOne() {
        System.out.println("请输入被除数");
        
        if(scan.hasNextInt()) {
            int numOne = scan.nextInt();
            System.out.println("请输入除数");
            int numTwo = scan.nextInt();
            System.out.println(String.format("%d / %d = %d", numOne, numTwo, numOne / numTwo));
            System.out.println("感谢使用本程序");
        }else {
            System.out.println("你输入的不是数字!!");
        }

    }
    
    
    /**
     * 加入try-catch后处理
     */
    @Test
    public void testTwo() {
        try {
            System.out.println("请输入被除数。");
            int numOne = scan.nextInt();
            System.out.println("请输入除数。");
            int numTwo = scan.nextInt();
            System.out.println(String.format("%d / %d = %d", numOne, numTwo, numOne / numTwo));
        //捕获输入不匹配的异常并处理
//      } catch (InputMismatchException e) {
//          // TODO Auto-generated catch block
//          //e.printStackTrace();
//          System.out.println("输入的不是数字!!");
//      }catch (ArithmeticException e) {
//          System.out.println("除数不能为零");
        }catch(Exception e) {
            System.out.println("程序出错啦,请联系管理员....");
            
        //不管程序是否出现异常,都会执行finally里面的内容
        }finally {
        //停止Jvm 1是正常退出, 0是非正常退出
        System.exit(1);
        System.out.println("感谢使用本程序");
        }
    
    }
    
}

注意:在try-catch中如果含return,还是会执行finally里面的内容。

finally唯一不执行的情况是:

System.exit(1)----强行关闭虚拟机。参数1、0都是可以的,1表示正常退出,0表示非正常退出。

System.exit 被调用后,在虚拟机退出前会执行两个清除任务。

第一,它会执行所有通过 Runtime.addShutdownHook 注册的 shutdown hooks 它能有效的释放JVM之外的资源。

第二,执行清除任务,运行相关的 finalizer 方法终结对象。


自定义异常

当JDK中的异常类型不能满足程序的需要的时候,可以自定义异常类。

使用自定义异常的步骤:

  1. 定义异常类 :继承Throwable类、继承Exception 或者RuntimeExcept。
  2. 编写构造方法,继承父类的实现,继承JDK Exception。
  3. 实例化自定义异常对象。
  4. 使用throw抛出。

Exception类的层次


//自定义异常类
package unusual.practice;

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

//实例化自定义异常对象并通过throw抛出异常
package unusual.practice;
/**
 * 对年龄进行判断
 * @author XRY
 *
 */
public class AgeTrow {
	private int age;

	public int getAge() {
		return age;
	}

	public void setAge(int age) throws AgeException {
		//判断年龄,如果在1-100直接赋值,否则抛出异常
		if(age < 0 || age >100) {
			throw new AgeException("输入的年龄不符!!");
		}else {
			this.age = age;
		}

	}
	
}
//测试自定义异常
package unusual.practice;

import java.util.Scanner;

public class TestAgeException {
	public static void main(String[] args) throws AgeException {
		AgeTrow ae = new AgeTrow();
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入你的年龄!");
		int num = scan.nextInt();
		ae.setAge(num);
		System.out.println("你的年龄是" + ae.getAge());
		
	}
}
//输出结果:
请输入你的年龄!
120
Exception in thread "main" unusual.practice.AgeException: 输入的年龄不符!!
	at unusual.practice.AgeTrow.setAge(AgeTrow.java:17)
	at unusual.practice.TestAgeException.main(TestAgeException.java:11)

更多异常处理内容,请看这里!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xry12354/article/details/129610786

java异常处理_我爱看明朝的博客-爱代码爱编程

java异常处理 java异常体系 Java的所有异常继承自Throwable,分为error(错误)和Exception(异常),Exception又分为可查异常和不可查异常,可查异常指的是编译器可以检查处理来,在

java异常处理原理_kazu5a的博客-爱代码爱编程_简述java中异常处理的原理

一、Java异常处理机制的优点 在一些传统的编程语言,如C语言中,并没有专门处理异常的机制,程序员通常用方法的特定返回值来表示异常情况,并且程序的正常流程和异常流程都采用同样的流程控制语句。 Java语言按照面向对象的思想来处理异常,使得程序具有更好的可维护性。Java异常处理机制具有一下优点: (1)把各种不同类型的异常情况进行分类,用Java类来表示异

java异常处理(较详细)-爱代码爱编程

在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的。 比如: 客户输入数据的格式, 读取文件是否存在, 网络是否始终保持通畅等等。 异常:在Java语言中, 将程序执行中发生的不正常情况称为“异常” 。 (开发过程中的语法错误和逻辑错误不是异常) Java程序在执行过

Java异常处理(Java必备知识)-爱代码爱编程

在程序设计和运行的过程中,程序员也是尽可能规避错误,但使程序被迫停止的错误仍然不可避免。Java提供了异常处理机制来帮助程序员检查可能出现的错误,提高了程序的可读性和可维护性。Java中将异常封装到一个类中,出现错误就会抛出异常。 目录 异常概述捕捉处理异常在方法中抛出异常使用throws关键字抛出异常使用throw关键字抛出异常难点解答throws

java除零异常_JAVA异常处理-爱代码爱编程

出bug是写代码的时候非常常见的情况,今天就来讲一下。 首先明确一下什么是异常,代码正常运行不会出问题,但是遇到意外,参数变量,不符合要求,发生意外,代码终止运行,就是异常。 1.常见的异常有以下几种: 1.System.out.println(1/0);//java.lang.ArithmeticException:/ by zero 除以零

JAVA免检异常和必检异常_Java异常处理-爱代码爱编程

1、格式 ArithmetricException("") try(){ throw(ArithmetricException(""); }catch(){ //输出的异常捕获错误 } 2、举个🌰 public static void main(String[] args) { Scanner sc = new Scanner(Sys

java中异常处理语句错误用法的是_Java异常处理语句及解析-爱代码爱编程

Java异常处理语句及解析 一、选择题 1.java中用来抛出异常的关键字是 (C) A、tryB、catchC、throw D、finally 2.关于异常,下列说法正确的是 (A) A、异常是一种对象 B、一旦程序运行,异常将被创建 C、为了保证程序运行速度,要尽量避免异常控制 D、以上说法都丌对 3.(A)类是所有异常类的父类。

java参数不匹配异常_JAVA异常处理(随笔)-爱代码爱编程

异常处理 异常从方法中抛出。方法调用者可以捕获以及处理该异常。(不应该让方法终止程序,应有调用者决定是否终止程序) throw语句的执行称为“抛出一个异常(throw an exception)”,异常就是一个从异常类创建的对象;异常类就是 java.lang.ArithmeticException//算术异常,还有其他的异常类。 构造方法Ari

学习-Java异常处理之try-catch之异常捕获-爱代码爱编程

第1关:学习-Java异常处理之try-catch之异常捕获 任务描述相关知识 什么是异常非运行时异常运行时异常错误捕获异常异常的使用原则编程要求测试说明任务描述 本关任务:求给定两个数的商,并捕获除数为 0 的异常。 相关知识 为了完成本关任务,你需要掌握: 1.什么是异常; 2.如何捕获异常; 3.异常的使用原则。 什么是异常 异常:

Java异常处理的两种方式-爱代码爱编程

异常处理方式一:在当前方法中直接用try…catch处理 异常处理方式二:在当前方法中不处理,throws 异常抛给调用者处理 一. try-catch的方式就是捕获异常。 try:该代码块中编写可能产生异常的代码。 catch:用来进行某种异常的捕获,对捕获到的异常进行处理。 用try-catch的方式还可以添加final语句 finall

最全最详细的Java异常处理机制-爱代码爱编程

一、异常概述与异常体系结构 异常概述         在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。              程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期

《Java异常处理(详细)》-爱代码爱编程

基本介绍: 异常处理就是当异常发生时,对异常处理的方式。 异常处理的方式: 1)try - catch - finally 程序员在代码中捕获发生的异常,自行处理。 2)throws 将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM。 main方法由JVM调用,main方法调用 f1 方法,f1 方法调用 f2

Java异常处理机制-爱代码爱编程

Java异常处理机制:Java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮。当程序运行出现意外情形时,系 统会自动生成一个 Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离, 提供更好的可读性。 使用try...catch捕获异常Java异常处理机制为:抛出异常,捕捉异常,处理异常。 try...ca

java异常处理(三种异常处理机制)_红豆冰746的博客-爱代码爱编程

目录 前言 一、异常体系 二、异常示例 1.运行时异常 2.编译时异常 三、异常处理 1.默认异常处理 2.异常处理1 & throws 3.异常处理2  & try . . . catch . . . 4.异常处理3 & 前面两者的结合 5.运行时异常的处理 四、自定义异常 

jvm监控搭建-爱代码爱编程

文章目录 JVM监控搭建整体架构JolokiaTelegrafInfluxdbGrafana JVM监控搭建 整体架构 JVM 的各种内存信息,会通过 JMX 接口进行暴露。 Jolokia

java异常处理方式_java默认处理异常的方法是-爱代码爱编程

java异常处理方式 java通过面向对象的方式进行异常处理,一旦方法出现异常,系统自动根据该异常对象寻找合适的异常处理器(Exception Handler)来处理异常,把各种不同的异常进行分类,并提供了良好的接口。

java中的异常处理_java异常处理-爱代码爱编程

异常概述 异常的作用:增强程序的健壮性。 java中异常以什么形式存在? 异常在java中以类的形式存在,每一个异常类都可以创建异常对象。 JVM执行到某一处觉得有异常,会new异常对象,并且将n

biginteger 和bigdecimal-爱代码爱编程

出处:为什么会想到大数呢?是因为最近在写leetcode刷题的时候钻牛角尖非要实现数组加1的问题导致的。(leetcode 66 加1问题)不过ps自己对大数还是用的少了,导致害怕用,然后leetcode用了还报错。(