`

黑马程序员—java基础 异常

    博客分类:
  • java
 
阅读更多

5.1异常理解

1、异常:就是程序在运行时出现在非正常情况

 

2、由来:问题也是现实生活中一个具体的事物,也可以通过java

 

类的形式进行描述,并封装成对象。其实就是java对不正常情

 

况进行描述后的对象体现

 

3、对于问题的划分两种:

 

a、一种是严重的一种是非严重的。

 

b、对于严重的,java通过Error类进行描述

 

对于Error一般不编写针对性的代码对其进行处理

 

c、对于非严重的,java 通过Exception类进行描述

 

对于Exception可以使用针对性处理方式进行处理

 

4、无论ErrorException都具有一些共性的内容

 

比如:不正常情况的信息,引发原因等

 

5.2异常体系:

 

1、异常体系:

 

Thtrowable

 

|--Error

 

|--Exception

 

|--RuntimeException//运行时异常类

 

2、体系的特点:

 

a、异常体系中的所有类以及建立对象都具备可抛性

 

b、也就是说可以被throwthrows关健字所操作

 

c、只有异常体系具备这个特点

 

5.3异常的三种处理模块

 

1trr{

 

需要被检测的代码;

 

}catch(异常类变量){

 

处理异常的代码,

 

}

 

2trr{

 

需要被检测的代码

 

}finally{

 

一定会执行的语句;

 

}

 

3trr{

 

需要被检测的代码

 

}catch(异常类变量){

 

处理异常的代码,

 

}finally{

 

一定会执行的语句;//通常用于释放资源操作

 

}

 

5.4对多异常的处理方式:

 

1、声明异常时,建议声明更为具体的异常,这样处理可以更具体;

 

2、对方声明几个异常,就对应有几个catch

 

3如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面

 

4、建立在进行catch处理时,catch中一定要定义具体处理方式

 

不要简单定一句e.printStackTrace(),,也不要简单的就书写一条输出语句;

 

因为项目中会出现特有的问题,而这些问题并被java所描述并封装对象;

 

所以对于这些特有的问题可以按照java的对问题封装的思想将特有的

 

问题进行自定义的异常封装。

 

5、当在函数内部出现了throw抛出异常对象,那么就必须给予对应的处理动作:

 

要么在内部try catch 处理(处理了,就不用在函数上声明了,

 

除非这个处还抛出异常),要么在函数上声明让调用者处理。

 

6、一般情况在,函数内抛异常,函数上需要声明(除RuntimeException及其

 

子类异常外);.

 

5.5自定义异常

 

1、如何定义异常信息呢?

 

因为父类(Throwable)中已经把异常信息的操作都完成了所以子

 

类只要在构造函数时,将异常信息传递给父类通过super语句;

 

那么就可以直接通过getMessage方法获取自定义的异常信息。

 

2、自定义异常:必须是自定义类继承Exception.

 

3、示例代码:

 

需求:在本程序中,对于除数是负数,也视为错误的是无法进行运算的,

 

那么就需要对这个问题进行自定义的描述

 

代码示例:

 

//自定义编译时一个异常类,继承Exeption

 

Class FuShuException extends Excepition{

 

Private int value;

 

FuShuExeption(String mag){

 

//因为父类Exception中已定义一个接受抛出异常时传入的信息的成员变massage;

 

//所以在这只要把信息传给父类就行了

 

Super.(mag);

 

This.value = value;

 

}

 

//可以通过从父类继成过来的toString方法打印异常信息

 

Public intgetValue(){

 

return value;

 

}

 

}

 

Class Deme{

 

//声明抛出异常对象的类型

 

Public int div(int a,int b) throws FuShuException{

 

if(b<0)

 

//抛出自定义的异常

 

Throw new FuShuException(“被除数为0了!!!”);

 

retrun a/b;

 

}

 

}

 

Class DemoTest{

 

Demo d = new Demo();

 

//下面语句可能会发生异常

 

Try{

 

int x = d.div(4,-5);

 

System.out.println(“x=”+x);

 

//catch try块中抛出的异常,并进行相应的处理

 

}catch(FuShuException e){

 

//此方法是从父类继承的

 

System.out.println(e.toString());

 

System.out.println(“错误的负数是:” +e.getValue);

 

}

 

System.out.println(“over”);

 

}

 

5.6 RuntimeException:Exception中一个特殊的子类异常,运行时异常

 

1、如果不函数内容中抛出该异常,函数上可以不用声明,编译一样通过.

 

2、如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。

 

3、之所以不用在函数上声明,是因为不需要让调用者处理。

 

4、当该异常发生,希望程序停止,是因为在运行时,出现了无法继续

 

运算的情况,希望停止程序后,对代码进行修正。

 

5、自定义异常时:如该异常的发生,无法再继续进行运算时,

 

就让自定义异常继承RuntimeExcption:

 

6、示例:

 

需求:在本程序中,对于除数是负数,也视为错误的是无法进行运算的,

 

那么就需要对这个问题进行自定义的描述

 

//定义一个运行时异常;让其继承RuntimeException或及其及子类

 

Class FuShuException extends RuntimeExcepition{

 

FuShuExeption(String mag){

 

Super.(mag);//把异常信息传入

 

}

 

}

 

Class Deme{

 

//抛出运行时异常,可以不用声明

 

Public int div(int a,int b) {

 

if(b<0)

 

//抛出自定义的异常

 

Throw new FuShuException(“被除数出现负数了!!!”);

 

if(b==0)

 

//也是RuntimeException类对象.

 

Throw new ArithmeticException(“0除了”);

 

retrun a/b;

 

}

 

}

 

Class DemoTest{

 

Demo d = new Demo();

 

//下面语句可能会发生RuntimeException类的异常,但不用处理

 

Int x = d.div(4,-5);

 

System.out.println(“x=”+x);

 

System.out.println(“over”);

 

}

 

5.7异常在子父类覆盖中的体现:

 

1、子类在覆盖父类时,如果父类的方法抛出异常,那么子类的

 

覆盖方法时,只能抛出父类的异常或者该异常的子类。

 

如:

 

class AException extends Exception{

 

}

 

class BException extends AException{

 

}

 

class CException extends Exception{

 

}

 

class Fu{

 

Void show() throws AException{

 

}

 

}

 

class Zi extends Fu{

 

//子类要么不抛异常,要么只能抛AException,BException,

 

//不能抛其他的异常类。

 

//如不能抛CException

 

Void show()throws AExcepiton{

 

}

 

}

 

Class Test{

 

//如果这里接收的是子类对象,且子类对象抛出的是CException

 

Void function(Fu f){

 

Try{

 

f.show();

 

//那么这里就有问题了

 

//也就是说早期的程序(Test),不能处理后期程序(Zi)

 

//新异常(CException)

 

//所以不让子类抛出新的异常(也就是说只能抛父类抛出的异

 

//常或该异常的子类)

 

}catch(AException e){

 

}

 

}

 

}

 

class ExceptionTest{

 

public static void main(String[] args){
Test t = new Test();

 

t.funtion(new Zi());

 

}

 

}

 

Exceprion

 

|--AException

 

|--BException

 

|--CException

 

2、如果父类方法抛出多个异常,那么子类在覆盖父类方法是,

 

只能抛出父类异常的子集。

 

如父抛出:A B C D E;子类只能抛出:ABCD EA B C BCDE

 

只要不超过父类都行。

 

3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时

 

也不能抛出异常,如果子类真发生了异常,就必须进行try处理,

 

绝对不能抛出。

 

注意:

 

1finally 中定义的通常是关闭资源代码,因为资源必须释放,

 

2finaly只有一种情况不会执行,当执行到System.exit(0); finally不会执行

 

3catch是用于处理异常,如果没有catch就代表异常没胡被处理过,如果该异常是检测时(编译时,

 

RuntimeExeption及其子类的异常)异常,那么必须声明

 

总结:

 

异常的好处:

 

1、将问题进行封装

 

2、将正常流程代码和问题处理代码分离,方便阅读。

 

异常的处理原则:

 

1、处理方式有两种:trythrows

 

2、调用到抛出异常的功能时,抛出几个,就处理几个

 

一个try对应一个catch.

 

3、多个catch,父类的catch放到后面。

 

4catch内,需要定义针对性的处理方式,

 

不要简单的定义printStackTrace.输出语句

 

5、当捕获到的异常,本功能处理不了时,要以继续在catch中抛出

 

try{

 

throw new AException();

 

}catch(AException e){

 

throw a;

 

}

 

6、如要该异常处理不了,但并不属于该功能出现的的异常。

 

可以将异常转换后,在抛出和该项功能相关的异常

 

或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去

 

try{

 

throw new AException();

 

}catch(AException e){

 

//AException处理

 

throw new BException();

 

}

分享到:
评论

相关推荐

    黑马程序员java基础试题、笔记

    "黑马程序员java基础试题、笔记"这个压缩包资源为Java初学者和希望加入"黑马程序员"培训课程的学员提供了丰富的学习材料。这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案

    黑马程序员_Java基础辅导班教程课件[第01期]第15天

    总结来说,《黑马程序员_Java基础辅导班教程课件[第01期]第15天》的内容可能涉及了Java语言的核心概念,包括面向对象编程、控制结构、异常处理、文件I/O、集合框架以及内存管理等。通过深入学习和实践这些知识点,...

    黑马程序员入学Java精华总结

    ### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...

    黑马程序员java面试宝典 完整版PDF.rar

    《黑马程序员Java面试宝典》是一本专门为Java开发者准备的面试指南,包含了广泛而深入的Java技术知识,以及面试过程中可能会遇到的各种问题。这本书的完整版PDF提供了丰富的学习材料,帮助求职者提升自己的技术水平...

    黑马程序员Javase笔记

    Java是世界上最流行的编程语言之一,尤其在...总结来说,"黑马程序员Javase笔记"涵盖了Java的基础语法、内存管理、面向对象编程、集合框架以及泛型和Map等内容,这些都是成为一名合格Java开发者必须掌握的核心知识。

    黑马程序员Java基础视频辅导班Day01

    ### 黑马程序员Java基础视频辅导班Day01知识点总结 #### Java的跨平台特性与JVM 1. **Java的跨平台性**:Java语言能够实现跨平台运行的关键在于Java虚拟机(JVM),即Java代码可以在任何安装了对应JVM的操作系统上...

    黑马程序员_Java基础辅导班教程课件[第01期]第14天

    【Java基础辅导班教程】- 黑马程序员 在编程世界中,Java是一种广泛应用的面向对象的编程语言,尤其在企业级应用开发中占据主导地位。"黑马程序员"作为知名的IT培训机构,提供了丰富的Java基础辅导课程,旨在帮助...

    黑马程序员_(适合初学者入门的Java基础视频)

    "黑马程序员_(适合初学者入门的Java基础视频)"是一套专为初学者设计的Java基础教学课程,旨在帮助零基础的学习者逐步掌握Java编程的基本概念和技能。 该视频教程涵盖了Java的基础知识,包括: 1. **环境搭建**:...

    黑马程序员_Java基础辅导班教程课件[第01期]第13天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...

    Java基础案例教程.rar

    "Java基础案例教程"是为初学者设计的教育资源,旨在帮助他们掌握Java编程的基础概念和实践技能。本教程出自知名教育机构黑马程序员,该机构以其深入浅出的教学方式和实用的案例著称。 在本教程中,你将学习到以下...

    黑马程序员_Java基础辅导班教程课件[第01期]第8天

    【Java基础辅导班教程课件】是针对初学者设计的一系列教学资源,旨在帮助学习者扎实掌握Java编程语言的基础知识。第01期第8天的课程内容可能涵盖了上一阶段的学习总结,以及新的概念和技术的引入。在这个阶段,学员...

    【传智播客黑马程序员】Javaweb课件.7z

    1. **Java基础**:首先,你需要对Java编程语言有扎实的理解,包括基本语法、面向对象编程(类、对象、继承、多态等)、异常处理和集合框架(如ArrayList、LinkedList、HashMap等)。 2. **Servlet与JSP**:JavaWeb...

    黑马程序员JAVA面试宝典2018年5月最新版

    《黑马程序员JAVA面试宝典2018年5月最新版》是一本专门为Java开发者准备的面试指南,它集合了2018年5月时最新的面试知识点和业界趋势,旨在帮助Java程序员在求职过程中更好地应对各类技术面试。这本书可能涵盖了Java...

    黑马java教程知识点笔记整理

    【Java编程基础】 ...以上是黑马Java教程知识点笔记的主要内容,涵盖了Java编程的基础到进阶知识,是学习和巩固Java技能的重要参考资料。通过深入理解和实践这些知识点,开发者可以逐步提升Java编程能力。

    黑马程序员毕向东java基础课堂完整版文档

    《黑马程序员毕向东Java基础课堂完整版文档》是一份全面且深入的Java学习资源,由知名教育机构黑马程序员的讲师毕向东倾力打造。这份资料涵盖了从Java编程基础到高级特性的全过程,旨在帮助初学者系统地掌握Java编程...

    黑马程序员_Java基础辅导班教程课件[第01期]第11天

    "黑马程序员_Java基础辅导班教程课件[第01期]第11天"是一个专门为初学者设计的培训课程,旨在帮助学员深入理解和掌握Java的核心概念。这个课程可能是通过视频形式进行的,结合了理论讲解和实际操作,以便让学习者能...

    黑马程序员入学面试题

    3. **Java基础知识提问**:考察应聘者对于Java基础知识的掌握程度,包括但不限于数据类型、控制结构、面向对象特性等。 #### 2. 面向对象的理解 面向对象是一种编程范式,它将数据和处理这些数据的方法封装在一起...

    黑马—毕向东java基础PPT+java高薪技术PPT+代码

    【描述】中的内容表明,这个压缩包包含的是毕向东25天Java教学的PPT,以及黑马程序员平台上的毕向东和张孝祥两位讲师的课程资料。这些课程不仅涉及HTML、CSS、JavaScript的基础知识,还专门针对Java进行了深入讲解。...

    黑马程序员Java面试宝典2019最新

    综上所述,黑马程序员Java面试宝典2019最新版本为应聘者提供了一整套全面的Java面试知识点,详细解释了包括面向对象编程、Java基础语法、多态性、异常处理、常用API以及数据类型在内的多个重要领域。通过学习这些...

Global site tag (gtag.js) - Google Analytics