浅谈异常与恋爱

el/2024/7/24 2:43:15

前面扯过一篇浅谈面向对象与女娲造人,今儿我接着扯……

在我的理解中,所谓的异常机制也就是让程序在出现某些错误的情况下还能继续执行完

如同两个人在恋爱,虽然出现各种问题,但还是希望将来能继续走下去

 

在java的异常结构中有一个顶级父类叫做Throwable,这个父类具有两个子类,分别是:

  Error

  Exception

为了便于初学者能更好的理解异常机制,我姑且先列举一些不恰当的例子:

可以这样理解Error

1.你某天很舒服的坐在沙发上看电视,你爸突然把你拉到书房里语重心长的对你说:

 “你和她不能在一起,她其实是你失散多年的亲妹妹”(神马感觉,心里一万只草泥马在奔跑对不对?)

2.终于能在一起了,尼玛突然在她房间抽屉发现当年变性手术的费用单(这次不只一万只了)。

两个例子都有一个共同点,就是你不会和她继续在一起了,你们的结合会是一种Error(错误),是硬伤!!!


对于这种根本无法解决或无法隐忍的情况就是所谓的Error,懂了吧

而在java语言中,Error则是代表硬件,jvm或代码本身存在问题

虽然你对于无法处理这一情况很不甘心,但你还是会一遍遍检查配置和你的代码,以期望能够解决

 

再看看Exception

把致命问题Error排除了(她是个好女孩),现在你和她能够在一起(程序能够继续执行)又多了一份希望

但是,你仍然不能掉以轻心

两个人相处,难免会产生一些不好的情绪,一旦你没能处理好,那么两个人的感情还是over(程序无法继续执行)

在这里,Exception就是那些你要处理的情绪问题的总称

为什么是总称呢?因为大脑产生的情绪(异常)非常复杂,还可细分为各种情绪(纠结体)……

我们判断一个人的情绪是靠经验,比如产生这种坏情绪后,她有哪些行为和反映

在java里,Exception是一个父类,它还有很多的子类(也就是各种坏情绪的封装)

 

你看,就这么简单,我们就理解了整个java的异常体系


Throwable下的两个已知子类,Error和Exception

 

  

 Exception下的各个细分的异常

 

既然我们了解了java的异常体系,也知道了Error是无法处理的,那么我们能做的就是针对Exception的操作了

也就是在恋爱过程中,我们对她坏情绪的处理,好让两个人的感情能够继续……

那么如何操作呢?

很简单,你只需要进行判断和测试,确认她的行为是否符合你经验中她这一坏情绪的反映,

然后做出处理就行了。

相信你一定知道基本的除数为0异常,这里就不再写了,任何一本基础书都有

为了避免针对性的代码造成不好理解,我们下面都写伪码

 

