- static 关键字的使用(从生命周期的角度理解)
- static修饰属性:静态变量(类变量)
- static修饰方法
- 属性是可以被多个属性共享的,不会随着对象的不同而不同的,就可以声明为static的
- 操作静态属性的方法通常设置为static的,工具类中的方法习惯上声明为static的,例如Math
- 类中的常量也声明为static
- static修饰属性:静态变量(类变量)
- 单例设计模式
- 即采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例
- 如何实现?(饿汉式)
- 私有化类的构造器
- 内部创建类的对象,要求此对象也必须是静态的
- 提供公共的静态方法返回类的对象
- 懒汉式
- 私有化类的构造器
- 声明当前类对象,没有初始化,此对象也必须是static
- 声明public、static的返回当前类对象的方法
- 饿汉式和懒汉式的区别
- 代码块(初始化块)
- 用来初始化类、对象
- 只能使用static来修饰,分为静态代码块和非静态代码块
- 静态代码块内部可以有输出语句,随着类的加载而执行,且只执行一次,可以初始化类的一些信息
- 非静态代码块内部可以有输出语句,随着对象的创建而执行(new的时候),且每创建一个对象就执行一次非静态代码块,可以考虑在创建对象时,对对象的属性进行初始化
- 如果一个类中定义了多个静态(非静态)代码块,则按照声明的先后顺序执行;静态代码块的执行优先于非静态代码块的执行;代码块的执行先于构造器
- 执行顺序:由父及子,静态先行
- final关键字
- final可以用来修饰的结构:类,方法,变量
- 用来修饰一个 类,此类不能被其他类所继承,比如String、System
- 用来修饰一个方法,表明此方法不可以被重写,例如Object类中的getClass()
- 用来修饰变量,此时的“变量"就称为是一个常量,就不能再被修改
- Static final用来修饰属性:称为全局常量;
- 抽象类与抽象方法:
- abstract关键字:
- 可以用来修饰类、方法
- 修饰类称为抽象类,此类不能实例化,但是抽象类中仍然提供构造器,便于子类实例化时调用;抽象类都会提供抽象类的子类,完成相关操作
- 抽象方法:只有方法的声明,没有方法体,public abstract void method();包含抽象方法的类一定是抽象类,反之,抽象类中可以没有抽象方法
- 若子类重写了父类中的所有抽象方法后,方可进行实例化,若没有完全重写,则子类也只能是抽象类
- 抽象类的匿名子类
- abstract关键字:
- 模板方法设计模式
- 接口interface
- Java8新特性
- 定义静态方法和默认方法
- 接口中定义的静态方法只能通过接口来调用,例如CompareA.method()
- 通过实现类的对象,可以调用接口中的默认方法;如果实现类重写了接口中的默认方法,调用时仍然调用的是重写后方法
- 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,调用的是父类中的同名同参数方法---->类优先原则
- 如果实现类实现了多个接口,而这多个接口中定义了多个同名同参数的默认方法,那么在实现类中没有重写此方法的情况下,--->接口冲突报错,就需要在实现类中重写此方法
- 定义静态方法和默认方法
- Java8新特性
- 内部类
- 如何实例化成员内部类的对象?
- 如何在成员内部类中调用外部类的结构?
- 局部内部类的使用?