static应用知识:代码块

  • Post author:
  • Post category:其他


4.1 代码块的分类、作用

代码块概述 代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外。 在Java类下,使用 { } 括起来的代码被称为代码块 。

4.2 代码块分为

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

package code;
​
public class StaticDemo1 {
    //静态代码块,属于类,优先加载一次,自动触发执行
    //作用,可以初始化静态资源
    public static String name;
    static {
        System.out.println("=====静态代码块被触发执行=====");
        name = "张三";
    }
​
    public static void main(String[] args) {
        System.out.println("====main方法被执行=====");
    }
}

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

package code;
​
public class StaticDemo2 {
    public String name;
    public StaticDemo2(){
        System.out.println("无参构造器被触发执行");
    }
    //实例代码块,无static修饰,属于对象,每次构造对象时都会被触发执行
    {
        name = "张三";
        System.out.println("====实例代码块被执行======");
    }
    public static void main(String[] args) {
        StaticDemo2 s1 = new StaticDemo2();
        System.out.println(s1.name);
        StaticDemo2 s2= new StaticDemo2();
        System.out.println(s2.name);
​
​
    }
}

4.3 静态代码块的应用案例

斗地主

需求:在启动游戏房间的时候,应该提前准备好54张牌,后续才可以直接使用这些牌数据。

package code;
​
import java.util.ArrayList;
​
public class StaticDemo3 {
    //private本类访问 public 全部访问 公开
   public static  ArrayList<String> cards = new ArrayList<>();
   static {
       //正式做牌
       //定义一个数组存储全部参数
       String[] sizes = {"3","4","5","6","7","8","9","J","Q","K","A","2"};
       //花色
       String[] colors = {"♥","♠","♦","♣"};
       //遍历点数
       for (int i = 0; i <sizes.length ; i++) {
           //遍历花色
           for (int j = 0; j < colors.length; j++) {
               String card = sizes[i] + colors[j];
               cards.add(card);
           }
       }
       //加入大小王
       cards.add("小🃏");
       cards.add("大🃏");
   }
    public static void main(String[] args) {
        //模拟初始化54张牌
        System.out.println("新牌:" + cards);
    }
}

4.4 静态代码块的作用是什么?

如果要在启动系统时对静态资源进行初始化,则建议使用静态代码块完成数据的初始化操作。

5 static应用知识:单例设计模式

设计模式、单例模式介绍、

5.1 饿汉单例设计模式

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

设计步骤: 定义一个类,把构造器私有。 定义一个静态变量存储一个对象。

package code;
​
        import javax.swing.*;
​
public class singleinstance {
    //使用饿汉单例
    //获取对象前已经准备好了
    //定义一个静态变量存储一个对象
    public static singleinstance instance =new singleinstance() ;
​
    //1.私有构造器
    private  singleinstance(){
​
    }
}

package code;
​
public class Test1 {
    public static void main(String[] args) {
        singleinstance s1 = singleinstance.instance;
        singleinstance s2= singleinstance.instance;
        System.out.println(s1 == s2);//true
    }
}

5.2 饿汉单例的实现步骤?

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

5.3 懒汉单例模式

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

设计步骤: 定义一个类,把构造器私有。 定义一个静态变量存储一个对象。 提供一个返回单例对象的方法

package code;
​
public class singleinstance2 {
    //2.定义一个静态成员变量存储对象
    //私有化防止外部测试出错,
    private   static  singleinstance2 instance;
​
    //3.提供一个方法,对外返回单例对象
    public static singleinstance2 getInstance(){
        if(instance == null){
            //第一次拿对象创造对象
            instance = new singleinstance2();
​
        }
        return  instance;
    }
    //1.私有构造器
    private singleinstance2(){
​
    }
}
package code;
​
import org.w3c.dom.ls.LSOutput;
​
public class Test2 {
    public static void main(String[] args) {
        //满汉单例
        singleinstance2 s1 = singleinstance2.getInstance();
        singleinstance2 s2 = singleinstance2.getInstance();
        System.out.println(s1 == s2);//true
​
    }
}

5.4 懒汉单例的实现步骤?

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



版权声明:本文为weixin_55872194原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。