`
javawangzilong
  • 浏览: 57099 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java异常

阅读更多
Java异常
什么是异常?
异常就是程序运行时出现的不正常情况。

class Demo
{
  //除法运算
  public int div(int a, int b){
  return a/b;
  }
}

Demo d = new Demo();
int x = d.div(4,0);
System.out.print(x);
System.out.println(“.over”);
当调用者往里传入除数0,就发生了编译通过,运行失败的情况。
出现了一个ArithmeticException:
Jvm发现运算时已经违反了数学运算规则,java将这种问题进行描述,
并封装成了对象:ArithmeticException。
当除0运算发生后,jvm会将该问题打包成一个异常对象。
New ArithmeticException(“/ by zero”);
Main函数收到这个问题时,有两种处理方式:
1.自己将问题处理掉,然后进行运行
2.自己没有针对性的处理方式,只有交给调用main的jvm来处理。
Jvm有一个默认的异常处理机制,就将该异常进行处理。并将该异常的名称,异常的信息。异常出现的位置打印在了控制台上。同时将程序停止运行。


其实异常就是程序中出现的问题,这个问题包括问题的名称,问题的信息,以及问题出现的位置。这个问题中内部中的有很多,按照面向对象将这个问题封装成了对象。

通过if判断形势,也可以对问题进行处理。
但是这样会导致,问题处理代码和正常的业务流程代码都定义在了一起,不便于阅读,
当把问题封装成对象后,当该问题产生后,可以让程序进行跳转有一个特定的区域对问题惊醒处理,这样,异常的出现可以让问题代码和业务逻辑代码分离,提高了程序阅读性。

Java对常见的一系列问题进行了描述,并进行对象的封装。

问题分为两大类:
1.可以处理的问题
  一般用Exception(异常)来进行描述,这个问题可以有针对性的处理

2.重大错误问题
  用Error进行描述,这个问题发生后,一般不编写针对性的代码进行处理,而是要针对程序进行修正,通常都有jvm抛出的问题。
  
这两个派系,他们的子类都有一个共同特征:
所有子类名成结尾都是以父类名作为后缀。
无论错误,异常,他们都有名称标示,同时也有问题的信息。问题出现的位置。
既然有这样的共性,可以向上抽取,
他们有了一个共同的父类Throwable,该父类定义了该体系中最共性的方法


String getMessage():获取异常信息
String toString():将异常对象变成字符串,其实覆盖了ObjecttoString方法
void printStackTrace():打印异常在内存中的详细信息。(异常名称,异常信息,异常位置)
没有进行try catch处理时,由jvm默认处理结果和printStackTrace()处理结果一样,
说明jvm默认处理方式,就是在调用异常的printStackTrace()方法,并让程序停止。
  
  
  
异常的处理:
1.抛出throws
2.使用java中指定的代码块进行自定义处理
try{
  需要检测异常的代码;
}
catch(异常类 变量){
  异常处理代码;
}
finally{
  一定会被执行的代码;
}

到底是try好还是throws好?
原则:如果该功能可以将问题处理,用try,如果处理不了,交由调用者处理,这时用throws。


如果使用到了一个声明了异常的功能时,
必须要对应的throws或者try的方式处理,否则编译失败。
但是有一种情况。
当功能上声明的异常是一个特殊的异常子类时,这时该功能被调用,可以不用任何处理方式,一样可以编译通过,这个特殊异常就是Exception中的一个子类RuntimeException。(运行时异常)

异常分两种:
1.编译时被检测的异常,包括除了Exception子类RuntimeException以外的所有异常。
  如果在函数上声明,如果调用时,没有处理方式,编译不通过。
  而且这种异常需要有针对性的处理方式,是可被处理的。
2.编译时不被检测的异常:包括RunntimeException以及子类。
  该异常也称为运行时异常,如果功能声明了此异常,
  调用者可以不用任何处理方式。通过该异常不需声明。
  如果发生,就是需要程序停止,对代码进行修正。
  
在自定义项目中,也会有很多问题发生,这些问题,有可能是项目特有问题,
是没有被java所描述的。
那么这时,就需要我们继续按照java的异常思想,将特有问题也封装成对象。

自定义异常:
将特有的问题进行描述,并封装成对象。

自定义异常的步骤:
  定义一个类对问题描述。要想成为异常,必须继承异常类才可以。这样才可以成为异常体系中的一员。
  其实最根本的原因:异常体系和其他对象的不同之处在于异常体系都具备可抛性。
  异常的类和对象都可以被两个关键字所操作:throw,throws
  
if(b<0)
{
  throw new FuShuException(); //手动将异常封装成对象,并手动通过throw关键字将//异常抛出,引起程序的跳转,因为该异常发生后,运算时无法继续的
}


当函数内容通过throw抛出了一个编译时检测异常,必须有处理方式,要么try,要么throws


调用了声明异常的函数,处理时,对方声明什么异常,我们就处理什么异常。

自定义异常例子:
class FuShuException extends RuntimeException{
  FuShuException(String str){ //调用了父类的构造方法,将异常说明传递进去
  super(str);
  }
}

自定义异常可以继承Exception,也可以继承RuntimeException。
如果该问题发生,不需要声明需要是修正代码,那么就需要继承RuntimeException


throws和throw的区别?
1.throws用在函数上,用于声明该功能容易出现问题,可以调用者进行处理。
throw用在函数内,用于抛出指定的具体异常对象。
2.throws后面跟的是异常类,可以跟多个,中间用逗号隔开。
throw后面跟的是异常对象。
只有异常体系的类和对象才可以被这两个关键字所操作。


异常的封装,将本层的特定异常进行本层的处理。通过处理完对外暴露将问题告诉调用者,给调用者提供一个可以处理的异常,这就是异常转换。


关键字finally:
无论怎么样都会执行到,除非退出jvm虚拟机

什么时候使用finally?
用于关闭资源的代码。

try catch finally在使用的时候
try可以和catch相结合使用,也可以对应多个catch

如果没有catch,try可以和finall结合使用。
如果功能中,出现了编译时需要被检测的异常,如果没有被catch,就必须要throws声明,否则编译失败。

只有catch是处理异常的代码块。

异常的处理细节:
1.当子类覆盖父类时,如果父类的方法抛出了异常;
  那么子类覆盖父类要么不抛异常,那么抛出该异常或的该异常的子类。
2.如果父类抛出了多个异常,子类覆盖父类时,只能抛出这些异常的子集。

子类只能抛父类的异常或异常的子类或子集,子类不可以抛出父类没有的异常。
注意:如果覆盖的方法没有异常抛出,那么子类的方法绝对不可以抛出异常。
如果子类方法内还有异常发生,那么子类只能try,不能throws。

面试细节:当try对应多个catch时,如果catch的类型有继承关系,那么父类型的catch一定要放在下面。






分享到:
评论

相关推荐

    java异常处理习题

    Java 异常处理习题 Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出...

    java 异常详解,java异常分类,创建自己的异常

    Java 异常详解 Java 异常是指在程序运行中出现的违背指定正常流向的事件。异常可以分为两大类:-checked 异常和 unchecked 异常。Checked 异常必须在编译时捕捉并处理,而 unchecked 异常可以在编译时忽略,但是在...

    java异常机制小结

    Java 异常机制的基础知识包括异常的基础概念、异常的分类、异常的对象、异常的来源、异常的处理等几个方面。 一、Java 异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以...

    高效的java异常处理框架高效的java异常处理框架高效的java异常处理框架

    本文将从 Java 异常的基本概念和语法开始,讲述 Java 异常处理的基本知识,分析 Java 异常体系结构,对比 Spring 的异常处理框架,阐述异常处理的基本原则,并提出了自己处理一个大型应用系统异常的思想,并通过设计...

    Java异常学习资料

    Java异常处理是Java编程语言中的一个关键特性,它允许程序员优雅地处理程序运行时出现的错误情况,确保程序的稳定性和可靠性。这份“Java异常学习资料”包含了丰富的资源,帮助你深入理解Java异常机制,提升代码质量...

    java异常处理练习题

    java异常练习题,北大青鸟学士后课后练习,主要是异常处理的小测验

    java异常 异常的概念 应用

    Java异常处理是编程中至关重要的一个环节,它关乎程序的健壮性和稳定性。在Java中,异常(Exception)被用来表示程序运行时发生的错误或不正常情况。异常并不等同于错误,它是程序设计的一部分,允许我们优雅地处理...

    java学习之Java异常.ppt

    Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误情况时能够优雅地进行错误恢复或者至少提供有用的错误信息。Java异常是程序在运行时遇到的问题,例如数组越界、空指针异常、文件未找到等,这些问题...

    java 异常处理ppt

    Java异常处理是编程中至关重要的一个环节,它允许开发者优雅地处理程序运行时可能出现的错误,确保程序的健壮性和稳定性。Java中的异常处理机制基于一个独特的概念——异常(Exception),这是一种表示程序运行中...

    java异常体系结构

    Java异常体系结构是Java语言的重要组成部分,它负责处理程序执行过程中出现的错误情况。在Java中,异常由Throwable类及其子类构成。Throwable是所有异常的顶层父类,它有两个直接子类:Error和Exception。Error类...

    java 异常处理 代码实例

    Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本篇文章将深入探讨Java异常处理的概念、机制以及如何通过代码实例进行有效的异常管理。 Java异常处理的核心...

    Java异常处理体系

    这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供但无法直接访问)可能详细解释了Java异常处理的基本概念、机制以及最佳实践。 Java异常...

    浅析JAVA异常处理机制.pdf

    ### 浅析JAVA异常处理机制 #### 一、Java异常处理机制概述 异常处理是Java语言中的一个重要机制,它能够确保程序在遇到不可预料的情况时仍能维持稳定运行。异常处理主要包括三个方面:捕获异常、控制程序流程以及...

    JAVA异常出错的教程,非常全面。

    Java异常处理是编程过程中的重要环节,它有助于增强程序的健壮性和稳定性。在这个全面的教程中,我们将深入探讨Java异常的基本概念、分类、处理机制以及最佳实践。 首先,Java异常是程序运行时发生的错误,它中断了...

    Java异常处理终结篇——如何进行Java异常处理设计 - 望远的个人页面 - 开源中国社区1

    Java异常处理设计是Java编程中一个至关重要的环节,它直接影响到程序的稳定性和可维护性。在Java中,异常处理是通过try-catch-finally语句块来实现的,主要涉及两大类异常:编译时异常(Checked Exception)和运行时...

    Java异常框架设计

    这篇博文“Java异常框架设计”可能探讨了如何有效地利用Java的异常处理机制来构建可靠的系统。在这个讨论中,我们将深入理解Java异常的基本概念、异常分类、以及如何通过良好的框架设计提升代码的可读性和可维护性。...

    Java异常分装实例

    在给定的“Java异常分装实例”中,我们可以学习如何创建自定义异常类、抛出和捕获异常,以及如何利用Java的异常层次结构。`exception_test`文件可能包含了一个或多个示例代码,用于演示这些概念。 首先,创建自定义...

Global site tag (gtag.js) - Google Analytics