记录生活中的点点滴滴

0%

day14

单例设计模式:

 饿汉式

 懒汉式

类的成员之四:代码块(或初始化块)

  1. 代码块的使用:用来初始化类,对象的信息

  2. 代码块的分类:静态代码块 vs 非静态代码块

  3. 静态代码块:

    ①可以提供输出语句

    ②随着类的加载而执行,且只被加载一次

    ③使用:初始化类的加载信息

    ④内部只能调用当前类中静态的属性,方法。不能调用非静态的属性,方法

    ⑤如果定义了多个静态代码块,按照定义的先后顺序执行

    ⑥静态代码块执行的顺序要早于非静态代码块

    非静态代码块:

   随着对象的创建而执行

   每创建对象,都会执行一次

   使用:初始化对象的属性

   内部可以调用静态的:属性,方法。也调用非静态的属性,方法

   如果定义了多个非静态代码块,按照定义的先后顺序执行

   非静态代码块执行的顺序要晚于静态代码块

4.给属性赋值的位置的先后顺序:

  ①默认初始化

  ②显示初始化 / 在代码块中初始化

  ③构造器中初始化

  ④有了对象以后,通过“对象.属性”或“对象.方法”的方法,赋值

final关键字的使用:

  • final:最终的

  • final可以来修饰:变量,方法,类

  • final修饰类:此类不可以被继承,比如String / StringBuffer类

  • final修饰方法:此方法不能被重写,比如Object类的getClass

  • final修饰变量:此变量就是一个常量。比如:Math类中的PI

    使用final修饰属性,可以考虑的位置有:

     ①显示初始化

     ②代码块中

     ③构造器中使用final修饰形参,在方法调用时,在方法调用时,传递实参,给变量赋值,一旦复制,方法内不可以 修饰常量的值

  static final:所修饰的属性,称为全局常量

abstract关键字的使用:

  • abstract :抽象的

  • 可用来修饰的结构:类,方法

  • abstract修饰类:抽象类

    不可实例化

    仍然存在构造器。构造器的作用:便于子类实例化时进行调用

    通常情况下,我们会提供抽象类的子类,让子类实例化,调用父类的结构。  

    抽象类中不一定有抽象方法;抽象方法所在的类,一定是抽象类

  • abstract修饰方法:抽象方法(没有方法体)

    如果子类重写了父类的所有抽象方法,则此子类可以实例化

    如果子类没有重写父类的所有抽象方法,则子类仍为抽象类

  • 前提:抽象性使用的前提是类的继承性

模板方法的设计模式

接口的使用:

  1.接口(interface) 是与类(class)并列的结构

  2.如何定义一个接口,使用interface关键字

  3.接口中只能定义常量和抽象方法—–>JDK7.0及以前版本(JDK8.0接口中引入默认方法,静态方法)

   常量的定义:public static final修饰

   抽象方法的定义: public abstract修饰

  4.接口中不能声明构造器!接口不可以直接实例化的

  5.类与接口之间的关系:实现(implements)关系,实现接口以后,就获取了接口中声明的结构:常量,抽象方法。

   格式:class SubClass extends SuperClass implements InterfaceA

  6.类实现接口以后,要抹实现接口中的所有抽象方法,方可实例化

   要抹当前类声明为抽象类(因为内部包含从接口中获取的抽象方法)

  7.java规定:类可以实现多个接口—–>一定程度上,解决了java类的单继承的局限性

   8.java规定:接口与接口之间是继承关系,而且是可以多继承!

接口的使用:

 1.接口与具体的实现类之间存在多态性

 2.如何提供接口的匿名实现类,如何去创建匿名对象

 3.接口,实际上可以理解为定义了一套相应的功能的规范,标椎

接口的应用:

  • 工厂模式
  • 代理模式

java8规范: 接口可以定义静态方法,默认方法

  ①知识点1:接口中定义的静态方法,只能通过接口进行调用

  ②知识点2:通过实现类的对象,调用接口中的默认方法

  ③知识点3:如果类实现的接口和父类中,定义了同名同参数的方法,那抹子类在没有重写此方法的情况下

   默认调用的是父类中声明的方法。—–“类优先”原则

  ④知识点4:如果实现类实现了多个接口,接口中定义了同名同参数的方法,那抹此时对于实现类来讲,会出现接口冲突问题。

  解决方法:要求实现类必须重写接口中的方法。

  ⑤知识点5:如何在实现类的方法中调用接口中的默认方法

  接口.super.方法()

类的成员之五:内部类(InnerClass)

1.定义:java语言在一个类A的内部再定义了一个类B。

   将类B:称作内部类;类A:外部类

2.内部类,作为一个类:

  内部可以定义属性,方法,构造器等

  可以被final修饰

  可以被abstract修饰

    作为外部类的一个成员:

  可以被4种不同的权限修饰

   可以被static修饰

  可以调用外部类的结构:属性,方法等

3.内部类的分类:成员内部类(静态的;非静态的) vs 局部内部类

4.需要掌握的知识点:

  4.1 如何创建成员内部类的对象?

  4.2 如何调用外部类的结构?

  4.3 关于局部内部类在开发中的体现

部内部类的方法中调用局部内部类所在方法中定义的局部变量,要求此局部变量声明为final的。

在java7及以前的版本中,需要显示的声明为final。

在java中可以省略final的声明