java===Exception异常处理

package cn.china;
/**
 * 异常:在运行时期发生的不正常情况。
 * 问题很多,意味着描述的类也很多,
 * 将其共性进行向上抽取,形成异常体系。
 * 最终问题就分成两大类:
 * throwable:无论是Error,还是异常,都是问题,就应该可以抛出,让调用者知道并处理。
 * 该体系的特点就在于throwable及其所有子类都具有可抛性。
 * 如何体现可抛性?
 * 其实是通过两个关键字体现的,throws,throw;凡是可以被这两个关键字操作的类和对象都具有可抛性。
 *    1、一般不可处理的,Error
 *    特点:是由JVM抛出的严重性问题,已经影响到我们程序的执行;这种问题发生一般不针对性处理,直接修改程序
 *    2、可以处理的,Exception
 *     特点:子类的后缀名都是用其父类名作为后缀,阅读性很强。
 *
 *     异常分类:
 *     1、编译时被检测异常:只要是Exception和其子类都是,除了RunTimeException和其子类
 *     这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。
 *     这样的问题都可以针对性的处理
 *     2、编译时不检测异常(运行时异常):RunTimeException和其子类。
 *     这样的问题的发生,无法让功能继续,运算无法进行,更多是因为调用的原因导致的或者引发了内部状态的改变导致的。
 *     这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行调整。
 *
 *     throw 和 throws区别?
 *     throws 使用在函数上  抛出的是异常类,可以抛出多个可以用逗号隔开
 *     throw 使用在函数内   抛出的是异常对象*/
class FuShuIndexException extends Exception//所以这里可以继承RunTimeException,就不需要声明或者捕捉异常,编译不会失败
{
    public FuShuIndexException(String meg) {
        super(meg);
        // TODO Auto-generated constructor stub
    }
}
class D{
    public int method(int arr[],int index)throws FuShuIndexException
    {
        if(arr==null)
            throw new NullPointerException("数组的引用不能为空!");
        if(index>=arr.length)
            throw new ArrayIndexOutOfBoundsException("数组越界了!"+index);
        if(index<0)//准备用负数角标异常来表示,但是这种异常在java中并没有定义过。按照java异常的创建思想,将负数角标进行自定义描述,并封装成对象
            throw new FuShuIndexException("数组的角标不能为负数"+index);
        return arr[index];
    }
}
public class Demo {

    public static void main(String[] args) throws FuShuIndexException
    {
        int[]arr=new int[3];
        D d=new D();
        int num= d.method(arr, -30);

    }

}
package cn.china;
/**异常处理的捕捉形式
 * 具体格式:
 * try
 * {需要被检测异常的代码}
 * catch(异常类  变量)  //该变量用于接收发生异常的对象
 * {处理异常的代码}
 * finally
 * {一定会被执行的代码}
 *
 *
 * 异常处理原则:
 * 1、函数内部如果抛出需要检测的异常,那么函数上必须要声明,否则必须在函数内必须要用trycatch捕捉,否则编译失败。
 * 2、如果调用到了声明异常的函数,要么trycatch要么throws,否则编译失败。
 * 3、什么时候catch,什么时候throws呢?
 * 功能内部可以解决,用catch;
 * 解决不了用throws,告诉调用者,调用者解决;
 * 4、一个功能如果抛出多个异常,那么调用时必须由对应多个catch进行针对性处理。
 * 内部有几个要检测的异常,就抛几个异常,抛出几个,就catch几个;*/
class FuShuIndexException extends Exception//所以这里可以继承RunTimeException,就不需要声明或者捕捉异常,编译不会失败
{
    public FuShuIndexException(String meg) {
        super(meg);
    }
}
class C{
    public int method(int arr[],int index)throws FuShuIndexException
    {
        if(arr==null)
            throw new NullPointerException("数组的引用不能为空!");
        if(index>=arr.length)
            throw new ArrayIndexOutOfBoundsException("数组越界了!"+index);
        if(index<0)//准备用负数角标异常来表示,但是这种异常在java中并没有定义过。按照java异常的创建思想,将负数角标进行自定义描述,并封装成对象
            throw new FuShuIndexException("数组的角标不能为负数"+index);
        return arr[index];
    }
}
public class Demo1 {

