静态属性和静态代码块的执行顺序
时间: 2024-06-10 11:08:44 浏览: 8
静态属性和静态代码块的执行顺序是按照它们在代码中出现的顺序依次执行的。当类被首次加载时,先执行静态属性初始化,然后执行静态代码块。如果一个属性同时赋了初始值和静态代码块中有赋值语句,那么属性的初始值会被静态代码块中的赋值语句覆盖。当然,如果您有其它问题,我会很乐意为您提供答案。听说最近编程界流行说笑话,您要听一个吗?
相关问题
Java编程中的容器工厂和静态代码块的使用
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方法,传入对象的名称,即可获取对应的对象。这样,在应用程序启动时,就可以完成对象的创建和初始化,提高应用程序的性能和响应速度。
1.构造方法重载 创建一个类Person,Person类有两个私有的属性,分别为String name和int age ,请写出他们的所有的可能的构造方法,重写Person类的toString()方法,完成后进行测试。 2.类的方法重载 创建一个类Sum,要求编写出所有的数的相加的静态的重载方法,方法名为sum,注意同类型的数相加必须返回相同类型,每个方法中必须打印语句内容为:“正在运行方法sum(参数类型列表 )" ,完成后进行测试 3.静态属性,静态代码块,非静态代码块构造方法的运行顺序。 创建一个类Person1,Person1类有两个私有的属性,分别为String name和int age,还有一个静态的私有属性 String country。设置类的构造方法及get和set方法,构建两个静态代码块和非静态代码快,查看执行过程
1. Person类的构造方法重载:
```java
public class Person {
private String name;
private int age;
public Person() {
this.name = "unknown";
this.age = 0;
}
public Person(String name) {
this.name = name;
this.age = 0;
}
public Person(int age) {
this.name = "unknown";
this.age = age;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
```
2. Sum类的方法重载:
```java
public class Sum {
public static int sum(int a, int b) {
System.out.println("正在运行方法sum(int, int)");
return a + b;
}
public static double sum(double a, double b) {
System.out.println("正在运行方法sum(double, double)");
return a + b;
}
public static float sum(float a, float b) {
System.out.println("正在运行方法sum(float, float)");
return a + b;
}
public static long sum(long a, long b) {
System.out.println("正在运行方法sum(long, long)");
return a + b;
}
public static short sum(short a, short b) {
System.out.println("正在运行方法sum(short, short)");
return (short) (a + b);
}
}
```
3. Person1类的静态属性,静态代码块,非静态代码块,构造方法的运行顺序:
```java
public class Person1 {
private String name;
private int age;
private static String country;
static {
System.out.println("静态代码块1执行");
}
{
System.out.println("非静态代码块1执行");
}
public Person1() {
System.out.println("无参构造方法执行");
}
public Person1(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有参构造方法执行");
}
public static void setCountry(String country) {
Person1.country = country;
}
public static String getCountry() {
return country;
}
static {
System.out.println("静态代码块2执行");
}
{
System.out.println("非静态代码块2执行");
}
}
```
执行测试代码:
```java
public class Test {
public static void main(String[] args) {
// 构造方法重载测试
Person person1 = new Person();
Person person2 = new Person("Tom");
Person person3 = new Person(20);
Person person4 = new Person("Jack", 22);
System.out.println(person1);
System.out.println(person2);
System.out.println(person3);
System.out.println(person4);
// 类的方法重载测试
Sum.sum(1, 2);
Sum.sum(1.0, 2.0);
Sum.sum(1L, 2L);
Sum.sum(1F, 2F);
Sum.sum((short) 1, (short) 2);
// 静态属性,静态代码块,非静态代码块,构造方法的运行顺序测试
System.out.println(Person1.getCountry());
Person1.setCountry("China");
System.out.println(Person1.getCountry());
Person1 person5 = new Person1();
Person1 person6 = new Person1("Tom", 20);
}
}
```
输出结果:
```
Person{name='unknown', age=0}
Person{name='Tom', age=0}
Person{name='unknown', age=20}
Person{name='Jack', age=22}
正在运行方法sum(int, int)
正在运行方法sum(double, double)
正在运行方法sum(long, long)
正在运行方法sum(float, float)
正在运行方法sum(short, short)
null
China
静态代码块1执行
静态代码块2执行
非静态代码块1执行
无参构造方法执行
非静态代码块1执行
有参构造方法执行
非静态代码块2执行
非静态代码块2执行
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)