Java学习(异常类)

一、什么是异常:

异常就是在运行时产生的问题。通常用Exception描述。

在java中,把异常封装成了一个类,当出现问题时,就会创建异常类对象并抛出异常相关的信息(如详细信息,名称以及异常所处的位置)。

二、异常的继承关系:

Throwable类是所有错误跟异常类的超类(祖宗类)。

Exception异常类及其子类都是继承自Throwable类,用来表示java中可能出现的异常,并且合理的处理这些异常。

RuntimeException类是运行异常类,继承自Exception类,它以及它的子类只能在运行过程中存在,当出现时,只能修改源代码,此异常无法处理。

Error类是与Exception的平级的类,用来表示Java中存在的严重错误,只能通过修改代码来解决问题。

继承体系的总结:

    Throwable: 它是所有错误与异常的超类(祖宗类)
        |- Error 错误
        |- Exception 编译期异常,进行编译JAVA程序时出现的问题
            |- RuntimeException 运行期异常, JAVA程序运行过程中出现的问题

三、异常与错误的区别:

异常是指程序在编译或者运行时出现的某种异常问题,我们可以对异常进行某种处理,如果不处理异常的话,程序将会停止运行。

错误是指程序在运行时出现的严重问题,无法处理,程序将会停止运行,Error通常都是系统级别的问题,都是虚拟机jvm所在系统发生的,只能通过修改源代码解决问题。

四、异常产生的过程:

1.运行或编译时产生异常

2.创建异常类的对象

3.声明异常类

4.将异常类对象传给调用者(main()方法)处理

5.调用者无法处理,再将异常类对象传给jvm虚拟机

6.jvm虚拟机将异常类的信息(名称、详细信息、异常所处的位置)打印在屏幕上,并且停止程序的运行

 五、抛出异常throw

在java中,提供了一个throw关键字,用来抛出一个指定的异常。

使用方法:

1.创建一个异常对象。封装一些提示信息

2.将这个异常告知调用者

使用格式:

throw new 异常类名(参数);

 六、声明异常throws

声明异常格式:

修饰符 返回值类型 方法名称 (参数)throws 异常1名称,异常2名称{

}

七、捕获异常try...catch...finally

捕获异常:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理

语句格式:

try {

     //需要被检测的语句。

}

catch(异常类 变量) { //参数。

     //异常的处理语句。

}

finally {

     //一定会被执行的语句。

}

try该代码块中编写可能产生异常的代码。

catch用来进行某种异常的捕获,实现对捕获到的异常进行处理。

finally有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。

捕获异常的组合方式:

1.  try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放。

 2.  try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对异常进行捕获处理。

 3.  一个try 多个catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。

注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

4. try finally 组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。

八、运行时期异常 RuntimeExecption

特点:

   方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常

    运行时期异常一旦发生,需要程序人员修改源代码

九、异常在方法重写中细节

1. 子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明。

class Fu {
    public void method () throws RuntimeException {
}
}
class Zi extends Fu {
    public void method() throws RuntimeException { }  //抛出父类一样的异常
    //public void method() throws NullPointerException{ } //抛出父类子异常
}

2.当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集

class Fu {
    public void method () throws NullPointerException, ClassCastException{
}
}
class Zi extends Fu {
    public void method()throws NullPointerException, ClassCastException { }              public void method() throws NullPointerException{ } //抛出父类异常中的一部分
    public void method() throws ClassCastException { } //抛出父类异常中的一部分
}

3.当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常的。

class Fu {
    public void method (){
}
}
class Zi extends Fu {
    public void method() throws Exception { }//错误的方式
}

十、异常中常用方法

在Throwable类中为我们提供了很多操作异常对象的方法,常用的如下:

1.getMessage方法:返回该异常的详细信息字符串,即异常提示信息

2. toString方法:返回该异常的名称与详细信息字符串

3. printStackTrace:在控制台输出该异常的名称与详细信息字符串、异常出现的代码位置

十一、自定义类异常

格式:

Class 异常名 extends Exception{ //或继承RuntimeException
    public 异常名(){
}
    public 异常名(String s){
super(s);
}
}

自定义异常继承Exception演示:

class MyException extends Exception{
    /*
    为什么要定义构造函数,因为看到Java中的异常描述类中有提供对异常对象的初始化方法。
    */
    public MyException(){
        super();
    }
    public MyException(String message)    {
        super(message);// 如果自定义异常需要异常信息,可以通过调用父类的带有字符串参数的构造函数即可。
    }
}

自定义异常继承RuntimeException演示:

class MyException extends RuntimeException{
    /*
    为什么要定义构造函数,因为看到Java中的异常描述类中有提供对异常对象的初始化方法。
    */
    MyException(){
        super();
    }
    MyException(String message)    {
        super(message);// 如果自定义异常需要异常信息,可以通过调用父类的带有字符串参数的构造函数即可。
    }
}

实例代码:

throw,throws,try/catch的使用

package com.oracle.Demo01;

