解释下这段代码class A{ static { System.out.println(“我是A的静态代码块”); } A(){ System.out.println(“我是A的构造函数”); } } class B extends A{ static { System.out.println(“我是B的静态代码块”); } B(){ System.out.println(“我是B的构造函数”); } } class C extends B{ B b1=new B(); { System.out.println(“我是C的普通代码块”); }
时间: 2023-04-02 13:02:57 浏览: 56
这段代码是一个继承关系的示例,其中类 A 是父类,类 B 继承自 A,类 C 继承自 B。在类 A 中,有一个静态代码块,它会在类 A 被加载时执行,输出“我是A的静态代码块”。在类 A 中还有一个构造函数,它会在创建 A 类的对象时执行,输出“我是A的构造函数”。类 B 中也有一个静态代码块,它会在类 B 被加载时执行,输出“我是B的静态代码块”。类 B 中还有一个构造函数,它会在创建 B 类的对象时执行,输出“我是B的构造函数”。类 C 中创建了一个 B 类的对象 b1,在类 C 中还有一个普通代码块,它会在创建 C 类的对象时执行,输出“我是C的普通代码块”。
相关问题
解释一下这串代码的运行结果class A{ static { System.out.println(“我是A的静态代码块”); } A(){ System.out.println(“我是A的构造函数”); } } class B extends A{ static { System.out.println(“我是B的静态代码块”); } B(){ System.out.println(“我是B的构造函数”); } } class C extends B{ B b1=new B(); { System.out.println(“我是C的普通代码块”); } B b2=new B();
这段代码的运行结果是:
我是A的静态代码块
我是B的静态代码块
我是A的构造函数
我是B的构造函数
我是C的普通代码块
我是B的构造函数
首先,当程序运行时,会先执行 A 类的静态代码块,输出“我是A的静态代码块”。接着执行 B 类的静态代码块,输出“我是B的静态代码块”。
然后,创建 C 类的对象时,会先调用 B 类的构造函数,输出“我是B的构造函数”,再执行 C 类的普通代码块,输出“我是C的普通代码块”,最后再创建一个 B 类的对象,输出“我是B的构造函数”。
public class Demo05 { public static void main(String[] args) { Zi zi = new Zi(); fu...静态代码块... zi...静态代码块... fu...构造代码块... fu...构造方法... zi...构造代码块... zi...构造方法... } } class Fu { static { System.out.println("fu...静态代码块..."); } { System.out.println("fu...构造代码块..."); } public Fu() { super(); //本类中的构造代码块执行 System.out.println("fu...构造方法..."); } } class Zi extends Fu { static { System.out.println("zi...静态代码块..."); } { System.out.println("zi...构造代码块..."); } public Zi() { super(); //本类中的构造代码块执行 System.out.println("zi...构造方法..."); } }问:运行结果是什么?为什么是这样的结果?请详细说明
运行结果如下:
fu...静态代码块...
zi...静态代码块...
fu...构造代码块...
fu...构造方法...
zi...构造代码块...
zi...构造方法...
这是因为在Java中,静态代码块是在类加载时执行的,而构造代码块是在每次创建对象时都会执行的。所以在执行main方法时,首先会加载Fu类,执行Fu类的静态代码块,然后创建Zi对象,接着执行Zi类的静态代码块。接下来会执行Fu类的构造代码块和构造方法,再执行Zi类的构造代码块和构造方法。
总结起来,静态代码块只会执行一次,而构造代码块和构造方法在每次创建对象时都会执行。所以输出结果是按照静态代码块->构造代码块->构造方法的顺序执行的。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.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)