本章目标

1. 类加载(了解)

2. 静态(重点)

3. 单例模式

本章内容

一、预备知识:

.java—-(编译。javac)——>.class——(jvm解释(java))———->看到运行结果
.java——(编译)—->.class(和类对应)——-lvm解释——》看到结果

1. JVM及程序的生命周期


当通过java命令运行一个Java程序时,就启动了一个Java虚拟机进程。Java虚拟机进程从启动到终止的过程,称为Java虚拟机的生命周期。在以下情况中,Java虚拟机将结束生命周期。
当Java虚拟机处于生命周期中时,它的总任务就是运行Java程序。Java程序从开始运行带终止的过程称为程序的生命周期,它和Java虚拟机的生命周期的一致的。
Day13static关键字及单例模式 - 图1
类的加载、连接及初始化(笼统的称之为类加载)
当Java程序需要使用某个类时,Java虚拟机会确保这个类已经被加载、连接和初始化。

  • 加载:查找并加载类的二进制数据
    加载具体是指把类的.class文件中的二进制数据读入到内存中,把它存放在运行时数据区的方法区内(jdk1.8之后为元数据区)接着会形成一个Class类型的对象。Class类型的对象中封装的是类的内部结构(如一个类中定义了什么样的属性、定义了什么样的方法等等。。。。。)
  • 连接:给静态变量会分配空间
  • 初始化:给类的静态变量赋予正确的初始值,执行静态块

    二、静态

    1. 静态属性


    类的静态属性随着类的的产生而产生,随着类消亡而消亡。
    类的非静态属性随着对象的产生而产生,随着对象的消亡而消亡
    非静态属性或者方法时属于对象,必须创建对象进行调用。
    静态属性或者方法属于类,可以直接用类名调用
    静态属性的应用场合:在程序需要共享的信息可以考虑做成静态的,前提是共享的信息信息量不是太多。

    2. 静态方法


    静态方法:属于类
    调用方式:类名.方法(参数).
    静态方法中不能直接使用非静态成员,不能使用this
    静态的方法应用场合:通用的工具类的方法,适合定义成静态方法,对静态属性的操作可以放在静态方法中

    3. 静态块


    static{
    }
    静态块中不能直接使用非静态成员,不能用this
    在类加载(细化发生在类的初始化阶段)的过程中执行一次
    静态块一般用来给静态属性赋初始值,如果给静态属性赋的初始值需要经过复杂的流程控制语句参与的运算而得到,非常适合在静态块中实现

    4. final static

    最终的
    属性名称纯大写

    三、静态应用之单例设计模式

    1. 单例模式:创建型设计模式,关注如何创建对象

  • 每个类只有一个实例

  • 类必须自行创建这个实例
  • 必须给外界提供接口,获得这个唯一的实例

    2. 实现方式

  • 设置私有的构造方法

  • 设有一个私有的静态属性
  • 有一个公有的给外界返回对象的静态方法

    3. 单例的应用场景:


    单例能够保证唯一的实例,比如系统中的任务管理器、回收站等,都是典型的单例场景,
    在做项目的时候,单例对象多见于需要在整个项目中做共享资源的场景

    4. 分类:

  • 饿汉式: ```java public class Test { private Test(){

    }

    private static Test instance = new Test();

    public static Test getIntance(){ return instance; }

}

  1. - 懒汉式:
  2. ```java
  3. public class Test1 {
  4. private Test1(){
  5. }
  6. private static Test1 instance=null;
  7. public static Test1 getInstance(){
  8. if(instance == null){
  9. instance = new Test1();
  10. }
  11. return instance;
  12. }
  13. }

`

`