面向对象5

来源:互联网 发布:吉祥抽奖软件 编辑:程序博客网 时间:2024/06/06 05:11

---------------------- android培训java培训、期待与您交流!----------------------

内部类:将一个类定义在另一个类里面,对类里面的类就称为内部类

内部类定义在成员位置上时:

访问特点:

1.内部类可以直接访问外部类中的成员,包括私有成员

2.而外部类要访问内部类中的成员必须要建立内部类的对象。

3.当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中直接建立内部类对象:

建立格式:OuterClass.InnerClass ic=new OuterClass().new InnerClass();

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

       private:将内部类在外部类中进行封装。

       static:内部类就具备static的特性,这时只能访问外部类中的static成员,出现了访问局限。

5.在外部其他类中,如何直接访问static内部类中的非静态成员:

new OuterClass.StaticInnerClass().innerMethod();

6.在外部其他类中,如何直接访问static内部类中的静态成员:

OuterClass.StaticInnerClass.innerStaticMethod();

说明:当内部类中定义了静态成员,该内部类必须是static的。

当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事物在使用外部事物的内容。(如人身体里有心脏)

内部类定义在局部时:

1.    不可以被成员修饰符所修饰(如static)

2.    可以直接访问外部类中的成员,因为还持有外部类中的引用。但是不可以访问它所在方法中的局部变量。只能访问被final修饰的局部变量。

匿名内部类:

1.    匿名内部类其实就是内部类的简写形式

2.    定义匿名内部类的前提:内部类必须是继承一个类或者实现一个接口。

3.匿名内部类的格式:new 父类或者接口([参数]){定义的子类的内容};

4.其实匿名内部类就是一个匿名子类对象。可以理解为带内容的对象。

异常:程序在运行时出现不正常情况

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

对于问题的划分:两种:一种是严重的问题,一种非严重的问题。

对于严重的,java通过Error类进行处理。

       对于Error一般不编写针对性的代码对其进行处理

对于非严重的,java通过Exception类进行描述。

       对于Exception可以使用针对性的处理方式进行处理。

ThrowTable

       |——Error

       |——Exception

在函数上声明异常:便于提高安全性,让调用处进行处理,不处理则编译失败。

对多异常的处理:

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

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

3.在进行catch处理时,catch中一定要定义具体处理方式。不要简单的定义一句e.printStackTrace(),或简单书写一条输出语句,在实际开发中常用异常日志文件的方式进行记录,以便后续查看

自定义异常:

在实际项目工作中经常会出现一些特有的问题,而这些问题并未被java异常所描述,所有这些特有的问题可以按照java对问题封装的思想,将特有的问题进行自定义的异常封装。

当在函数内部出现了throw抛出异常对象(如:throw new NegativeException();//手动通过throw关键字抛出一个自定义异常对象),那么就必须给出对应的处理办法

1.在内部try catch处理;

2.在函数上声明让调用者处理。

一般情况在函数内出现异常,函数上需要声明。

Exception中有一个特殊的子类异常RuntimeException(运行时异常)

如果在函数内抛出该异常,函数上可以不用声明,编译一样通过

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

之所以不用再函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止(因为在运行时,出现了无法继续运算的情况,希望停止程序后对代码进行修正)。

自定义异常时,如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException。

对于Exception异常分两种:

1.    编译时被检测的异常

2.    编译时不被检测的异常(运行时异常RuntimeException及其子类)

finally代码块:定义一定执行的代码(除非系统提前退出System.exit(0))。

通常用于关闭资源(如数据库连接)

注意:catch是用于处理异常。如果没有catch就代表异常没有被处理过,如果该异常是编译时异常,那么必须声明。

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

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

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

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

当捕获到的异常,本功能处理不了时,可以继续在catch中抛出

如果该异常处理不了,但并不属于该功能出现的异常,可以将异常转换后,再抛出和该功能相关的异常

或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道,并处理,也可以将捕获异常处理后,转换新的异常抛出。

练习:写出错误答案错误的原因,用单行注释的方式:

class Demo{int show(int a,int b){return 0;}}

下面那些函数可以存在于Demo的子类中。

A.    public int show(int a,int b){return 0;}//可以,覆盖

B.    private int show(int a,int b){return 0;}//不可以,权限不够

C.    private int show(int a,long b){return 0;}//可以,和父类不是一个函数,相当于重载

D.    public show show(int a,int b){return 0;}//不可以,不符合重载的规定

E.    static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态

子类继承父类,父类中必须要有默认构造函数,除非子类定义的构造函数特别指明要调用父类中的自定义构造函数。

try语句块的throw语句后不能再有代码,因为语句执行不到。

包:包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。

不同包中的子类还可以直接访问父类中被protected权限修饰的成员。

包与包之间可以使用的权限有两种,public,protected

                            public   protected     default  private

同一个类中         ok          ok                 ok          ok

同一个包中         ok          ok                 ok

子类                     ok          ok                

不同包中             ok

代码示例

1.内部类,静态内部类:

2.局部内部类:

 

3.练习(匿名内部类):

4.自定义异常类(当除数为负时视为异常) :

4.异常应用:

---------------------- android培训java培训、期待与您交流!----------------------

详情请查看:http://edu.csdn.net/heima