异常处理

╰半夏微凉° 2023-08-17 16:09 174阅读 0赞

1、异常与错误

错误对于程序而言是致命的,运用java的异常处理机制,异常发生后经过处理,程序还是能正常运行的。如:数组越界异常、除数为0异常等。异常类是指Exception类及其子类。

抛出异常:发生异常会后,生成异常对象,并把对象提交给运行系统的过程。

异常对象:由程序本身或java虚拟机产生,一个异常产生一个异常对象。

2、异常分类:

运行时期的异常:编译时期没有问题,运行时产生错误。运行异常一旦发生,异常后面的代码就不能运行,需要修改代码,抛出的使RuntimeException类或者是他的子类。如:空指针异常、下标越界异常、类型强制转换异常。

非运行时期的异常:如:非法访问异常、类没有找到异常等。

  1. public class ExceptionDemo {
  2. public static void main(String[] args) {
  3. int []a={
  4. 12,3,456,122};
  5. int num=a[4];
  6. System.out.println(num);
  7. }
  8. }

1392562-20190816100433513-1982744518.png

该数组的最大下标为3,但是要输出的数组的下表为4,所以抛出了数组越界异常:java.lang.ArrayIndexOutOfBoundsException

3、throw关键字

throw用在方法体内,是抛出一个异常对象,是抛出异常的具体实施。而throws只是对异常的声明,告诉调用则方法内部有异常,且没有处理该异常。

在异常类ArrayIndexOutOfBoundsException中,有如下构造方法去创建异常对象:

1392562-20190816104547748-424612906.png

  1. import java.util.Scanner;
  2. public class ExceptionDemo {
  3. public static void main(String[] args) {
  4. System.out.println("请输入数组的下标");
  5. Scanner sc = new Scanner(System.in);
  6. int a = sc.nextInt();
  7. ExceptionDemo.num(a);
  8. }
  9. public static void num(int i) {
  10. int[] a = { 12, 3, 456, 122 };
  11. if (i >= a.length)
  12. throw new ArrayIndexOutOfBoundsException("越界异常");
  13. int num = a[i];
  14. System.out.println(num);
  15. }
  16. }

1392562-20190816104632092-277264849.png

4、throws关键字

当该异常并不需要产生异常的方法去处理,或者不知道如何处理,则用throws在方法头部用throws抛出异常,表名该方法没有对异常处理,由该方法的调用者处理。

5、try——catch——-finally语句捕获和处理异常

try catch finally是直接处理异常,处理完成之后程序继续往下执行。

格式:

  1. try {
  2. //需要被检测的语句。(可能会产生异常的代码)
  3. }
  4. catch(异常类 变量) { //异常的处理语句。 (捕获到异常后的处理代码)
  5. }
  6. finally {
  7. //一定会被执行的语句。(无论是否捕获到异常均会执行)
  8. }

数组越界异常的处理:

  1. package pers.abb.trycatch;
  2. import java.util.Scanner;
  3. public class TryCatch {
  4. public static void main(String[] args) {
  5. System.out.println("请输入数组的下标");
  6. Scanner sc = new Scanner(System.in);
  7. int a = sc.nextInt();
  8. TryCatch.num(a);
  9. }
  10. public static void num(int i) {
  11. int[] a = { 12, 3, 456, 122 };
  12. try {
  13. int num = a[i];
  14. System.out.println(num);
  15. } catch (ArrayIndexOutOfBoundsException e) {
  16. System.out.println("数组越界异常发生了。");
  17. } finally {
  18. a = null;// 内存垃圾清理
  19. }
  20. System.out.println("异常已经被处理了");
  21. }
  22. }

1392562-20190816111245693-1589114842.png

由运行结果可知,异常发生后,经过catch语句的处理,执行finally语句后,后面的System.out.println(“异常已经被处理了”);语句依旧能够正常运行。

6、自定义异常类

系统定义的异常都是系统可以预见的异常,但是在实际运用中,需要我们结合实际情况,创建适合自己程序的异常处理类。例如,人的年龄为负数的异常。

定义Person类:

  1. package pers.zzz.Exception;
  2. public class Person {
  3. private String name;
  4. private int age;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public int getAge() {
  12. return age;
  13. }
  14. public void setAge(int age) throws AgeException {
  15. //抛出异常给调用者,即main函数
  16. if (age<0)
  17. throw new AgeException(age);//异常发生,创建异常类对象
  18. else this.age=age;
  19. }
  20. }

定义异常类:

  1. package pers.zzz.Exception;
  2. public class AgeException extends Exception{
  3. int age;
  4. public AgeException(int age){
  5. this.age=age;
  6. }
  7. public void show(){
  8. System.out.println("年龄为负数异常");
  9. }
  10. }

测试类:

  1. package pers.zzz.Exception;
  2. public class Test {
  3. public static void main(String[] args) {
  4. Person p=new Person();
  5. try {
  6. p.setAge(-11);
  7. } catch (AgeException e) {
  8. System.out.println("年龄定义有误");
  9. e.show();
  10. }
  11. }
  12. }

运行结果:

1392562-20190816114351792-1149240054.png

转载于:https://www.cnblogs.com/zhai1997/p/11362956.html

发表评论

表情:
评论列表 (有 0 条评论,174人围观)

还没有评论,来说两句吧...

相关阅读

    相关 异常处理

    1、异常与错误 错误对于程序而言是致命的,运用java的异常处理机制,异常发生后经过处理,程序还是能正常运行的。如:数组越界异常、除数为0异常等。异常类是指Exception

    相关 异常处理

    异常 1.什么是异常 在正常运行程序当中,即使语句或表达式在语法上是正确的,但在尝试执行时,它仍可能会引发错误。 在执行时检测到的错误被称为 “异常”,异常不一定会

    相关 异常处理

    所谓异常,就是以对象的方式表示一个或一类错误,该异常对象不仅封装了错误信息,还包含了错误发生时的“上下文”信息。传统的错误处理方式是,每当程序调用了某个方法进行了某种操作,程序

    相关 异常处理

    异常定义:         程序在运行时出现不正常情况。         问题也是现实生活中的一个具体事物,可以通过java类的形式进行描述。并封装成对象。Java对不正常

    相关 异常处理

    C++的异常处理机制被称为是不可恢复的:一旦异常被处理,程序的执行就不能够在异常被抛出的地方继续。如果这些 catch 子句不包含返回语句,在catch子句完成它的工作之后,程

    相关 异常处理

    概念         如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返

    相关 异常处理

    1.异常概述 异常的类型:Error(致命的),Exception(非致命的)以及必检和免检异常。 异常就是一种对象,表示阻止正常进行程序执行的错误或者情况。 异常

    相关 异常处理

    一、Error java虚拟机无法解决的严重问题。比如:JVM系统内部错误、资源耗尽等严重情况。StackOverflowError。 针对这类错误,一般不编写针对性的代码