黑马程序员--面向对象

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

 

1. 理解面向对象

   (1) 类:是对现实生活中事物的描述

        对象:对这类对象事物,实实在在的个体

   (2) 面向对象是相对面向过程而言,面向对象和面向过程都是一种思想,面向过程强调的是功能行为,面向对象是将功能进行封装,强调具备了功能的对象。

   (3) 当多个引用指向同一个对象时,那么他们的内存地址值是相同的;在内存中,成员变量存在于堆内存,而局部变量存在于栈内存中。

   (4) 匿名对象格式:

             —— new Person().getName()

             —— new Person().getAge()

             —— new Person().eat()

   这是三个不同的对象,在内存中都有各自的空间/地址,独立存在

   (5) 封装:隐藏内部实现,对外提供功能

         —— 好处:将变化隔离,便于使用,提高安全性,提高重用性

         —— 实现:通过get/set方法对属性进行封装

         —— 成员变量如果不赋值,会有默认初始化值;而局部变量必须赋值,否则不能进行运算

   (6) 构造代码块 {...} —— 作用:给所有对象初始化,并对不同对象初始化共性内容,构造代码块优先于构造函数执行

   (7) this关键字 : 在类中使用,调用的是当前对象,且this是一个引用;在构造函数中使用this()可调用其他构造函数,但必须在第一行,和super()类似

 

2. 静态 static

    (1)定义:常用于修饰成员变量、成员函数,它在内存中存在于方法区中,并随着类的加载而存在,可以称其为类变量

    (2)特点:随着类的加载而加载、优先于对象的存在、被所有对象共享、直接被类名调用(类名.成员)

    (3)使用范围:被多对象调用,如果过多使用static变量,会消耗大量内存。

    (4)类变量和实例变量的区别

         ——存放位置:类变量随着类的加载而加载,并存在方法区中;而实例变量是随着对象的建立而存在堆内存中。

         ——生命周期:类消失则类变量随着消失;而实例变量消失的前提是,对象消失

    (5)使用static的注意事项

         ① 静态方法只能访问静态成员

         ② 静态方法中不可以存在this、super关键字

         ③主函数是静态的

    (6)主函数:优先加载到方法区中,重载它

    (7)什么时候使用静态?

        ①什么时候使用静态变量? ——在多对象中出现共享数据时,可将该数据用静态修饰

        ②什么时候使用静态函数? ——当功能内部没有访问到非静态数据且没有使用到对象的特有数据时,可将该功能用静态修饰

   (8)静态工具类:私有化构造函数,使其不能被实例化,并提供公有、静态的功能。

   (9)帮助文档的制作:javadoc  -d  文档名  -author  -version

   (10)静态代码块 :static{...},特点是随着类的加载而加载,且只需加载一次。

         一个类中包含静态代码块、代码块、成员,他们的执行顺序是:

           ①new一个类,类先加载到内存

            ②执行static代码块

           在内存中开辟空间、分配内存地址

           ④在堆内存中建立对象特有属性并默认初始化值

            ⑤对属性显示初始化

            ⑥对对象进行构造代码块初始化

            ⑦对对象的构造函数初始化

            ⑧将内存地址赋给栈内存中的引用变量

   (11)单例设计模式:保证对象唯一

              ——步骤:①将构造函数私有化 ②在本类中建立一个本类对象 提供一个公有、静态的方法获取实例  

              ——饿汉式(推荐使用)

              public class Single {
               private Single(){}
 
               private static Single s=new Single();
 
               public static Single getInstance(){
                            return s;
          }
 
}

              ——汉式 

              public class Single {
               private Single(){}
 
               private static Single s=null; 
               public static Single getInstance(){

                         if(s==null){

                               synchnoized(Single.class){//加上同步,防止多线程创建多个实例,使用的锁是字节码文件对象

                                   if(s==null){

                                       return s;

                                    }

                               }

                       }

              }
 
}

 

3.继承(extends)

   (1)概述:必须有所属关系(is a),java中支持多继承,调用时,应该创建最子类的对象

    (2)子父类中变量的特点:子类可以使用super.属性名方法父类的属性,super只能在第一行

  子父类中构造函数的特点:子类一定会访问父类中的构造函数

    (3)重写(覆盖)子类的方法名、参数列表、返回值类型必须和父类的一致且子类的访问权限不能小于父类,且静态不能覆盖非静态。

    (4)重载:如果两个函数的方法名相同,参数列表不同,且与返回值无关,那么他们是重载关系

    (5)结论:

       ①子类中所有的构造函数,默认都会访问父类的空参数构造函数

       super()只能在第一行

       ③子类实例化,都会走父类且this、super不能同时在第一行

   (6)final修饰符

       final修饰类:类不能被继承

       final修饰方法:方法不能被重写

       final修饰变量:变量变成常量,不能再次赋值,常量名应全部大写

   (7)抽象类:不能实例化的类

        抽象类可以包含非抽象方法

        抽象方法只能存在抽象类中

        子类继承抽象类必须覆盖抽象方法,若子类未覆盖所有抽象方法,那么子类还是一个抽象类

  (8)模版方法模式——将变化的代码封装成模版

  (9)接口:是一个特殊的抽象类

       特点:在接口中包含全局静态常量,全局抽象方法,不能被实例化;子类用implemens来实现接口,可实现多个接口;接口可以继承多个接口。

 

4.多态:事物存在的多种体现形态

  (1)多态的基本体现:父类的引用指向子类对象,Person p=new Student()

   (2)多态的前提:多子类继承父类,子类覆盖父类的方法

   (3)多态的好处:提高代码复用性、程序扩展性

   (4)多态的应用:成员函数在多态调用中,编译时参考左边,运行时参考右边;而成员变量无论编译、运行都参考左边

   (5)多态的扩展示例(PCI主板示例)

   (6)Object类:所有类的父类,提供了最基本的方法

         equals():用于两个对象的比较(比较内存地址值)

         toString():返回该对象的字符串

         hashCode():获取对象的哈希值

         getClass():获取类的示例

         getMethod():获取对象的方法组       

 

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

  

 

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值