面向对象(四)内部类与异常机制

来源:互联网 发布:淘宝自动好评加分吗 编辑:程序博客网 时间:2024/06/06 03:57

内部类:

特点:

1.内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为外部类中持有了一个外部类的引用,格式是Outer.this

2.外部类要访问内部类,要建立内部类对象

 

访问方式:

1.外部访问内部类的方法:Outer.Inner in = new Outer().new Inner();当内部类定义在外部类的成员位置上,而且非私有

2.内部类访问外部类变量:Outer.this

3.当内部类在成员位置上,可以被成员修饰符所修饰:

比如,private 将内部类在外部类中进行封装;

             static 内部类就具备静态特性,当内部类被static修饰后,只能直接方而你外部类中的static成员,出现了访问局限      

注意:1.当内部类中定义了静态成员,该内部类必须是静态的;当外部类中的静态方法访问内部类时,内部类也必须是static

            2.内部类定义在局部时,不可以被成员修饰符修饰,可以直接访问外部类中的成员,因为还有外部类的引用,但是不可以访问他所在的局部中的变量,只能被final修饰的局部变量

 

内部类定义原则:

当描述事物时,事物的内部还有事物,该事物用内部类描述。因为内部事物在使用外部事务的内容。

 

匿名内部类:

1.匿名内部类其实就是内部类的简写格式  2.定义匿名内部类的前提:内部类必须是继承一个类或者实现接口

 

 

异常

1.异常由来:问题也是现实生活中的一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。其实就是java对不正常情况进行描述后的对象体现

                    问题分成两种,一种是严重的问题,一种是非严重的问题;java中对于严重问题通过Error进行描述,一般不编写针对性的代码进行处理;对于非严重的,通过Exception类进行描述,对与Exception可以使用针对性的处理方式进行处理。

2.异常机制:

Throwable

    |--Error

    |--Exception

 

3.异常处理:

try{           需要被检测的代码            }

catch(异常类 变量){            处理异常的代码:处理方式              }

finally{           一定会执行的语句            }

 

4.异常的好处:

(1)将问题进行封装          (2)将正常流程代码和问题进行处理代码想分离,方便阅读

 

5.异常的处理原则:

(1)方式有两种:try或者throws

(2)调用到抛出异常功能时,抛出几个,就处理几个,一个try对应多个catch

(3)多个catch,父类的catch放到最下面

(4)catch内,需要对伊针对性的处理方式,不要简单的定义printStackTrace输出语句,也不要不写;当捕获到异常,本功能处理不了时,可以继续在catch中抛出

 

 

 

对多异常的处理

(1)声明异常时,建议声明更为具体的异常,这样处理的可以更具体

(2)对方声明几个异常,就对应有几个catch块,不要定义多余的catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面

 

注意:

(1)在内层函数上抛出的异常,必须在外层进行处理(要么继续抛,要么编写代码处理)(RuntimeException除外),如果都不处理,最后会抛给jvm

(2)在进行catch处理是,catch块中一定要定义具体的处理方式,不要简单定义一句e.printStackTrace(),也不要简单的书写一句输出语句

 

自定义异常

因为项目中回出现特有的问题,而这些问题并未被java所描述并封装对象,所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的问题惊醒自定义的异常封装。

 

throws和throw区别

throws使用在函数上,后面跟的是异常类,可以跟多个,用逗号隔开

throw使用在函数内, 后面跟的是异常对象 throw new 类名()

 

特殊异常类:RuntimeException

Exception中的一个特殊的子类异常,RuntimeException运行时异常。

如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过;如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。

之所以不用声明,是因为不需要调用者处理,当该异常发生时,希望程序停止,因为运行是,出现了无法继续运算的情况,希望程序停止后,对代码

进行修正

 

异常的种类:

(1)编译时被检测的异常:编译时期检测到有可处理而未被处理的异常

(2)编译时不被检测的异常(运行时异常,RuntimeException及子类):出现后会直接导致程序停止的异常。建议不处理,让程序停止,需要修正代码。

 

finally:

finally中存放的是一定会被执行的的代码,通常是用来关闭资源

有一种情况不被读到:System.exit(0);系统退出,jvm停止运行。

 

异常在子父类覆盖中的体现:

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

(2)如果父类方法抛出多个异常,那么子类在覆盖该方法是,只能抛出父类异常的子集

(3)如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生异常就必须进行try处理,绝对不能抛。


 

0 0