黑马程序员-Java面向对象

1. 什么是面向对象?

     将功能封装进对象,强调具备了功能的对象。
     特点: 将复杂的事情简单化, 面向对象将以前的过程中的执行者,变成了指挥者。
 
2. 类和对象的关系
     类是具体事物的抽象,概念上的定义;对象即是该类事物实实在在存在的个体。
     Java中用类描述事物就是描述事物的属性行为
 
     成员变量和局部变量的区别?
     |--成员变量: 定义在类中,整个类中都可以被访问;
                          随着对象的建立而建立,存在于对象所在的堆内存中;
                          有默认初始化值。
     |--局部变量: 只定义在局部范围内;
                          存在于栈内存中,作用的范围结束,变量空间会自动释放;
                          局部变量没有默认初始化值。
 
     匿名对象:当对对象方法仅进行一次调用时;匿名对象可以作为实际参数进行传递。
 
    
3. 面向对象的特征
     |--封装: 隐藏对象的属性和实现细节,仅对外提供公共访问方式。
          好处:将变化隔离;便于使用;提高重用性;提高安全性。
     
          构造函数     
          特点:函数名与类名相同
                    不用定义返回值类型
                    不可以写return语句
          作用: 给对象初始化
 
     |--继承:共性抽取。多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,提高代码复用性。
          好处:提高了代码的复用性;让类与类之间产生了关系,多态的前提。
          特点:Java只支持单继承,但是支持多层继承(继承体系) 
 
      |--抽象类      
          特点:1. 抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰。
                    2. 抽象方法只定义方法声明,并不定义方法实现。
                    3. 抽象类不可以被实例化
                    4. 只有通过子类继承抽象类并实现其中所有抽象方法后,该子类才可以实例化。‘
          细节:1. 抽象类中有构造函数,用于给子类对象进行初始化。
                    2. 抽象类可以定义非抽象方法。
                    3. 抽象关键字abstract不可以与final,private,static共存。
                    4. 抽象类中可以不定义抽象方法。
          
          模板方法设计模式:当功能内部一部分实现是确定的,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。
 
     |--接口:接口是对外提供的规则;是功能的扩展;接口的出现降低了耦合性。
          具有固定的成员修饰符:成员变量 public static final     
 
                                             成员方法 public abstract
          特点:1. 类与接口是实现关系implements。
                    2. 接口可以被多实现,避免了单继承的局限性。
                    3. 接口可以多继承接口。
     
     抽象类与接口的区别:
          1. 抽象类只能被单继承;接口可以被多实现。
          2. 抽象类中可以定义非抽象方法,子类可以直接继承使用;接口中都有抽象方法,需要子类去实现。
          3. 抽象类使用的是is a关系;接口使用的是like a关系。
          4. 抽象类的成员修饰符可以自定义;接口中的成员修饰符是固定的:public。
 
     覆盖与重载
          |--覆盖(override)子父类一模一样。
               注意:父类中的私有方法不可以被覆盖;
                         覆盖时,子类方法权限要大于等于父类方法权限;
                         静态只能覆盖静态。
          |--重载只看同名函数的参数列表。返回值可以相同也可以不同,无法以返回值类型作为重载函数的区分标准。
     |--多态:事物的多种体现形式
          体现:父类引用指向子类对象。
          好处:提高了程序的扩展性。
          弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以方法子类中特有的方法。
          前提:1. 必须要有关系(继承、实现)。
                    2. 通常会有覆盖操作。
 
          内部类:将一个类定义在另一个类的里面,
               访问特点:   1. 内部类可以直接访问外部类中的成员,包括私有成员。
                                  2. 而外部类要访问内部类中的成员必须要建立内部类的对象。
  
      
4. 关键字
     |--this:this代表本类对象的引用。
          什么时候使用this?
               当在函数内需要用到调用该函数的对象时,就用this。
     |--super:super代表父类引用
          作用:当子父类出现同名成员时,可以用super进行区分;
                    子类要调用父类构造函数时,可以使用super语句。
     关于super()和this()
          两个语句只能有一个定义在第一行,所以只能出现其中一个;
          因为super()或者this()都是调用构造函数,构造函数用于初始化,初始化的动作要先完成,所以一定要定义在第一行。
     |--static
          被static修饰后的成员具有的特点:    随着类的加载而加载;
                                                                 优先于对象存在;
                                                                 被所有对象所共享;
                                                                 可以直接被类名调用。
          注意点:       静态方法只能访问静态成员; 
                              静态方法中不可以写this, super关键字;
                              主函数是静态的。
     |--final可以修饰类,方法,变量
          特点: 被final修饰的类是一个最终类,不可以被继承;
                    被final修饰的方法是一个最终方法,不可以被覆盖;
                    被final修饰的变量是一个常量,只能赋值一次。
      
 
5. 异常
     Throwable:子类以父类名作为子类的后缀名。可抛出性。
          |--Error:错误,通常出现重大问题时,不编写针对代码对其处理。
          |--Exception:在运行时运行出现的一切情况,可以通过try catch finally处理。
 
     Throwable中的方法:
          |--getMessage():获取异常信息,返回字符串。
          |--toString():获取异常类名和异常信息,返回字符串。
          |--printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回值vvoid。
          |--printStackTrace(PrintStream s):通常用该方法将异常内容保存在日志文件中,以便查阅。
 
     throws和throw:
          |--throws:用于标识函数暴露出的异常;用在函数上,后面跟异常类名。
          |--throw:用于抛出异常对象;用在函数内,后面跟异常对象。
 
     异常处理:
          try{需要检测的代码}catch(异常类、变量){异常处理代码}finally{一定会执行的代码}
          注意:finally代码块只有一种情况不会被执行,就是在之前执行了system.exit(0)。
 
     自定义异常:
          步骤:1. 自定义类继承Exception或者其子类。
                    2. 通过构造函数定义异常信息。
                    3. 通过throw将自定义异常抛出。
 
     异常细节:
          1. RuntimeException以及其子类如果在函数中被throw抛出,可以不用在函数上声明。
          2. 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。
          3. 如果父类抛出多个异常,那么重写(覆盖)方法必须抛出那些异常的一个子集,不能抛出新的异常。
 
     包之间的访问:
     
 
posted @ 2015-03-19 20:28  troy健  阅读(139)  评论(0编辑  收藏  举报