【Java基础笔记】第十五章 代码块

前言

  • 该文章为Java基础自学笔记
  • 其他内容:Java基础学习笔记目录
  • 学习用书:
    《Java核心技术 卷Ⅰ 基础知识(第10版)》
    《Java经典编程300例》

第十五章 代码块

15.1 代码块概述

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

15.2 静态代码块

15.2.1 格式

	static {
    
    ...}

15.2.2 特点

  • 需要通过static关键字修饰
  • 随着类的加载而加载,自动触发
  • 优先执行
  • 只执行一次

15.2.3 使用场景

  • 在类加载的时候做一些静态数据初始化的操作,以便后续使用
public class CodeBlockDemo1 {
    
    
    public static int account;

    static{
    
    
        System.out.println("==静态代码块触发执行==");
        account = 100;
    }

    public static void main(String[] args) {
    
    
        System.out.println("==main方法执行==");
        System.out.println(account);
    }
}
==静态代码块触发执行==
==main方法执行==
100

15.3 构造代码块(了解,用的少)

15.3.1 格式

	{
    
    ...}

15.3.2 特点

  • 每次创建对象,调用构造器执行时,都会执行该代码块中的代码
  • 在构造器执行前执行

15.3.3 使用场景

  • 初始化实例资源
public class CodeBlackDemo2 {
    
    

    private String name;

    {
    
    
        System.out.println("==构造器代码块触发执行==");
        name = "李明";
    }

    public CodeBlackDemo2() {
    
    
        System.out.println("==构造器触发执行==");
    }

    public static void main(String[] args) {
    
    
        CodeBlackDemo2 test1 = new CodeBlackDemo2();
        System.out.println(test1.name);
        CodeBlackDemo2 test2 = new CodeBlackDemo2();
        System.out.println(test2.name);
    }
}
==构造器代码块触发执行==
==构造器触发执行==
李明
==构造器代码块触发执行==
==构造器触发执行==
李明

【静态代码块案例】斗地主游戏

  • 需求:
    • 在启动游戏房间的时候,需要提前准备好54张牌,后续才可以直接使用这些扑克牌数据
  • 分析:
    • 该房间只需要一副扑克牌
    • 定义一个静态的ArrayList集合存储54张牌对象,静态的集合只会加载一份
    • 在启动游戏房间前,应将54张牌初始化好
    • 当系统启动时需要准备好54张牌数据,此时可以用静态代码块完成
  • 代码
public class StaticCodeDemo {
    
    
    public static ArrayList<String> cards = new ArrayList<>();

    static {
    
    
        String[] colors = {
    
    "♠", "♥", "♣", "♦"};
        String[] sizes = {
    
    "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        for (String size : sizes) {
    
    
            for (String color : colors) {
    
    
                cards.add(size + color);
            }
        }
        cards.add("大♛");
        cards.add("小♛");
    }

    public static void main(String[] args) {
    
    
        System.out.println(cards);
    }
}
  • 测试
[3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, J♠, J♥, J♣, J♦, Q♠, Q♥, Q♣, Q♦, K♠, K♥, K♣, K♦, A♠, A♥, A♣, A♦, 2, 2, 2, 2, 大♛, 小♛]

Guess you like

Origin blog.csdn.net/qq_15608603/article/details/122471509