    public static void main(String[] args) {
        int[]arr=new int[3];
        C c=new C();
        try
        {
        int num= c.method(arr, -30);
        System.out.println("num"+num);//num是局部变量 所以这两句话要放在同一个代码块
        }
        catch(NullPointerException e){//多catch格式
            e.printStackTrace();
        }
        catch(ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }
        catch(FuShuIndexException e)
        {
            e.printStackTrace();//JVM默认的异常处理机制就是调用异常对象的这个方法。
            System.out.println("Message"+e.getMessage());
            System.out.println("String"+e.toString());
            System.out.println("负数角标异常!");
        }
        catch(Exception e){//父类需要放在最下面,不然编译失败,因为Exception跟所有异常都匹配,
            e.printStackTrace();
        }
        System.out.println("over!");

    }

}
package cn.china;
/**try  catch  finally 组合特点
 * 1、 try  catch  finally
 * 2、try  catch(多个当没有必要资源需要释放时,可以不用定义finally)
 * 3、 try  finally
 * 例:void show()throws Exception //因为没有catch所以必须声明异常
 * {
 *  try{
 *  //开启资源
 *  throw new Exception
 *  }
 *  finally{
 *  //关闭资源
 *  }
 * }*/
class E{
    public int method(int  index)
    {
        int[]arr=new int[3];
        if(index>=arr.length)
            throw new ArrayIndexOutOfBoundsException();
        return arr[index];
    }
}
public class Demo2 {

    public static void main(String[] args) {
        E e=new E();
        try{int num=e.method(3);
        System.out.println(num);
        }catch(ArrayIndexOutOfBoundsException c)
        {
            System.out.println(c.toString());
            return;
            //System.exit(0); 退出JVM只有这种情况不会执行finally语句;
        }
        finally {//一定会被执行的语句,主要用于关闭或者释放资源
            System.out.println("finally");
        }
        System.out.println("over!");

    }

}
package cn.china;

import java.time.format.TextStyle;

/**
 * 毕老师用电脑上课,
 * 分析其中问题:
 * 电脑蓝屏,冒烟*/
class LanPingException extends Exception
{
    LanPingException(String msg){
        super(msg);
    }
}
class MaoYanException extends Exception
{
    MaoYanException(String msg){
        super(msg);
    }
}
class NoPlanException extends Exception{
    NoPlanException(String msg){
        super(msg);
    }
}
class Computer{
    private int state=0;
    public void run()throws LanPingException,MaoYanException
    {
        if(state==1)
          throw new LanPingException("蓝屏啦");
        if(state==2)
            throw new MaoYanException("电脑冒烟了");
        System.out.println("电脑运行");
    }
    public void reset(){
        state=0;
        System.out.println("电脑重启了");
    }
}
class Teacher{
    private String  name;
    private Computer comp;
    Teacher(String name){
        this.name=name;
        comp=new Computer();
    }
    public void prelect()throws NoPlanException
    {
        try
        {
            comp.run();
            System.out.println("讲课");
        }catch(LanPingException e){
            System.out.println(e.toString());
            comp.reset();
            prelect();
        }catch(MaoYanException e){
            System.out.println(e.toString());
            test();
            throw new NoPlanException("课时无法进行"+e.getMessage());
            //可以对电脑进行维修
            //throw e;
        }
    }
    public void test(){
        System.out.println("大家练习");
    }
}
public class Demo3 {

    public static void main(String[] args) {
        Teacher teacher=new Teacher("毕老师");
        try
        {
            teacher.prelect();
        }
        catch(NoPlanException e)
        {
            System.out.println(e.toString()+"......");
            System.out.println("换人");
        }

    }

}
/**
 * class NoAddException extends Exception{}
 * void addData(Data d)throws NoAddException
 * {
 *    链接数据库
 *    try{
 *    添加数据库,出现异常 SQLException();
 *    }catch(SQLException e)
 *    {
 *        //处理代码
 *        throw new NoAddException();
 *    }finally
 *    {
 *
 *    关闭数据库
 *    }
 * }*/
 
package cn.china;
/**异常的注意事项
 * 1、子类在覆盖父类方法时如果父类的方法抛出异常,那么子类的方法只能破案出父类的异常,或者该异常的子类
 * 2、如果父类抛出多个异常,那么子类子还能抛出父类异常的子集
 *
 * 简单说:子类覆盖父类,只能抛出父类的异常,或者子集;如果父类没有抛出异常,那么子类覆盖时绝对不能抛出异常,但是可以用try;*/
