javase(6)_异常

一、异常的概念

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

2、所谓错误是程序在运行过程中发生的一些异常事件(如:除0,数组下标越界,文件不存在等).

3、Java程序的执行过程中,如出现异常事件,可将其封装为一个异常对象,该异常对象封装了异常的信息,并将其交给Java运行时系统,该过程称为抛出异常(抛来抛去的都是异常对象).

4、当java运行时系统收到异常对象时,会寻找能处理这一异常的代码,并把当前对象交给其处理,这一过程称为捕获异常.

二、异常的分类

1、Error,Throwable的子类,由Java虚拟机生成并抛出,用于表示合理的应用程序不应该试图捕获的严重问题,例:OutOfMemoryError,NoClassDefFoundError,以error结尾的都是错误,此处父类名作为子类后缀名,可以借鉴.

2、Exception,Throwable的子类,所有异常类的父类,其子类有各种各样可能出现的异常事件,一般需要用户显示的声明或捕获.

3、Runtime Exception,Exception的子类,Java 虚拟机正常运行期间抛出的异常的父类,如除0、下标越界等,其产生比较频繁,处理麻烦,如果显示的申明或捕获将会对程序的可读性和运行效率影响很大,因此由系统自动检测并将它们交给缺省的异常处理程序,用户可不必对其处理,也就是程序会直接停掉.

三、异常体系

异常类和异常对象都可被抛出,他们都具备可抛性,是Throwable体系独有特点,Throwable类是Java语言中所有错误或异常的超类,只有这个体系中的类和对象才可以通过Java虚拟机或者 Java throw语句抛出,类似地,只有此类或其子类之一才可以是catch子句中的参数类型.

三、五个关键字

try,catch,finally,throw,throws,throws用在函数上,抛出异常类,可以有多个,豆号分割,thorw定义在函数内,后面跟的是异常对象,一些方法(或者功能,比如IO的一些方法)通过throws excepiont,再加载方法后申明抛出异常(提高安全性,让调用者处理),我们调用这个方法时必须处理或继续抛出才可调用,否则编译错误,这里也体现了异常的两种处理方式一种处理,一种继续抛出.

三、异常处理

1、单异常处理

try{
  //需要被检测的代码,抛出异常后,try部分下面的语句不再执行
}catch(//异常类 变量){没有异常catch将被忽略,主要2法,getMessage(),printStackTrace()(这个是jvm默认调用的方法)
  //处理异常的代码,catch中不建议不处理或直接打印Stack或sysout,可以将异常记录日志文件
}finally{  
  //一定执行的语句,如数据库连接不管报不报错执行完都要关闭
}			

2、多异常处理

1、建议申明具体的异常,这样可针对性处理.

2、多个异常多个catch,父类catch放在下面,否则执行不到,编译错误,相当于在return语句下面写代码

3、函数当中有异常发生没处理时,这个函数就结束了,所以多个异常不会同时发生,可以利用多态传递个Exception类,但是没有针对性的处理

4、catch中不写东西,相当于把问题隐藏了,程序继续往下执行.

四、自定义异常

1、既然java能对异常进行异常对象封装,我们也能对特定异常问题进行对象封装,这就是自定义异常,比如说我们可以规定除数不能小于0,否则抛异常.

2、自定义的异常java不认识,只能手动抛出(throw),非自定义的Java识别会自动抛出,我们也可手动抛出java存在的异常.

3、使用自定义异常有如下几步:

  1.通过继承java.lang.Excepion类来声明自己的异常类.

  2.在适当的位置生成自定义异常的实例,并用throw语句抛出.

  3.在方法的申明部分用throws语句申明该方法可能抛出的异常.

例:

public class MyException extends Exception{
    private int id;
    public MyException(String message,int id) {
        super(message);
        this.id=id;
    }
    public int getId(){
        return id;
    }
}
public class Test {
    public void regist(int num) throws MyException{
        if(num<0){
          throw new MyException("人数为负数,不合理",num);
        }
        System.out.println("登记人数:"+num);
    }
    public void manager(){
        try{
          regist(100);
        }catch(MyException e){
          System.out.println("登记失败,出错id:"+e.getId());//此处可写入日志
          e.printStackTrace();
        }
        System.out.println("操作结束");
    }
    public static void main(String[] args) {
        Test t = new Test();
        t.manager();
    }
}

