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