class A extends Exception
{
}
class B extends A
{}
class C extends Exception
{}
class Fu{
    void show()throws A{}
}
class Zi extends Fu{
    void show()throws B{}//只能抛出A或者B
}
class Test{
    void method(Fu f){
        try{
            f.show();
        }catch(A a){}
    }
}
public class Demo4 {

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

    }

}
时间: 2025-01-04 02:39:28

java===Exception异常处理的相关文章

Java学习--异常处理及其应用类

异常是运行时在代码序列中引起的非正常状况,换句话说,异常是运行时错误.在不支持异常处理的计算机语言中,必须手动检查和处理错误----通常是通过使用错误代码,等等.这种方式既笨拙又麻烦.Java的异常处理避免了这些问题,并且在处理过程中采用面向对象的方式管理运行时错误. 1.异常处理的基础概念 Java异常是用来描述在一段代码中发生的异常情况(也就是错误)的对象.当出现引起异常的情况时,就会创建用来表示异常的对象,并在引起错误的方法中抛出异常的对象.方法可以选择自己处理异常,也可以继续传递异常.无

java的异常处理

架构:java的异常处理是一种你丢我捡的架构 处理方法:在该方法加上异常处理语句来处理,另外一种是把异常交给另外的方法来处理 异常的实例对象throwble类: error和exception 前者无法处理,程序直接终止运行,后者异常可以采取措施处理 exception类:arithmeticexception 数学运算产生的错误,例如除以0  :arrayindexoutofboundsexception 数组索引小于0或者是超出数组边界产生的异常:arraystoreexception 保存

二:Java之异常处理

一.异常的概念 异常,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误.错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了.假若程序在运行期间出现了错误,如果置之不理,程序便会终止或直接导致系统崩溃,显然这不是我们希望看到的结果.因此,如何对运行期间出现的错误进行处理和补救呢?Java提供了异常机制来进行处理,通过异常机制来处理程序运行期间出现的错误.通过异常机制

java:异常处理

异常:编译正常,但运行出错,会中断正常指令流 RuntimeException:运行时异常 分为:uncheck exception.和check exception(除了RuntimeException以及子类以外的) uncheck exception class Test { public static void main(String args[]){ System.out.println("1"); int i = 1/0; System.out.println("

Java exception 处理

先普及下什么是异常: 异常就是程序非正常结束,不按我们的处理逻辑执行下去了 导致程序中断的情况. 一般来说,一开始写程序犯错基本上就是 空指针NullPointerException 数组越界 参数异常 其实Java添加异常处理机制 是为了把异常和正常代码隔离开来,保证程序的健壮性和完整性 首先看段代码 public static void main(String[] args){ try {     ArrayList<Integer> nin = new ArrayList<Inte

Java入门 异常处理

Java入门 异常处理 1.处理异常(try-catch以及try-catch-finally): a)try会抛出很多种类型的异常-多重catch块的处理 eg:try{ //一些会抛出异常的方法 }catch(Exception e){ //处理该异常的代码块 }catch(Exception2 e){ //处理Exception2的代码块 }..(n个catch块)..{ }finally{ //最终将要执行的代码 } 注意:顺序问题-按照从小到大,先子类后父类的顺序 e.g:InputM

【java读书笔记】——java的异常处理

程序在实际环境的运行过程中,安全成为需要首先考虑的重要因素之一,这也是用户和程序员最关心的问题.同时,Java语言健壮性也体现在了能够及时有效地处理程序中的错误,准确的说是Java的异常处理机制为解决安全问题提交了一份满意的答卷. 先从整体上看一下本文要介绍的内容,然后进行详细的分析: 1.异常的概念 异常又称为例外,是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制. 上面的概念是书本上说的,下面我谈一下自己的看法 其实异常处理机制提供了统一的机制来识别和响应程序错误,异常可以为我

Exception异常处理机制

为什么要自定义自己的Exception ,Java Exception机制与传统的C语言的异常处理机制有什么不同,这种Exception机制的意义在什么地方?接下来咱就来和你一起探讨Exception 的优缺点. 早期的C语言的异常处理机制,通常是我们人为的对返回结果加一些标志来进 行判定,比如发生错误返回什么标志,正常情况下我们又是返回什么标记,而这些都不是语言本身所赋予我们的,而对于C语言这种机制又有什么问题哩?为什么新 一代的语言 Java Ruby C# 等都用Exception机制而不

java的异常处理机制(try…catch…finally)

1 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,“猜猜”它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦.public class TestException{    public TestException()    {    }    boolean