黑马程序员——JAVA 面向对象知识点总结(三)

来源:互联网 发布:幽游白书网络对战 编辑:程序博客网 时间:2024/06/07 04:34
------- android培训、java培训、期待与您交流! ----------

多态

    可以理解为事物存在的多种体现形态。 

    1、多态的体现。父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。
    2、多态的前提。必须是类与类之间有关系。要么继承,要么实现。通常还有一个前提:存在覆盖。
    3、多态的好处。多态的出现大大的提高程序的扩展性。
    4、多态的弊端:虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。
在多态中成员函数的特点:

      在编译时期,参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有,编译失败。

      在运行时期:参阅对象所属的类中是否有调用方法。

      简单总结就是,成员函数在多态调用时,编译看左边,运行看右边

      在多态中,成员变量的特点,无论编译和运行,都参考左边(引用型变量所属的类)。在多态中,静态成员函数的特点,无论编译还是运行,都参考左边。

Object:是java中所有对象的直接或者间接的父类。它里面的方法都所有对象都具备的。
常见方法:
boolean equals(Object obj):用于比较两个对象是否相同。
String toString(): 获取对象的字符串表现形式 类名@哈希值 :getClass().getName()+"@"+Integer.toHexString(hashCode());
Class getClass():获取正在运行的对象所属的字节码文件的对象。也就是说如果Demo d = new Demo();d.getClass():获取的就是d执行的对象所属的字节码文件Demo.class对象。
通常在自定义对象时,因为对象中都有自己特有的描述,所以都会建立对象自身的特有比较方法,或者字符串表现形式。也就是说,会覆盖Object中的方法。

内部类的访问规则:

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

2、外部类要访问内部类,必须建立内部类对象。

访问格式:

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

        格式  外部类名.内部类名.  变量名=外部类对象.内部类对象;

                        Outer.Inner      in   =  Outer().new Inner();

2、当内部类在成员位置上,就可以被成员修饰符所修饰。比如, private:将内部类在外部类中进行封装。static:内部类就具备static的特性。当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。

       在外部其他类中,如何直接访问static内部类的非静态成员呢——  new Outer.Inner().function();。

       在外部其他类中,如何直接访问static内部类的静态成员呢——uter.Inner.function();。

       注意:当内部类中定义了静态成员,该内部类必须是static的。当外部类中的静态方法访问内部类中时,内部类也必须是static的。内部类定义在局部时,不可以被成员修饰符修饰。可以直接访问外部类中的成员,因为还持有外部类中的引用。但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。

匿名内部类:
      1,匿名内部类其实就是内部类的简写格式。
      2,定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。
      3,匿名内部类的格式:  new 父类或者接口(){定义子类的内容}
      4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。
      5,匿名内部类中定义的方法最好不要超过3个。

比如:

show(new Inter()
{
      public void method()
      {
           System.out.println("method show run");
      }
});


异常处理

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

      对于问题的划分:两种:一种是严重的问题,一种非严重的问题。对于严重的,java通过Error类进行描述。对于Error一般不编写针对性的代码对其进行处理。对于非严重的,java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理。无论Error或者Exception都具有一些共性内容。比如:不正常情况的信息,引发原因等。

异常体系:

    Throwable

        |———Error

        |———Exception

                          |————RuntimeException

异常体系的特点:异常体系中的所有类以及建立的对象都具有可抛性,也就是说可以被throw和throws关键字所操作。只有异常体系具备这个特点。

java 提供了特有的语句进行处理。
try
{
        需要被检测的代码;
}
catch(异常类 变量)
{
        处理异常的代码;(处理方式)
}
finally
{
        一定会执行的语句;
}

     对捕获到的异常对象进行常见方法操作如:String getMessage():获取异常信息。
     同时在函数上声明异常。便于提高安全性,让调用出进行处理。不处理编译失败。对多异常的处理。声明异常时,建议声明更为具体的异常。这样处理的可以更具体。对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。建立在进行catch处理时,catch中一定要定义具体处理方式。不要简单定义一句 e.printStackTrace(),也不要简单的就书写一条输出语句。

自定义异常

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

       当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理,要么在函数上声明让调用者处理。一般情况在,函数内出现异常,函数上需要声明。
       因为父类中已经把异常信息的操作都完成了。所以子类只要在构造时,将异常信息传递给父类通过super语句。那么就可以直接通过getMessage方法获取自定义的异常信息。自定义异常,必须是自定义类继承Exception。
       继承Exception原因,异常体系有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。只有这个体系中的类和对象才可以被throws和throw操作。

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

throws和throw的用法

       throw定义在函数内,用于抛出异常对象,throws定义在函数上,用与抛出异常类,可以抛出多个用逗号隔开。当函数内容有throw抛出异常对象,并未进行try处理。必须要在函数上声明,都在编译失败。

       注意,RuntimeException除外,也就是说,函数内如果抛出的RuntimeException异常,函数上可以不用声明。如果函数声明了异常,调用者需要进行处理,处理方法可以throws可以try。、

异常有两种

  编译时被检测异常

               该异常在编译时,如果没有处理(没有抛也没有try),编译失败。该异常被标识,代表这可以被处理。

  运行时异常(编译时不检测)

               在编译时,不需要处理,编译器不检查。该异常的发生,建议不处理,让程序停止。需要对代码进行修正。

异常的好处:

      1、将问题进行封装。

      2、将正常流程代码和问题代码想分离,方便与阅读。

异常的处理原则:

      1、处理方式有两种:try或者throws。

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

      3、多个catch,父类的catch放到最下面。

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

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


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