1.static

  • static是静态的意思,可以修饰成员变量和成员方法。
  • static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改。

    ①修饰成员变量

  • 静态成员变量(有static修饰,属于类,内存中加载一次):常表示如在线人数信息、等需要被共享的信息,可以被共享访问。

    类名.静态成员变量(推荐)
    对象.静态成员变量(不推荐)

  • 实例成员变量(无static修饰,存在每个对象中):常表示姓名name、年龄age、等属于每个对象的信息。

对象.静态成员变量

②修饰成员方法

  • 静态成员方法(有static修饰,归属于类),建议用类名访问,也可以用对象访问。
  • 实例成员方法(无static修饰,归属于对象),只能用对象触发访问。

    ③如何使用

  • 表示对象自己的行为的,且方法中需要访问实例成员变量的,则该方法必须申明成实例方法。

  • 如果该方法是以执行一个共用功能为目的,则可以申明成静态方法。

    ④static访问注意事项

  1. 静态方法只能访问静态的成员,不可以直接访问实例成员。
  2. 实例方法可以访问静态的成员,也可以访问实例成员。
  3. 静态方法中是不可以出现this关键字的。

    ⑤static工具类

1.要求

  • 由于工具里面都是静态方法,直接用类名即可访问,因此,工具类无需创建对象,建议将工具类的构造器进行私有。

2.好处

  • 内部都是一些静态方法,每个方法完成一个功能。
  • 一次编写,处处可用,提高代码的重用性。

    ⑥代码块

    1.概念

  • 代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外。

  • 在Java类中,使用{}括起来的代码被称为代码块。

2.代码块分为

  • 静态代码块:
    • 格式:static{}
    • 特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次
    • 使用场景:再类加载的时候做一些静态数据初始化的操作,以便后续使用。
  • 构造器代码块(了解,少见)

    • 格式:{}
    • 特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
    • 使用场景:初始化实例资源

      单例模式

  • 可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。

  • 例如任务管理器对象我们只需要一个就可以解决问题,这样可以节省内存空间。

    1.饿汉单例设计模式

  • 在用类获取对象的时候,对象已经提前为你创建好了。

实现步骤:

  1. 定义一个类,把构造器私有。
  2. 定义一个静态变量存储一个对象。

    2.懒汉单例设计模式

  • 在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。

实现步骤

  1. 定义一个类,把构造器私有。
  2. 定义一个静态变量存储一个对象。
  3. 提供一个返回单例对象的方法。

    2.final

  • final关键字是最终的意思,可以修饰(类、方法、变量)
  • 修饰符:表明该类是最终类,不能被继承。
  • 修饰方法:表明该方法是最终方法,不能被重写。
  • 修饰变量:表明该变量第一次赋值后,不能再被赋值(有且仅能被赋值一次)。

    注意

  1. final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
  2. final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址值指向的对象内容是可以发生变化的。

    3.抽象类

  • 在Java中abstract是抽象的意思,可以修饰类,成员方法。
  • abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法。

    1.注意事项

  • 抽象方法只有方法签名,不能声明方法体。

  • 一个类中如果定 义了抽象方法,这个类必须声明成抽象类,否则报错。

    2.特征

  1. 类有的成员(成员变量、方法、构造器)抽象类都具备。
  2. 抽象类在不一定有抽象方法,有抽象方法的类一定是抽象类。
  3. 一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
  4. 不能用abstract修饰变量、代码块、构造器。
  5. 得到了抽象方法,失去了创建对象能力。

    3.模板方法模式

    1,使用场景说明

  • 当系统中出现同一个功能处在开发,而该功能中大部分代码是一样的,只有其中部分可能不同的时候。

    2.模板方法实现步骤

  • 把功能定义成一个所谓的模板方法,放在抽象类中,模板方法中只定义通用且能确定的代码。

  • 模板方法中不能决定的功能定义成抽象方法让具体子类去实现。