栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 基础知识——异常处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 基础知识——异常处理

Java 基础知识——异常处理

文章目录
      • Java 基础知识——异常处理
        • 一、 异常分类
        • 二、 异常捕获处理 (try-catch-finally)
          • 1、异常的处理
          • 2、多重 catch 异常处理
          • 3、嵌套异常处理
          • 4、finally 关键字
        • 三、 声明抛出异常 (throws、throw)
        • 四、 自定义异常

回顾:
Java 基础知识——基础语法
Java 基础知识——类与对象
Java 基础知识——抽象类、接口和内部类
Java 基础知识——泛型


一、 异常分类

错误: Error类以及他的子类的实例,代表了 JVM 系统内部错误、资源耗尽等严重情况。是脱离程序员控制的问题。因此,程序员应该关注Exception为父类的分支下的各种异常类。错误在代码中通常被忽略。例如:

当栈溢出时,一个错误就发生了,它们在编译是检查不到的。

运行时异常: 是指 编译器不要求强制处置的异常, 可以在编译时被忽略。运行时异常是可能被程序员避免的异常。示例:

空指针访问异常、除以 0 溢出异常、数组下标越界异常、错误类型转换异常。

检查型异常: 是指 编译器要求必须处置的异常, 最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。示例:

访问不存在文件的异常、找不到指定名称类的异常、操作数据库时异常、操作文件时异常。

Exception以及子类。

二、 异常捕获处理 (try-catch-finally)

Java的异常处理是通过5个关键字来实现的:try监视检测、catch捕获处理、 finally总要被执行、throw、throws(抛出异常)。

捕获异常

try:执行可能产生异常的代码。
catch:捕获异常。
finally:无论是否发生异常,代码总能执行。

public void method(){ 
	try {       
		// 代码段 1       
		// 产生异常的代码段 2       
		// 代码段 3 
	} catch (异常类型 ex) {
	    // 对异常进行处理的代码段4 
	} 
   // 代码段5 
} 

1、异常的处理
import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入被除数:");
        try {
            int num1 = in.nextInt();
            System.out.print("请输入除数:");
            int num2 = in.nextInt();
            System.out.println(String.format("%d / %d = %d",
                    num1, num2, num1/ num2));
        } catch (Exception e) {
            System.err.println("出现错误:被除数和除数必须是整数," +
                    "除数不能为零。");
            System.out.println(e.getMessage());
            //System.exit(1); // finally语句块不执行的唯一情况
        } finally {
            System.out.println("感谢使用本程序!");
        }
    }
}
2、多重 catch 异常处理

多重catch异常要求:子类在前、父类在后、平级均可。

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

public class Test7 {
  public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      System.out.print("请输入被除数:");
	  	try {
          int num1 = in.nextInt();
          System.out.print("请输入除数:");
          int num2 = in.nextInt();
          System.out.println(String.format("%d / %d = %d", 
                  num1, num2, num1/ num2));
      } catch (InputMismatchException e) {
          System.err.println("被除数和除数必须是整数。");
      } catch (ArithmeticException e) {
          System.err.println("除数不能为零。");
      } catch (Exception e) {
          System.err.println("其他未知异常。");
      } finally {
          System.out.println("感谢使用本程序!");
      }
   }
}
3、嵌套异常处理
try {
	try {
	 	......
	} catch {
		......
	}
} catch { 
	......
}
4、finally 关键字

finally 关键字必须和 try 结合使用,不可单独使用。表示无论成功与否都要执行的代码,常用使用方法有: try-finally,try-catch-finally。

public void method(){ 
	try {       
		// 代码段        
		// 产生异常的代码段       
		// 代码段 
	} catch (异常类型 ex) {
	    // 对异常进行处理的代码段
	} finally {
		// 总要执行的代码段
	}
} 
三、 声明抛出异常 (throws、throw)

throws 声明抛出异常: 声明方法可能要抛出的各种异常。

不知道目前如何处理所出现的异常,可在定义方法时,声明抛出(throws)异常。即一个方法可能引发异常,而它本身不对该异常处理,那么该方法必须声明将这个异常抛出,使得程序能够继续执行下去。

public static void throwChecked(int a) throws Exception // 抛出异常
	{
		if (a > 0)
		{
			// 自行抛出Exception异常
			// 该代码必须处于try块里,或处于带throws声明的方法中
			throw new Exception("a的值大于0,不符合要求");
		}
	}

throw 手动抛出异常

throw 用来明确地抛出一个异常。用户必须得到一个 Throwable 类或其他子类产生的对象引用。

示例:

public class Person {
	private String name = "";   // 姓名
	private int age = 0;   // 年龄
	private String sex = "男";  // 性别
	public void setSex(String sex) throws Exception {
		if ("男".equals(sex) || "女".equals(sex))
			this.sex = sex;
		else {
			throw new Exception(“性别必须是"男"或者"女"!");
		}
	}
}

在实际应用中,一般需要 throw 和 throws 语句组合应用,可在捕获异常后,抛出一个明确的异常给调用者。throws 语句编写在方法签名之后,throw 语句编写在方法之中。且 throws抛出异常的范围要大于等于throw异常的范围。

四、 自定义异常
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025091.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号