2026/6/9 17:25:53
网站建设
项目流程
企业开通网站的费用怎么做分录,抚顺市城市建设档案馆网站,网站建设比较好的律所,山东省城乡住房和建设厅网站首页文章目录一、什么是静态代码块#xff1f;二、静态代码块的执行时机类什么时候被加载#xff1f;执行顺序示例三、静态代码块 vs 构造代码块构造代码块#xff08;实例代码块#xff09;对比表四、多个静态代码块的执行顺序同一个类中父类与子类的执行顺序五、静态代码块的…文章目录一、什么是静态代码块二、静态代码块的执行时机类什么时候被加载执行顺序示例三、静态代码块 vs 构造代码块构造代码块实例代码块对比表四、多个静态代码块的执行顺序同一个类中父类与子类的执行顺序五、静态代码块的典型使用场景初始化静态变量加载资源或驱动复杂初始化逻辑六、静态代码块中的注意事项重点不能使用 return不能访问实例变量和实例方法异常必须处理七、静态代码块与静态变量初始化顺序八、JVM 角度理解静态代码块九、面试高频问题总结❓ 静态代码块执行几次❓ 能否继承❓ 静态代码块能访问非静态成员吗❓ static 代码块和 static 方法的区别一、什么是静态代码块在 Java 中static关键字不仅可以修饰变量和方法还可以修饰代码块。静态代码块static block是类加载阶段执行的一段代码常用于类级别的初始化操作。本文将从语法、执行时机、底层原理、使用场景、常见陷阱以及面试要点等方面简单介绍Java 的静态代码块。如有问题欢迎在评论区留言( •̀ ω •́ )✧静态代码块是使用static {}定义的代码块static{// 静态初始化代码}特点属于类本身在类加载时执行只执行一次早于任何对象创建执行静态代码块是 Java 在“类加载阶段”留给开发者的初始化钩子。二、静态代码块的执行时机类什么时候被加载以下情况会触发类加载使用new创建对象访问类的静态变量调用类的静态方法反射加载类Class.forNameJVM 启动时加载主类执行顺序示例classTest{static{System.out.println(静态代码块执行);}publicTest(){System.out.println(构造方法执行);}}publicclassMain{publicstaticvoidmain(String[]args){newTest();}}输出结果静态代码块执行 构造方法执行 说明静态代码块 → 构造方法三、静态代码块 vs 构造代码块构造代码块实例代码块{System.out.println(构造代码块);}对比表对比项静态代码块构造代码块关键字static无执行时机类加载时创建对象时执行次数一次每次创建对象作用对象类实例常见用途初始化静态资源初始化实例数据四、多个静态代码块的执行顺序同一个类中classDemo{static{System.out.println(static block 1);}static{System.out.println(static block 2);}}输出static block 1 static block 2按书写顺序执行父类与子类的执行顺序classParent{static{System.out.println(父类静态代码块);}}classChildextendsParent{static{System.out.println(子类静态代码块);}}publicclassTest{publicstaticvoidmain(String[]args){newChild();}}输出父类静态代码块 子类静态代码块 顺序总结父类静态代码块 → 子类静态代码块 → 构造代码块 → 构造方法五、静态代码块的典型使用场景初始化静态变量classConfig{staticMapString,Stringmap;static{mapnewHashMap();map.put(url,localhost);map.put(port,8080);}}加载资源或驱动static{try{Class.forName(com.mysql.cj.jdbc.Driver);}catch(ClassNotFoundExceptione){e.printStackTrace();}}复杂初始化逻辑当初始化逻辑较复杂静态变量一行代码无法完成时静态代码块非常合适。六、静态代码块中的注意事项重点不能使用returnstatic{return;// ❌ 编译错误}不能访问实例变量和实例方法intx10;static{System.out.println(x);// ❌}原因静态代码块执行时对象尚未创建异常必须处理static{// 不能抛受检异常try{// risky code}catch(Exceptione){e.printStackTrace();}}七、静态代码块与静态变量初始化顺序classOrderTest{staticinta10;static{a20;}staticintb30;}执行后a20b30 规则按代码书写顺序执行八、JVM 角度理解静态代码块静态代码块在类初始化阶段 方法执行JVM 保证clinit在多线程环境下只执行一次天然线程安全九、面试高频问题总结❓ 静态代码块执行几次一次类加载时❓ 能否继承不继承但会先执行父类静态代码块❓ 静态代码块能访问非静态成员吗不能❓ static 代码块和 static 方法的区别static 方法可多次调用static 代码块只执行一次如果还没理解可参考静态代码块、构造代码块、构造方法的执行顺序- bilibili.comJava静态代码块深度剖析机制、特性与最佳实践 - 稀土掘金