static应用知识:代码块
-
代码块是类的五大成分之一(成员变量,构造器,方法,代码块,内部类),定义在类中方法外
-
在Java类下,使用{}括起来的代码被称为代码块
-
代码块分类:
-
静态代码块:
-
格式:static{}
-
特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次
-
使用场景:在类加载的时候做一些静态数据初始化的操作,方便后续使用
package com.java.test; public class TestDemo { public static String word; static{ System.out.println("静态代码块被触发执行"); word = "你好"; //对静态数据word完成初始化 } public static void main(String[] args) { System.out.println("Hello World!"); // sout(word); //你好(静态代码块没有赋值时为null) } } /* 静态代码块被触发执行 Hello World! */ //静态代码块和类一起加载,优先级别比主方法中的内容更高
-
-
-
构造代码块(又叫实例代码块):
-
格式:{}
-
特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
即每次创建对象时就会优先执行一次这部分的代码,然后再执行构造器里的内容
-
使用场景:初始化实例资源
package com.java.test; public class TestDemo { { System.out.println("实例代码块被触发执行"); } public TestDemo(){ System.out.println("构造器被触发执行"); } public static void main(String[] args) { System.out.println("Hello World!"); new TestDemo(); //匿名对象,创建立即回收 } } /* Hello World! 实例代码块被触发执行 构造器被触发执行 */ //如果给实例成员变量初始化,会导致每次访问该实例成员都会被赋上初始化的值,往往不符合现实业务逻辑需求
作用上其实就是将实例代码块这部分内容从构造器中拿了出来,放回去时也会有相同的作用
-
-
使用静态代码块不是必备的技术,但是会使得程序变得更加优雅
模拟生成扑克牌:
package com.java.cases; import java.util.ArrayList; public class StaticCodeDemo { /** * 模拟初始化牌操作 */ //准备一个容器,存储54张牌对象,这个容器建议使用静态的集合,因为静态的集合只加载一次 public static ArrayList<String> cards = new ArrayList(); //在游戏启动之前需要准备好54张牌放进去,使用静态代码块进行初始化 static { String[] colors = {"♠", "♥", "♦", "♣"}; String[] sizes = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; for (int i = 0; i < sizes.length; i++) { for (int j = 0; j < colors.length; j++) { cards.add(sizes[i] + colors[j]); } } cards.add("🃏"); cards.add("🃏"); } public static void main(String[] args) { System.out.println("新牌:" + cards); } }
网友评论