实例1:典型的try...catch结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//女友为什么是public?因为谁都能追
public  class  GirlFriend {
     //还记得吗?你们的故事就是从这开始的
     public  static  void  main(String[] args) {
     
     //我们用try包裹的代码来判断和测试她不稳定的坏情绪
     try  {
         她小情绪的反映
         她小情绪的行为
         她小情绪的眼神
         ……
     
     //在实际中则是Exception e,你肯定知道
     //为什么有个e对象,都说了异常也是一种类
     //所谓的catch就是捉到她坏情绪的原因,并进行处理
     catch  (工作累了异常 e) {
         //打印异常信息,你可以认为是她在诉说原因
         //实际中我们要结合场景来处理
         e.printStackTrace();
     }
     }
}

你看,这样我们就能有针对性的处理单个异常了,在try里面测试

catch里面进行处理

 

当然,有时候一个人情绪不好是由于多种原因,那么你只能小心翼翼的根据经验

来捕捉更多的异常(坏情绪的封装对象),此时你也就需要多条catch语句了

实例2:复合的catch语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
try {
    ......
catch (工作累了异常 e) {
    捶背
catch (口渴了异常 e) {
    倒水
catch (被鄙视了异常 e) {
    安慰
//这里的Exception是所有坏情绪的父类
catch   (Exception e)  {   //先子类异常,后父类异常
    各种安慰
    各种献殷勤
    各种倾听
}

为什么所有坏情绪对象(Exception)要放到最后捕捉呢?

很好理解,当你在无法确定她到底是累了,渴了还是怎么地产生的坏情绪时

你便可以认为,反正她就是特么的很烦,想闹脾气,你得处理!!!(不然就over)

 

好吧,你看到了,不论是讨好女友还是处理异常,都是一件相当不爽的事

下面我们来看看一个很简单,很朴实的关键字finally

实例3:finally语句的使用
1
2
3
4
5
6
7
8
9
10
11
try  {
     ......
     
catch  (Exception e) {
     //Todo
finally {
    不管你特么心情好不好
    反正都是老子洗碗!!!
    靠……
}

看,finally好用吧,你可以这样理解

是男人就应该默默的承担,不管有没有异常,我都执行

在java中,finally最常用的场合就是最后关闭io流对象了,可见我写的另一篇笔记

 

至此,我们已经讲完了java异常的基础操作

新手可能会问,咦?throws和throw两大关键字去哪儿了

别急,咋慢慢来,去端杯茶缓缓……

对于throws在java中的意思是,让调用处去处理这一异常(谁调用,谁处理。)

就比如说她受了一顿闷气,本来你不说还没什么,你一说她就忍不住了

把所有的火都对你发,谁让你要去惹她的?

自己可以处理却不处理,俺们就叫做throws,一般在方法后面使用

实例4:throws的用法
1
2
3
4
5
6
7
8
public  void  降低愤怒()  throws  愤怒的异常 {
     
     /*你看,在这里明明可以try...catch的
    但是却没有,把异常给抛到了调用处*/
     
     ......      //这是处理方法,此处省略N行代码
     
}

本来在降低愤怒()这一方法中可以try...catch的,但是不想,要留给招惹它的人

那就用throws吧,谁惹我谁遭殃

 

其实,女人是一种很奇怪的动物,她们有时候会假装自己生气

从而达到让你哄的目的,典型的欠try有木有……

那么,这个时候throw就发挥了作用

在java中,throw表示人为的抛出一个异常

实例5:throw的用法
1
2
3
4
5
public void throwMethod() throws Exception {
     
    throw new 发嗲了异常("干爹,你来~~"
     
}

这里在throwMethod方法中我们人为抛出了一个发嗲了异常,然后给调用处try

至于catch部分的内容,你们自己看着办……(尼玛,我才21怎么就那么邪恶了)

 

再来,我们在翻看API文档的时候也许会发现类似下面的方法

它们明明抛出了异常,而我们在使用中却没有try,这是怎么回事?

这叫做RuntimeException,也就是运行时异常,它们可try可不try

因为一旦产生这种异常就说明你的代码可能存在问题,比如数组下标越界等

此时,try...catch意义不大,检查和修改源码才是最佳选择

 

最后来说说自定义异常,自定义异常一般用的不是很多,可以这样理解:

有时候你的女友乱发脾气,完全不按套路出牌,令你不知所措,以前的经验在此也似乎失效

那么,此时我们就可以定义一个自定义异常来描述这种情况

1
2
3
4
5
public  class  CustomException  extends  Exception {
     public  CustomException(String msg) {
         super (msg);
     }
}

如果想测试的话,可以throw一个新的CustomException对象,构造方法中加入信息就可以了

然后你懂的,try...catch处理

很简单,就没必要演示了





http://www.ngui.cc/el/5557277.html

相关文章

java中的泛型总结

要我直接说出泛型是个what我还真讲不出来,这里先由一道问题引入: 定义一个坐标点类,要求能保存各种类型的数据,如:整形,浮点型,和字符串类型 既然变量类型起先不确定,那么很容易想到…

java中的IO操作总结(二)

文件的操作 这一节我们来讨论关于文件自身的操作 不浪费唾沫了,用代码说话…… 实例1:创建文件对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import java.io.File; public class Demo { public st…

java中的IO操作总结(三)

说实话,其实我并不是很喜欢Java这门语言,尽管它很强大,有很多现成的API可以调用 但我总感觉它把简单的事情弄得太过复杂,甚至有时候会让人迷失 弄不清到底是为了写出东西,还是为了语言本身 我学习的第一门编程语言是Py…

匿名内部类精讲

匿名内部类适合创建那种只需要一次使用的类,例如命令模式时所需要的Command对象。匿名内部类的语法有点奇怪,创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,匿名内部类不能重复使用。 定义匿名内部类的格式如…

如何安装安装nginx软件--nginx的自动安装

去官网下包的安装教程,可以参考:(手动安装教程) http://blog.csdn.net/u011630575/article/details/48033431 自动安装nginx软件 第一步: sudo apt-get install nginx 第二步:安装结束 nginx常用命令…

linux下安装安装pcre configure: error: You need a C++ compiler for C++ support

linux下安装安装pcre-*.** ./configure --prefix/usr/local/pcre 出现以下错误 configure: error: You need a C compiler for C support 只需要安装gcc-c即可。 (1)命令:sudo apt-get install gcc;(2)命…

ubuntu下编译php扩展的时候报缺少pcre解决办法

命令:apt-get update 命令:apt-get install libpcre3 libpcre3-dev 刚刚在编译php扩展的时候,报缺少pcre错误。 当然是想通过apt-get这个命令解决问题了,不过搜索了网络,只找到了CentOS的yum命令: yum up…

ubuntu下nginx的安装教程(过程可能有点不同)

注: 过程可能有点不同,详细可以参照下一篇博客。 http://blog.csdn.net/u011630575/article/details/48103243 第一步: 去官网下载http://nginx.org/下载nginx;下载nginx; 第二步: 解压 tar -zxvf nginx…

nginx+php(fastcgi)安装教程

安装nginx见下一篇博客: http://blog.csdn.net/u011630575/article/details/48103243 基础阶段:(搭建php前奏) 安装包 libiconv-1.1.0.tar.gz libmcrypt-2.5.8.tar.gz mhash-0.9.3.tar.gz mcrypt-2.6.4.tar.gz 第一步&…

linux命令(1):wget命令

Linux系统中的wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指&#…