10.22Java学习进度

封装,static关键字,单例设计模式,继承与方法的重写:

封装基本概念:
为了避免对成员变量的赋值合法但是不合理,与现实生活不符,为了避免这种现象采用封装.
封装可以保证成员变量的合理性.

封装的实现流程:
(1)私有化成员变量,使用private关键字修饰;
(2)提供公有的get和set方法,在方法体中进行合理值的判断;
(3)在构造方法中调用set方法进行合理值的判断;
对于封装的实现,大框架可以在编译器里实现:
(1)eclipse中用右键-Source(alt+shift+s)中的带Generate的一些选项实现
(2)idea中用右键-Generate…(alt+insert)选项中选项实现

static关键字:
使用static关键字修饰成员变量表达静态的含义,该成员变量由对象层级提升为类层级被所有对象共享,该成员变量随着类的加载准备就绪,与是否创建对象无关。
static关键字就是把对象级提高到类级,在类加载时就准备完成了,而不需要创建对象(new)。
静态的成员(属性和方法)可以用 对象. 调用,但是一般推荐用 类名. 调用

类加载只做一次,包括:
(1)类名. 时会类加载.
(2)new对象 时会类加载.
(3)程序员可以用程序加载,比如Class.forName()

使用方式:
(1)在非静态的成员方法中既能访问非静态的成员也能访问静态的成员;
(成员:成员变量 + 成员方法, 静态成员被所有对象共享)
(2)在静态的成员方法中只能访问静态的成员不能访问非静态的成员;
(成员:成员变量 + 成员方法, 调用静态方法时可能还没有创建对象)
(3)只有隶属于类层级被所有对象共享的内容才可以使用static修饰;
(不能滥用static关键字)

单例设计模式:
(1)基本概念
在某些特殊场合中一个类对外提供且只提供一个对象,这样的类叫做单例类。
而设计单例类的思想和模式叫做单例设计模式,主要用于固定的场合。

(2)实现流程
a.私有化构造方法,使用private关键字修饰;
b.声明本类类型的引用指向本类类型的对象,使用private static共同修饰;
c.提供公有的get方法负责将成员变量的数值返回出去,使用static关键字修饰;

(3)实现方式
单例设计模式的实现方式有两种:饿汉式 和 懒汉式,在以后的开发中推荐饿汉式。

public class Singleton {

    // 2.提供本类类型的引用指向本类类型的对象
    // Person p = new Person();
    private static Singleton sin = new Singleton(); //饿汉式
    private static Singleton sin = null;            //懒汉式

    // 1.私有化构造方法,使用private关键字修饰
    // private修饰构造方法表示该方法只能在本类的内部使用
    private Singleton(){}

    // 3.提供公有的get方法负责将成员变量返回出去
    public static Singleton getInstance() {
        //return sin;
        if(null == sin) {
            sin = new Singleton();
        }
        return sin;
    }
}

继承的基本概念:
当多个类之间有相同的特征和行为时,可以将相同的内容提取出来组成一个公共类,让多个类吸收公共类中已有特征和行为而在多个类的内部编写自己独有特征和行为的方式,叫做继承。
使用继承可以提高代码的复用性和扩展性以及可维护性。
在Java语言中使用extends(扩展)关键字来表达继承关系。

如:
public class Student extends Person {} - 表示Student类继承自Person类
其中Person类叫做基类、父类、超类
其中Student类叫做派生类、子类、孩子类

注意事项:

(1)子类可以继承父类的成员变量和成员方法,其中私有成员变量可以继承但不可以直接使用,子类不可以继承父类的构造方法和私有方法。
(2)无论使用何种方式构造子类对象时,都会自动调用父类中的无参构造方法来初始化从父类中继承下来的成员变量,相当于在子类构造方法第一行增加代码:super()的效果。
(3)Java语言中只支持单继承不支持多继承,也就是一个子类只能有一个父类,但一个父类可以有多个子类。

方法的重写(override):
(1)基本概念
若从父类中继承下来的方法不满足子类的需求时,就需要在子类中重新写一个与父类中一样的方法来覆盖从父类中继承的版本,这种方式就叫做重写。

(2)重写的原则(笔试题)
a.要求方法名相同、参数列表相同、返回值类型相同,从jdk1.5开始允许返回子类类型
b.要求方法的访问权限不能变小,可以相同或者变大。
c.要求不能抛出更大的异常(异常机制)。