我们知道当我们处理异常的时候,一个是声明,另外一个是捕捉。

捕捉:异常处理的捕捉方式,这是可以对异常进行针对性处理的方式。具体格式是:

 try
{ //需要被检测的异常 }
catch(异常类 变量)//类似于函数,变量用来接受发生异常的对象的(参数)
{ //处理异常的代码块 }
finally
{ //一定会被执行的代码 }

那么什么时候用捕捉,什么时候用声明呢?有的是把异常暴露出去,有的是不暴露异常。

我定义合理的功能,功能没有问题,你胡乱传入参数出现的异常,这个时候我就得把异常信息返回给你。如果建立功能的时候,自己能够处理得了,那么就自己处理,如果自己处理不了,那就直接抛出去。一个形象的例子:

我们楼内有灭火器,我们就建立了出现明火的预先处理。我们定义了处理方式,二十多年不出问题也没事。但是一旦出现问题,我们就建立灭火器这个预先处理方式。但是如果此时整个房子着了,这个时候即处理不了了,只能打电话给火警了。

放到try当中的东西是需要检查的不需要检查的就不用管了。catch原则,人家抛的什么问题,我们就针对这个问题处理。生活例子:比如说一个小感冒,自己就能够干好,干嘛非得去医院哇。所以,catch要有针对性的处理。

 class Demo
{ int[] arr = new int[]; void getValue(int num)
{ try
{ System.out.println(arr[num]);//这里可能出现异常,那么我们就在这个地方来检测 }
catch(IndexOutOfBoundsException e)//这里要有针对性的调用异常类型,进行处理
{ System.out.println("IndexOutOfBoundsException");//对异常进行处理后,程序继续往下进行 } } } class ExcepDemo2
{ public static void main(String[] args) { Demo d = new Demo();
d.getValue(); //如果这个地方出现异常的话,就会被getValue方法捕捉到,进而进行处理 } }

这里还有一种情况就是,在我们有多个catch的时候,也就是一个函数上声明了多个异常,这个时候在针对性处理的时候,我们就需要有多个catch对其进行处理。这里有个小细节需要注意一下:

 class Demo
{ void getValue(int[] arr,int num)
{ try
{ System.out.println(arr[num]); }
catch(IndexOutOfBoundsException e)
{ System.out.println("IndexOutOfBoundsException"); }
catch(NullPointerException e)
{ System.out.print("NullPointerException"); } } } class ExcepDemo2
{ public static void main(String[] args) { Demo d = new Demo();
int [] arr = new int[];
d.getValue(null,);
d.getValue(null,);
} }

如果处理多个catch的时候,出现了多个异常,只能捕捉一个。还有我们如果我们担心发生第三种异常的话,我们会增加一个异常处理,但是如果这个异常类是其他异常类的父类的话,一定要放到最下面。

即:

 class Demo
{ void getValue(int[] arr,int num)
{ try
{ System.out.println(arr[num]); }
catch(IndexOutOfBoundsException e)
{ System.out.println("IndexOutOfBoundsException"); }
catch(NullPointerException e)
{ System.out.print("NullPointerException"); }
/**
*这个地方Exception是IndexOutOfBoundsException 和 NullPointerException父类如果
*这个父类放到头部的话,那么出现的异常都被Exception捕捉了,那么下面的也就成了废
*话
*/
catch(Exception e)
{ System.out.println("Unokown Exception!"); } } }

如果把Exception这个放到头部的话,我们会编译失败提示:

异常处理的原则:

  异常就是问题。java已经提供给我们常见的描述,我们只需要拿过来用就可以了。描述这个对象,抛出就可以了。如果出现的问题,java没有给出指定的异常类描述,这个时候我们就需要自己来描述。那么try什么时候用呢?你只要使用了声明了异常的类方法,这个时候如果我们能够处理得了,这个时候就该用try。你只要没说,我就不处理,否则盲目的处理问题,只会在问题真正出现的时候,隐藏了要描述的异常。

  函数内部,如果抛出需要检测的异常,那么函数上必须要声明,否则必须在函数内用try..catch捕捉,否则编译失败。

  如果调用到了声明异常的函数,要么try...catch...要么throws,否则编译失败。

  什么时候catch?什么时候throws?

    功能内部可以解决用catch,解决不了用throws告诉调用者,由调用者来解决。

  一个功能抛出多个异常,那么调用时要用多个catch进行针对性的处理,有几个异常抛几个,抛几个异常,我们就catch几个。

java学习面向对象之异常之二的更多相关文章

  1. java学习面向对象之异常之一

    一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...

  2. java学习笔记之OOP(二)

    java学习笔记二.面向对象[OOP]Object Oriented Programming 一.三大特性: 1.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用 ...

  3. Java学习---面向对象的远程方法调用[RMI]

    基础知识 分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果. 常见的分 ...

  4. 1.13(java学习笔记)异常机制

    异常不同于错误,它是程序运行时产生的未知问题. 如果把程序比喻成一辆汽车,那么汽车开着开着突然前面出现了一个大石头挡住了路,这就叫异常. 那么出现了这个异常我们需要去处理,比如打电话给公路管理局,让它 ...

  5. 我java学习时的模样(二)

    去掉自己浮躁的心 工作了三年,见识过高山,也见过低估,高山同大神一起共事,低估是几家特别烂的外包公司,现在有了另一种心境.已经开始重视自己,去掉当初浮躁的心. 毕业的一两年内,是人成长特别快的时期,也 ...

  6. #Java学习之路——基础阶段二(第五篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  7. java学习面向对象之接口

    上一节当中我们说道抽象类,抽象类当中的方法可以是抽象的也可以是非抽象的,那么当抽象类中所有方法都是抽象的时候,我们就可以把它重新定义为接口.代码示例: abstract class Animal { ...

  8. java学习面向对象之父子构造函数初始化

    在之前讲到java面向对象继承的时候,我们只讲到了两个比较重要的知识点,一个是父子类当中有同名的成员变量,这个时候,我们引入了super这个关键字来区分这两个同名成员变量,除此之外,我们还讲到了父子同 ...

  9. 201521123103 《java学习笔记》 第十二周学习总结

    一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 二.书面作业 将Student对象(属性:int id, String name,int age,double ...

随机推荐

  1. NoteExpress格式化复制指定输出样式

    在NoteExpress中没有看到为命令“选中的题录右击 => 复制题录 => 格式化复制”指定输出样式的明确配置项,但格式化复制的输出样式也是可以变化了,随细节大面板里的“预览”标签页里 ...

  2. 路E施工管理ERP系统

      前  景   目前公路工程由于点多.线长.面广.周期久.投资大等原因,管理很难到位,施工过程中存在着大量问题: 规章制度欠缺或不健全,即便是有好的规章制度,在施工过程中也往往形同虚设,不能与现场施 ...

  3. python learning_curve函数

    这个函数需要引用sklearn包 import sklearn from sklearn.learning_curve import learning_curve 这个函数的调用格式是: learni ...

  4. javascript技巧字典【转藏】

    2015-12-31 js判断undefined类型 if (reValue== undefined){    alert("undefined");    }  发现判断不出来, ...

  5. .net下载文件方法

    1.以文件流下载 byte[] fileStr=new byte[5]; MemoryStream btMs = new MemoryStream(fileStr); //以字符流的形式下载文件 by ...

  6. dense_rank()+hash提示改写优化SQL

    数据库环境:SQL SERVER 2005 今天看到一条SQL,返回10条数据,执行了50多S.刚好有空,就对它进行了优化,优化后1S出结果. 先看下原始SQL SELECT t1.line_no , ...

  7. wamp不能使用phpmyadmin,提示“You don't have permission to access /phpmyadmin/ on this server.” 转载

    换了win8之后wamp明显不怎么好用了,显示80端口被system占用,后是masql出现了403错误,多番百度谷歌找到了解决方案,这里与大家分享 当你安装完成wamp后,打开localhost或i ...

  8. [lua]尝试一种Case语法糖

    function CaseT(arg) function proxy(caller) caller.yield(r) end -- proxy return function (cond) if (c ...

  9. django添加静态文件

    最近做了一个todolist webapp,需要稍微添加css时候又忘记django的添加方法了,查看了以前的项目才想起来,所以记录一下. 1.settings.py 将以下代码放到最下面 STATI ...

  10. [Machine Learning] Probabilistic Graphical Models:一、Introduction and Overview(2、Factors)

    一.什么是factors? 类似于function,将一个自变量空间投影到新空间.这个自变量空间叫做scope. 二.例子 如概率论中的联合分布,就是将不同变量值的组合映射到一个概率,概率和为1. 三 ...