4 面向对象


4.1 类和对象

  • 类:现实世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。

  • 对象:类的具体实例


4.2 成员变量和局部变量

    4.2.1 作用范围

            成员变量作用于整个类中。

            局部变量作用于方法或语句中。

    4.2.2 内存中的位置

            成员变量在堆内存中

            局部变量在栈内存中


4.3 匿名对象

        创建对象时不起名字:new Car();

        匿名对象是对象的简化形式

    4.3.1 使用情况

       1.对对象的方法只进行一次调用

       2.作为实际参数进行传递


4.4 构造函数

    4.4.1 特点

    • 函数名与类名相同

    • 没有返回值类型

    • 不可以写return语句

    4.4.2 作用

        初始化对象

    4.4.3 调用

        对象建立的时候,自动调用,且只执行一次。

        多个构造函数之间的调用,使用this关键字:this([参数,......]);[ ]表示可有可无。this只能定义在构造函数的第一行,初始化动作要先执行


4.5 this关键字

    代表它所在函数所属对象的引用

    4.5.1 作用

    • 用于区分同名变量

    • 用于构造函数之间互相调用


4.6 默认构造函数

  • 当类中没有构造函数时,系统会默认给类加入一个空参数的构造函数,方便该类进行初始化。

  • 当在类中定义了构造函数时,默认构造函数就没有了


4.7 构造代码块

    4.7.1 表示

        { },代码写在{ }里面。

    4.7.2 作用

        初始化对象

    4.7.3 调用

        对象一建立就执行,而且优先于构造函数。

    4.7.4 构造代码块和构造函数的区别

    • 构造代码块是给所有对象进行统一初始化;

    • 构造函数是给对应的对象进行初始化。


4.8 static(静态)关键字
    用于修饰成员变量和成员函数
    4.8.1 被static修饰的成员具备的特点

    • 随着类的加载而加载,随着类的消失而消失

    • 优先于对象存在

    • 被所有对象所共享

    • 可以直接被类名调用(类名.静态成员)

    • 存放在共享区(方法区(类的方法)、数据区)

    4.8.2 使用

    • 静态方法只能调用静态成员

    • 静态方法中不可以写this、super关键字

4.9 静态代码块

        4.9.1 格式

            static{

                执行语句;

            }

    4.9.2 特点

        随着类的加载而执行,优先于主函数,只执行一次。

    4.9.3 作用

        用于给类进行初始化。

    注意:静态代码块中只能访问静态成员,不能访问非静态成员

4.10 设计模式

    解决某一类问题最行之有效的方法。

    java中有23中设计模式。

    4.10.1 单例模式

        解决一个类在内存中只存在一个对象

    4.10.1.1 思想

    想要保证对象唯一:

  1. 为了避免程序过多的建立对象,首先禁止程序建立该类对象。

  2. 还为了让程序能够访问到该类对象,只好在本类中自定义一个对象。

  3. 为了方便程序对自定义对象的访问,要提供一些访问方式。

    4.10.1.2 具体实现

  1. 将构造函数私有化。(这样程序就不能够建立该类对象了)

  2. 在类中创建一个本类对象。

  3. 提供一个方法可以获取到该对象。


先初始化对象,称为:饿汉式

calss Single{

    private Single(){ }

    private static Single s = new Single();

    public static Single getInstance(){

        return s;

    }

}

对象是方法被调用时才初始化,也叫对象的延时加载,称为:懒汉式

calss Single{

    private static Single s = null;

    private Single(){ }

    public static Single getInstance(){

        if(s==null){

            s = new Single();

        }

        return s;

    }

}

调用:Single.getInstance();