您的位置:首页 > 移动开发 > Objective-C

黑马程序员——异常处理、Object类

2014-10-30 16:41 267 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


异常处理

异常的体系

Throwable

Error

特点:是由JVM抛出的严重性的问题。这种问题发生一般不针对性处理,只能修改程序。

通常出现重大问题如:运行的类不存在或者内存溢出等。

不编写针对代码对其处理。

Exception

在运行时运行出现的一些情况,可通过try catch finally异常处理语句代码块处理。

              该体系的特点:都是用父类名作为后缀,阅读性很强。

Exception和Error的子类名都是以父类名作为后缀。

 

什么是异常:就是在程序运行时发生的不正常情况。

在JAVA中用类的形式对不正常情况进行了描述和封装的异常对象。

描述不正常情况的类,称之为异常类。

 

以前正常流程代码和问题处理代码相结合,现在将正常流程代码和问题处理代码分离,以提高阅读性。

 

问题很多,意味着描述的类也很多,将其共性进行向上抽取,形成了异常体系。

 

自定义异常

当JAVA中没有定义过的异常,我们就按照JAVA异常的创建思想——面向对象,对异常进行描述,并封装成对象。

注意:如果让一个类称为异常类,必须要继承异常体系,因为只有称为异常体系的子类才有资格具备可抛性,才可以被两个关键字所操作:throws
,throw

      

异常的分类:

编译时被检测异常:只要是Exception和其子类都是,除了RuntimeException体系。这个要在方法上显式声明抛弃的异常,或者捕捉调用之时可能发生该异常的地方。

这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。这样的问题都可以针对性处理。

编译时不检测异常(运行时异常):就是Exception中的RuntimeException及其子类。不用显式声明或捕捉异常。

这种问题的发生无法让功能继续,运算无法进行,更多是因为调用者的原因导致的,或者引发了内部状态的改变导致的。那么这种问题一般不处理,直接编译通过,在运行时,让调用时的程序强制停止。让调用者对代码进行修正。

throws和throw的区别

1,throws使用在函数上。、

throw使用在函数内。

2,throws抛出的是异常类,可以抛出多个,用逗号隔开。

throw抛出的是异常对象。

      

异常处理的捕捉形式:

这是可以对异常进行针对性处理的方式。

 

具体格式:try{

//需要被检测导演的代码

}catch(异常类 变量){//该变量用于接收发生的异常对象

 

}finally{

//一定会被执行的代码。

}

              异常的注意事项:

1,子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类在覆盖方法时只能抛出父类的异常或者该异常的子类。

2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集。

简单说:子类覆盖父类,只能抛出父类的异常或者子类或者子集。

注意:如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛。那就只能try

 

多catch的时候,父类的catch放在最下面,因为所有的异常都是Exception异常的子类,它可以处理任何属于其子类的异常,下面所属子类的异常不再进行。

异常处理的原则

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

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

什么时候catch,什么时候throws呢?

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

一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。

finally关键字

不管函数是否触发异常,都一定会执行。

要想不执行,就要在catch语句块的最后一行加上System.exit(0);退出JVM。

 

作用:用于关闭(释放)资源。

 

try catchfinally组合情况

1,try catch finally

2,try catch当没有必要释放资源时,可以不用定义finally。

3,try finally异常无法直接catch处理,但是资源需要被关闭。

如图:

 

Object——所有对象的基类

1、==和equals的用法:

==怎么用?

可以用于比较基本数据类型,比较的就是基本数据类型的值是否相等。

可以用于比较引用数据类型,比较的是对象的地址值是否相等。

 

equals怎么用?

equals只能用于比较引用数据类型的。

Object提供的equals是用于比较对象地址值是否相同。

自定义类中,如果重写了equals方法,那么就是按照你自己的需求来比较的。

 

2、toString()方法

当直接把对象放在输出语句里输出时,相当于通过对象调用了toString()方法得到字符串描述,再输出结果。
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: