一、static 修饰符
static 修饰符可以用来修饰成员变量、成员方法、代码块
使用static 修饰的成员变量称为静态变量,可以使用类名来调用
使用static修饰的成员方法称为静态方法,可以使用类名来调用
使用static修饰的代码块称为静态代码块(创建类的时候才会执行一次,完成对象初始化)
1.1 代码块
普通代码块 : { }
在类中直接使用大括号包含的代码块,在创建对象时,每创建一次对象就会加载一次
静态代码块:static{ }
在类中使用static{ }包含的代码块称为静态代码块,只有在加载类时才会被执行一次,只会执行一次。
1.2 属性和方法
static修饰的属性和方法属于类(class)的(属于类的),只能有一个
普通属性和方法属于对象的 (属于对象的)
被static修饰过的方法与属性与普通方法的区别:
类变量:被static修饰过的变量,在内存中只有一个拷贝,类内部可以在任何方法中直接访问。
实例变量:没被static修饰过的变量,每创建一个实例就会为实例变量分配一次内存,互不影响。
调用
在一个类中 静态方法只能调用静态属性和方法
实例方法可以调用静态属性和方法,也可以调用实例属性和方法。
二、继承
多个类中都有相同的属性和方法,从代码的复用性角度,可以提取相同属性和方法到父类中,子类继承父类。
使用 extends 关键字
( 子类 extends 父类)。
子类能继承父类什么东西和修饰符有关系,不能继承构造方法。
默认修饰符就是没有写修饰符,它的权限就是包权限
三、方法重写
重写主要发生在父类与子类之间(父类的构造方法不能被重写)
在子类中重写父类的方法,主要是为了使该方法更符合子类使用,子类如果想使用父类的属性和方法,可以使用super. 来调用父类的方法和属性。
方法重写的注意点
- 方法名必须相同
- 参数列表必须相同
- 返回值的类型相同或者是其子类
- 访问权限子类不能大于父类、
- 不能比父类抛出更多的异常
方法重写与方法重载的区别:
四、Object类
所有类的祖先类,当一个类没有显示的说明它继承谁,那么它就继承Object,
Object中有一些公共方法,所有类都可以使用
Object中的Equals方法是比较两个对象是不是同一个对象,源码中使用的是==
String里面的equals方法是比较内容是否相等,是因为String类中重写了equals方法
五、继承情况下的构造方法执行顺序
当子类对象被创建时,会先创建父类对象,因为在子类的构造方法中如果第一句没有写super(……)或者this(……),系统会默认隐藏提供super(),(调用父类的无参构造),this(……)是去调用自己重载的构造方法。
六、多态
多态:同一个引用类型,使用不同的实例而执行不同操作
系统的扩展性和维护性好,添加新功能,不修改原有的代码
七、抽象方法
使用abstract修饰的方法就是抽象方法,该方法不需要实现(就是不能有大括号)
抽象方法是希望子类去重写的
八、抽象类
有抽象方法的类一定是抽象类,抽象类不能被实例化,可以包含普通的类元素,注意抽象类中不一定有抽象方法。
九、单例模式
懒汉模式
饿汉模式
统计一个类被创建对象的次数
![](https://img-blog.csdnimg.cn/a59128919ed8440c8de825a5cbec04ad.png)
十、接口
接口代表一种功能,规范,标准
一个类只能继承一个直接父类,但是可以实现多个接口,理解为java多继承
接口的语法规定:
十一、工厂模式
简单工厂
有新的需求的时候,需要修改getPet方法,扩展性维护性不是很好
工厂方法模式
定义总的获得宠物的工厂接口
定义具体生产某种动物的工厂(实现总的工厂接口)
在获得宠物的方法中,传递的参数是工厂接口
当系统需要扩展功能时,添加新增宠物了,我们只需要定义新宠物类,新宠物的工厂就可以并入我们的老系统了