image.png
    当有一个静态集合要做数据代码块时:可以直接放在静态代码块,当程序启动时,静态代码块和静态集合会优先加载,此时数据已经准备好了,可以在main方法中直接用
    static代码块可以理解为:提前为程序准备数据(static代码块,可以初始化static静态成员)

    1. package com.itheima.d3_static_code;
    2. import java.util.ArrayList;
    3. public class StaticTest3 {
    4. /**
    5. * 1. 定义一个静态的集合(静态的属于类,只会加载一次),这样整个集合只加载一个,因为当前房间只需要一副牌
    6. * 静态代码块可以初始化静态变量
    7. */
    8. public static ArrayList<String> cards = new ArrayList<>();
    9. // 定义静态集合确实和定义静态变量一样
    10. // public static int age = 18; 这里的ArrayList<String>相当于int变量类型,cards相当于变量名,new ArrayList<>()相当于赋值(值是地址)
    11. /**
    12. * 2.在程序正在运行main方法前,把54张牌放进去,后续游戏可以直接使用
    13. * 可以理解为:提前为程序准备数据
    14. */
    15. static {// 当有一个静态集合要做数据代码块时:可以直接放在静态代码块,当程序启动时,静态代码块和静态集合会优先加载,此时数据已经准备好了,可以在main方法中直接用
    16. // 3.正式做牌,放到集合中去。
    17. // a. 定义一个数组存储全部点数:类型确定了,个数确定了
    18. String[] sizes = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
    19. // b. 定义一个数组存储全部的花色:类型确定了,个数确定了
    20. String[] colors = {"♥","♠","♦","♣"};
    21. // c.遍历点数
    22. for (int i = 0; i < sizes.length; i++) {
    23. // sizes[i]
    24. // d.遍历花色 在点数里面再定义一个for循环嵌套,这样每次执行一次点数,就会把这个点数的所有花色都遍历一般
    25. for (int j = 0; j < colors.length; j++) {
    26. // colors[i]
    27. // 一张牌
    28. String card = sizes[i] + colors[j]; // 一张牌相当于每次遍历的点数,加上他对应的所有花色
    29. cards.add(card); // 将每次遍历得到的牌存储到定义的集合中
    30. }
    31. }
    32. // e. 单独加入大小王(加入到牌的集合中去cards)
    33. cards.add("大王");
    34. cards.add("小王");
    35. }
    36. public static void main(String[] args) {
    37. // 目标:模拟游戏启动前,初始化54张牌数据
    38. // 将牌全部打印出来
    39. // System.out.println("新牌:" + cards);// cards集合存储的是String类地址,但是String类比较特殊,直接打印会打印出集合中所有的字符串的值
    40. for (int i = 0; i < cards.size(); i++) {
    41. System.out.print(cards.get(i) + "\t");
    42. }
    43. }
    44. }