java静态代码块什么时候加载_Java静态代码块和静态属性加载顺序

Java静态代码块、静态属性、构造函数加载顺序

代码实例

//父类

public class B {

public static B t1 = new B();

public static B t2 = new B();

public B(){

super();

System.out.println("B类构造块");

}

static {

System.out.println("B类静态块");

}

}

//子类

public class A extends B {

public static A t1 = new A();

public static A t2 = new A();

public A(){

super();

System.out.println("A类构造块");

}

static {

System.out.println("A类静态块");

}

public static void main(String[] args) {

A t = new A();

}

}

运行结果如下

B类构造块 //①

B类构造块 //②

B类静态块 //③

B类构造块 //④

A类构造块 //⑤

B类构造块 //⑥

A类构造块 //⑦

A类静态块 //⑧

B类构造块 //⑨

A类构造块 //⑩

原因解析

规则:

静态块 随着类的加载(例如:1、A继承B 加载B;2运行A 加载A)而执行,且只执行一次,并优先于Main方法,用于给类初始化的。

构造块 当实例化即new的时候 立即执行。

继承时,先加载父类,再加载子类。

实例化子类时,先实例化父类。

加载类时,成员变量及代码块顺序执行。

本例分析:

A extends B ,

-----先加载B,B中实例化t1、t2,立即执行构造块,故①、②,然后继续执行静态代码块,故③,此时B类已经加载完毕,

-----然后加载A,A中实例化t1、t2,先实例化B,故④、⑤,⑥、⑦,然后继续执行A中静态代码块,故⑧,然后执行主方法,故⑨、⑩。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java编程中的容器工厂和静态代码块可以一起使用,实现在应用程序启动时完成对象的创建和初始化。 容器工厂是一种软件工具,用于自动化地创建和管理对象。容器工厂通常包括一个构建工具,用于创建、打包和部署对象,以及一个编排工具,用于管理和协调对象的运行。通过使用容器工厂,开发人员可以更快速、更方便地构建、测试和部署应用程序,从而提高开发、测试和部署的效率。 静态代码块是一个特殊的代码块,在类加载时执行,用于初始化类的静态成员变量和静态方法。静态代码块的执行顺序是在类加载时,按照出现的顺序依次执行。 在Java编程中,我们可以在静态代码块中使用容器工厂,实现在应用程序启动时完成对象的创建和初始化。具体来说,我们可以在静态代码块中读取配置文件中的属性,然后将属性值转换为对应的对象,并将对象放入Map中。在使用容器工厂时,调用getBean方法,传入对象的名称,即可获取对应的对象。 示例代码如下: ```java import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; public class ContainerFactory { private static Map<String, Object> container = new HashMap<>(); static { Properties props = new Properties(); InputStream in = null; try { in = ContainerFactory.class.getClassLoader().getResourceAsStream("config.properties"); props.load(in); for (Object key : props.keySet()) { String className = props.getProperty(key.toString()); Class<?> clazz = Class.forName(className); container.put(key.toString(), clazz.newInstance()); } } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static Object getBean(String name) { return container.get(name); } } ``` 在上面的代码中,我们将容器工厂实现为一个静态类,并在静态代码块中读取配置文件config.properties中的属性,并将属性值转换为对应的对象,并将对象放入一个Map中。在使用容器工厂时,调用getBean方法,传入对象的名称,即可获取对应的对象。这样,在应用程序启动时,就可以完成对象的创建和初始化,提高应用程序的性能和响应速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值