java 异常处理

本文详细介绍了Java异常处理的概念、分类和处理方式,包括try、catch、nally等关键字的使用,以及最佳编程实践。讲解了异常的用途、异常的分类,如Error和RuntimeException,强调了异常处理的重要性,并提供了代码示例。此外,还提到了Java 1.7的多异常捕获特性,并给出了一些异常处理的建议和自定义异常的创建方法。
摘要由CSDN通过智能技术生成

今天总结了异常的概念,分类,以及处理方式,和一些代码展示。

Java异常处理

程序运行时发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止。

Scanner sc=new Scanner(System.in);
String ss=sc.nextLine();
int kk=Integer.parseInt(ss);
System.out.println("用户输入数据为:"+kk);
//用户输入abc
/*
则执行结果为:
Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at test.A.main(A.java:9)
*/

程序员真理:程序会出错

  • 出错不是问题,关键是出错之后,错误如何处理?谁处理?
  • 程序可以从错误中恢复吗?恢复不了就崩溃么?

意外产生和处理过程概述

运行时有许多因素引起出错,硬件失败,除法溢出,数组下标越界。

出错的位置都在方法Method里

出错后方法生成一个Exception对象,并把它交给JVM。这个对象里包括许多信息:错误类型,错误位置。JVM负责处理Exception对象

这种生成Exception对象并交给系统的过程叫抛出意外throwing an exception

一个方法抛出意外后,JVM就试图在“调用栈”里找能处理这个类型Exception对象的方法。找到就执行,找不到程序中止

出错的处理方式

以前正常流程代码和问题处理代码相结合。现在将正常流程代码和问题处理代码分离,以提高阅读性。

public static int bbb(int k) {
   
if (k > 100) {
   
//输出正常处理
return 0;
} else if (k > 10) {
   
return -3;
} else if (k > 0) {
   
return -2;
} else {
   
return -1;
}
}
可以根据返回值判断程序的执行情况,如果>=0表示正常执行完毕,如果<0,则返回不同的负值表示不同的运行情况。调用方法时可以根据不同的返回值进行不同的处理
java中引入异常对象的目的在于给调用方更加详细的出错说明,以达到异常处理和正常代码分离,并且按照不同的异常进行处理的目的

其实异常就是Java通过面向对象的思想将程序中的问题封装成了对象,用异常类对其进行描述。1、不同的问题用不同的类进行具体的描述。2、问题很多,意味着描述的类也很多,将其共性进行向上抽取就形成了异常体系

异常

Java异常是Java提供的用于处理程序中错误的一种机制

  • 所谓错误是指在程序运行的过程中发生的一些异常事件。如除0溢出、数组下标越界、所需要读取的文件不存
  • 设计良好的程序应该在异常发生时提供处理这些错误,使得程序不会因为异常的发生而阻断或者产生不可预见的结果
  • Java程序的执行过程中如果出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并经被提交给Java运行时系统,这个过程称为抛出异常throw
  • 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这个过程称为捕获异常

Java异常处理的关键字有throws、throw、try、catch、nally共5个关键字

异常用途

异常就是在程序运行时由代码所产生的不正常状态。换句话说,异常就是一个运行时不支持异常处理的计算机语言中,错误必须被人工进行检查和处理,这显然麻烦而低效
Java语言提供了异常处理机制,为方法的异常终止和出错处理提供了清楚的接口

1、用来在发生运行异常时告诉程序如何控制自身的运行,以防止错误的进一步恶化

2、每个方法必须对他可能抛出的异常进行预先声明,在定义方法时,必须声明这个方法可能会抛出哪一种或几种异常

异常的分类

JavaSE中定义了很多异常类,这些类可以对应各种各样可能出现的异常事件。

int k=0;
System.out.println(100/k);
System.out.println("end...");
允许则会发现出现报错ArithmeticException,同时显示出错行号,但是看不到end...的输出

在这里插入图片描述
Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别
在这里插入图片描述
Java异常可以分为3大类
所有异常对象的父类为Throwable—Object
1、Error及其子类:错误,一般指的是虚拟机的错误,是由Java虚拟机生成并抛出,程序不能进行处理所以也不加处理,例如OutOfMemoryError内存溢出、调用栈溢出StackOverFlowError

public static void pp(){
   
System.out.println("this is pp....");
pp();
}

在控制台上显示Exception in thread main java.lang.StackOverowError
2、RuntimeException及其子类:运行时异常(非受检型异常),是由于编程bug所导致,希望越早发现越好,所以不进行处理,直接中断报错即可,编程人员针对报错信息修改程序bug来解决问题。
题:请说出至少5种常见的异常类型,用于检查应试者平常的编码量
常见的第一种运行时异常:ArithmeticException算术异常,就是执行数学计算时产生的非正常情况,如除以0

int k=0;
System.out.println(10/k);

这里明显是一个编程的bug,因为除法计算要求分母非0。修正bug,这里进行分母为0的处理

int k = 0;
if (k != 0)
System.out.println(10 / k);
else
System.out.println("除数为0,不能执行除法计算");
System.out.println("end.....");

常见的 第二种运行时异常:NullPointerException空指针异常(试图访问null对象的引用)

Object obj=null;
System.out.println(obj.toString()); //注意如果直接输出反而没有异常System.out.println(obj)

这里出错的原因是调用对象的方法之前没有进行非空判断,所以NullPointerException

Object obj = null;
if (obj != null)
System.out.println(obj.hashCode());
else
System.out.println("obj没有具体对象");

常见的 第三种运行时异常:IndexOutOfBoundsException下标出界

int[] arr=new int[3];
//异常的原因是访问数组的下标超出允许的范围[0,arr.length]
System.out.println(arr[3]); //ArrayIndexOutOfBoundsException
//异常的原因是通过下标访问字符串中字符时,超出了下标允许的范围[0,str.length()]
String str="abcd";
System.out.println(str.charAt(5));//StringIndexOutOfBoundsException

解决方法是通过下标访问时应该判定下标的取值是否合法

int[] arr = new int[] {
    1, 2, 3, 4 };
int index = 0;
if (index >= 0 && index < arr.length)
System.out
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值