public class Demo01 {
//try/catch格式:    用来处理异常
//        try{
//            被检测的代码(可能出现异常的代码)
//        }catch(异常类名  变量){
//            异常的处理方式
//        }finally{
//            必须要执行的代码
//        }
    public static void main(String[] args) {
        int[] arr={1,2,3};
        try{
            int res=getArray(arr);
            System.out.println(res);
        }catch(ArrayIndexOutOfBoundsException ex1){  //多catch处理时,平级的没有先后顺序
            System.out.println(ex1);    //当出现父子类关系式,一定要将子类的放在前面
            System.out.println("===========");
            System.out.println(ex1.getMessage());
            System.out.println("===========");
            System.out.println(ex1.toString());

        }catch(NullPointerException ex2){
            System.out.println(ex2);
            System.out.println(ex2.getMessage());
            System.out.println("===========");
            ex2.toString();
        }finally{
            System.out.println("必须要执行的代码");
        }

        System.out.println("我执行了吗");
    }
    //throw跟throws的区别     用来报告异常
    //throw 关键字后面,必须跟异常对象
    // throws 关键字后面,必须跟异常类名    用来将异常传给调用者
    public static int getArray(int[] arr) throws ArrayIndexOutOfBoundsException,NullPointerException{
        if(arr==null){
            throw new NullPointerException("数组为空o(╯□╰)o");
        }
        if(arr.length<4){
            throw new ArrayIndexOutOfBoundsException("数组长度不够(?`?Д?′)!!");
        }
        int i=arr[3]*2;
        System.out.println("aaa");
        return i;
    }

}

原文地址:https://www.cnblogs.com/0328dongbin/p/9186676.html

时间: 2024-08-29 11:31:08

Java学习(异常类)的相关文章

Java学习-023-Properties 类 XML 配置文件读取及写入源代码

之前的几篇 Properties 文章已经讲述过了 Java 配置文件类 Properties 的基本用法,查看 JDK 的帮助文档时,也可看到在 Properties 类中还有两个方法 loadFromXML(InputStream) 和 storeToXml(OutputStream, String, String),由方法名中的 xml 不难确定这两个方法分别是读取/写入数据到 xml 文件.JDK 文档部分如下所示: 因而此文将通过源码实例演示 Properties 类是如何将数据写入

JAVA学习-异常的捕获及处理

1.认识异常(了解) 异常指的是导致程序中断的一种指令流.那么下面先通过两个程序来比较程序出现异常与没有出现异常的区别. 范例:程序不出现异常 public class TestDemo { public static void main(String args[]) { System.out.println("1.除法计算开始.") ; System.out.println("2.除法计算:" + (10 / 2)) ; System.out.println(&q

java中异常类与类别

异常类的层次结构: 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性,它们都在java.lang包下面. Error类标记了严重错误,类似内存溢出,虚拟机异常,等等,是不该出现的.这些错误表示故障发生于虚拟机自身.或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError).类定义错误(NoClassDefFoundError)等.这些错

JAVA学习--异常Exception的处理

* 二.如何处理Exception的异常  * Java提供的是异常处理的抓抛模型  * 1."抛":当我们执行代码时,一旦出现异常,就会在异常的代码处生成一个对应的异常类型的对象,并  *        将此对象抛出.(自动抛出   / 手动抛出)  *        >一旦抛出此异常类的对象,那么程序就终止执行  *        >此异常类的对象抛给方法的调用者.  * 2."抓":抓住上一步抛出来的异常类的对象.如何抓?即为异常处理的方式  * 

java学习------异常

异常,什么是异常?简单的说异常是一种处理机制.将用户所没有考虑到的错误进行处理.由于程序猿无法保证一段代码永远不会出错. java中异常通过5个keyword:try , catch , throw , throws , finally. 当中,trykeyword后紧跟一个花括号括起来的代码块(花括号不可省略)简称try块. 它里面放置可能引发异常的代码. catch后相应异常类型和一个代码块,用于表明该catch块用于处理这样的类型的代码块.多个catch块后还能够紧跟一个finally块,

Java基础-异常类--异常概念、一般格式、Throwable类的一些方法

简介: 1.异常的概念 异常:问题-->不正常情况--->封装成对象 ; java对不同的不正常情况进行描述后的对象体现; 对于严重的异常,java通过Error类进行描述-------一般不编写针对性的代码对其进行处理 对于非严重可处理的异常的,java通过Exception类进行描述--可使用针对性的代码进行处理 体系: Object<--Throwable<--Error/Exception 2.一般格式 try{ * * } catch(异常类 变量){ * 处理问题* }

JAVA学习--Calendar 类的应用

Calendar 类的应用 Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理. java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();

JAVA常用异常类

算数异常类:   ArithmeticExecption 空指针异常类:    NullPointerException 指定类不存在:    ClassNotFoundException 字符串转换数字异常 :NumberFormatException 数组下标越界: IndexOutOfBoundsException 类型强转异常:  ClassCastException 文件未找到异常:  FileNotFoundException 输入\输出异常: IOException 方法未找到异常

java学习笔记--类ArrayList和LinkedList的实现

在集合Collection下的List中有两个实现使用的很频繁,一个是ArrayList,另一个是LinkedList,在学习中肯定都会有这样的疑问:什么时候适合使用ArrayList,什么时候用LinkedList?这时,我们就需要了解ArrayList和LinkedList的底层的实现,下面,为了更好的了解它们具体是怎样实现的,我们来写自己的ArrayList 和LinkedList. ArrayList底层是基于数组实现的,数组在内存中是存储在连续的存储单元中,在数据查找的时候比较快,适用

Java学习笔记--类和对象

1.介绍面向对象的编程 面向对象是现在主流的编程样例,它替代了以前C语言使用时的"结构体",Java是一门面向对象的语言,所以需要熟悉面向对象的概念.面向对象的程序由很多对象组成,每个函数对于用户而言,都有特殊的功能.程序里面的很多对象都可以直接从公共库里面拿来直接用.不用去研究这些功能怎么去实现的.传统的结构的编程由一系列算法步骤来解决问题.一旦这些步骤确定下来,也要同时确定存储数据的方式.也就是数据结构一开始学习的:算法+数据结构=程序. 先决定算法,再决定使用什么样的结构来存储数