静态代码块
package com.itheima.d3_static_code; public class StaticDemo1 { public static String schoolName; /** * 静态代码块:用static修饰,属于类,与类一起优先加载一次,自动触发执行 * 作用:可以初始化静态资源 */ static { System.out.println("静态代码块被触发了"); schoolName="黑马"; } public static void main(String[] args) { System.out.println("main方法执行"); System.out.println(schoolName); } }
构造代码块(实例代码块)
package com.itheima.d3_static_code; public class StaticDemo2 { public StaticDemo2() { System.out.println("无参构造器被触发执行"); } /** * 实例代码块:无static修饰,属于对象,每次构造对象时,都会触发一次 */ { System.out.println("实例代码块被触发执行"); } public static void main(String[] args) { //理解实例代码块(构造代码块) } }
练习:斗地主游戏
需求:
在启动游戏房间的时候,应该提前准备好54张牌,后续才可以直接使用这些牌数据
分析:
- 该房间只需要一副牌
- 定义一个静态的ArrayList集合存储54张牌对象,静态的集合只会加载一份
- 在启动游戏房间前,应该将54张牌初始化好
- 当系统启动的同时需要准备好54张牌数据,此时可以用静态代码块完成
package com.itheima.d3_static_code; import java.util.ArrayList; public class StaticDemo3 { /** * 1.定义一个静态集合,这样这个集合只能加载一个,因为当前房间只需要一副牌 * */ public static ArrayList<String> cards=new ArrayList<>(); /** * 2.在程序真正运行main方法前,把54张牌放进去,后续游戏可以使用 * */ static { //定义一个数组存储全部点数,类型确定,个数确定 String[] sizes={"3","4","5","6","7","8","9","10","J","Q","K","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); } }