PS:异常的误区和经验

http://www.ibm.com/developerworks/cn/java/j-lo-exception-misdirection/  

时间: 2024-08-09 14:45:43

javase(6)_异常的相关文章

C++ Primer笔记2_四种类型转换_异常机制

1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式执行的任何类型转换都可以由static_cast完成 当一个较大的算术类型赋值给较小的类型时,可以用static_cast进行强制转换. 可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全. 无法将const转化为nonconst,这个只有const_cast才可以办得到 举例:

javase(5)_面向对象

一.概述 1.面向对象是一种思想,让我们由执行者变成指挥者,执行者是面向过程,指挥者是面向对象.例如人开冰箱门,开冰箱门这个动作应该属于门而不是人,冰箱自己最清楚门应该怎么开,人只是调用了冰箱的这个动作. 2.面向对象开发例子 1.电脑坏了,找个修电脑的人,我们调用修电脑这个人修电脑的功能即可,自己不需要知道具体怎么修;2.公司老板找人完成软件开发... 3.开发的时候先想是否java已经实现了这个功能,找这个对象拿过来用,如果没有,自己造一个对象来用,自己能用别人也能用,开发就是找对象,找不到

我的学习之路_第四章_异常

一 Object 类 equals方法: 四则运算是不能操作引用类型的 ,而 == 可以操作引用类型,但是在任何时刻只要是用 == 比较引用类型,比较的永远都是地址值. 返回类型 Boolean 比较两个对象是否相等,比较的是地址值 Object 的equals方法比较的是地址值,子类可以重写此方法,比较两个对象的属性值 toString方法: 返回类型String toString()返回对象的字符串表现形式 类型[email protected]+哈希值(地址值) 看一对象的地址值,只能区分

JavaSE复习_7 异常

△子父类涉及的异常问题:      1.子类在覆盖方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类,且只能抛出异常的子集      2.如果父类抛出了多个异常,子类只能抛出父类异常的子集,如果父类的方法没有抛出异常,那么子类重写方法时一定不能抛,只能捕捉 △throw和throws:      1.throw声明在方法内部,抛出的是异常的对象.      2.throws生命在方法上,抛出的是异常类 △编译异常和运行时异常:编译异常必须对其进行处理,而运行时异常

javase(8)_集合框架_List、Set、Map

一.集合体系(不包括Queue体系) 二.ArrayList ArrayList的属性 private transient Object[] elementData; //存储元素 private int size; //数组的长度 ArrayList三个构造方法 public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; }

OD设置_异常

1. 忽略在 KERNEL32 中发生的内存访问异常 √ 忽略(传递到程序)以下异常情况 INT3 中断 √ 单步中断 √ 内存访问异常 √ 整数除以 0 √ 无效或特权指令 √ 所有 FPU 异常 √ 同时忽略一下指定的异常或者异常范围 √ 2.

javase(11)_集合框架_Queue

一.Queue Queye接口体系图 体系分析: Deque实现类:ArrayDeque, LinkedList(数组和链表实现双向队列) BlockingDeque实现类:LinkedBlockingDeque(链表实现阻塞双向队列) BlockingQueue实现类:ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue,SynchronousQueue,DelayQueue Queue源码 public interface

黑马程序员_ 异常

------- android培训.java培训.期待与您交流! ---------- 什么是异常 异常就是Java程序在运行过程中出现的错误. 如程序要打开一个不存的文件.网络连接中断.操作数组越界.装载一个不存在的类等. 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述.并封装成对象. 其实就是java对不正常情况进行描述后的对象体现. 异常的分类 Error(错误) 由Java虚拟机生成并抛出(Throwable),包括动态链接失败.虚拟机错误等,程序对其不

阿里大于短信服务_异常_01_InvalidTimeStamp.Expired

一.异常信息 dm.aliyuncs.com InvalidTimeStamp.Expired Specified time stamp or date value is expired. 二.异常原因 该错误含义为:用户发出请求的时间(由请求中携带的Timestamp参数标识)和服务器接收到请求的时间之差不在15分钟内. 一般出现该错误都是因为调用代码中时间/时区设置有误导致,请检查下相关设置是否正确. 如果需要协助,可通过钉钉群和工单方式联系技术支持. 三.解决方法 修改服务器的时区 查看和