一、异常的概念

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/  

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

  1. cc38b_demo_C++_异常_(2)txwtech在异常中使用虚函数-多态

    //cc38b_demo,21days_C++_异常_(2)txwtech20200121在异常中使用虚函数-多态 //--异常层次结构//*异常的类-创建自己的异常类//*异常派生-就是继承//*异 ...

  2. javase(5)_面向对象

    一.概述 1.面向对象是一种思想,让我们由执行者变成指挥者,执行者是面向过程,指挥者是面向对象.例如人开冰箱门,开冰箱门这个动作应该属于门而不是人,冰箱自己最清楚门应该怎么开,人只是调用了冰箱的这个动 ...

  3. javase(1)_基础语法

    一.java概述 1.Java语言特点:纯面向对象(一切皆对象),平台无关(JVM屏蔽底层运行平台的差异),不同的平台有不同的JVM,JVM将程序翻译成当前操作系统能执行的程序,一次编译到处运行),健 ...

  4. 黑马程序员:Java编程_异常

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 异常即对问题的描述,将问题进行对象的封装. 1. 异常体系:Throwable ...

  5. JavaSE复习_7 异常

    △子父类涉及的异常问题:      1.子类在覆盖方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类,且只能抛出异常的子集      2.如果父类抛出了多个异常,子类只 ...

  6. 黑马程序员_Java面向对象_异常

    6.异常 1.异常: 就是程序在运行时出现不正常的情况.问题也是现实生活中一个具体的事物,也可以通过Java的类进行描述,并封装成对象.Exception和Error的子类名都是以父类名作为后缀名. ...

  7. Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

    装饰器其实也是一个函数,它的参数是一个函数 ; 其它函数与装饰器之间建立联系是通过 @装饰器函数名, 感觉有点像Spring的面向切面编程 装饰器函数,如何处理原函数的参数.?  装饰器 原函数返回值 ...

  8. Python学习笔记012_网络_异常

    1,Python如何访问互联网? url + lib =  urllib >>> # 使用urllib包下的request模块 >>> >>> i ...

  9. .net core入门-发布及部署_异常(处理程序“aspNetCore”在其模块列表中有一个错误模块“AspNetCoreModuleV2")处理

    备注:本人使用开发工具:VS2017,.NET Core 2.2,其中VS2017原本自带2.1,我单独从官网下载了2.2的程序集安装包,但是没有下配套的运行环境,运行项目时出了一个问题. 以下是我在 ...

随机推荐

  1. CentOS Linux 7 提示 lsof: 未找到命令

    我们常使用 lsof -i:端口号 命令来查看某端口是否开放,如使用下面的命令,查看8080端口: lsof -i: 结果: 提示:lsof:未找到命令 解决办法 使用yum来安装lsof,命令如下: ...

  2. JavaScript之——对象Object(一)

    1. 新建对象.删除和访问: (1).新建 var obj1 = {b: 2}; //对象文本表示法 var obj2 = new Object(); obj2.a = 1; (2).访问 //第一种 ...

  3. bzoj 3876: [Ahoi2014&Jsoi2014]支线剧情【有上下界有源汇最小费用最大流】

    每条边流量有下界有费用,很显然是有上下界有源汇最小费用最大流 连边(s,1,(0,inf),0),(i,t,(0,inf),0),表示从1出发inf次从每个点结束inf次 连边(i,j,(1,inf) ...

  4. [Xcode 实际操作]九、实用进阶-(27)字符串文件(Localizable.strings)的本地化

    目录:[Swift]Xcode实际操作 本文将演示字符串文件(Localizable.strings)的本地化. 在项目[DemoApp]文件夹下点击鼠标右键,弹出右键菜单 ->[New Fil ...

  5. 记一次因证书问题导致请求失败问题SSLHandshakeException

    记一次因证书问题导致请求失败问题SSLHandshakeException 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/10989813.html 最近接一外 ...

  6. 【NOI省选模拟】小奇的花园

    「题目背景」 小奇在家中的花园漫步时,总是会思考一些奇怪的问题. 「问题描述」 小奇的花园有n个温室,标号为1到n,温室以及以及温室间的双向道路形成一棵树. 每个温室都种植着一种花,随着季节的变换,温 ...

  7. dp专题复习

    背包: 1.bzoj2287:[POJ Challenge]消失之物 2.bzoj2748:[HAOI2012]音量调节 3.bzoj2794:[Poi2012]Cloakroom 4.bzoj119 ...

  8. [Noip模拟题]统计方案​

    题目并不难,想一下就会了,我真的智商持续下降,取模情况下做除法我都没想到逆元. 总之想到逆元就好写了,还是\(meet\ in\ the\ middle\)裸题,数组开不下用\(hash/map\)存 ...

  9. TYVJ 2032 搜索

    P2032 「Poetize9」升降梯上 描述 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨 ...

  10. centos 6.x下pxe+tftp+http+kickstart无人值守安装操作系统

    1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过 ...