Java 静态代码块 > 静态方法 > 构造块 > 构造方法 ~ 代码执行顺序。
package com.geek;
/**
* @author geek
*/
public class CodeBlockDemo {
static {
System.out.println("CodeBlockDemo 静态块。");
}
{
System.out.println("CodeBlockDemo 构造块。");
}
public CodeBlockDemo() {
System.out.println("CodeBlockDemo 构造方法。");
}
public static void main(String[] args) {
System.out.println("CodeBlockDemo 的 main() 方法。");
// CodeBlockDemo 的静态块。(先装载类 CodeBlockDemo.class,执行静态)。
//CodeBlockDemo 的 main() 方法。
System.out.println("~ ~ ~ ~ ~ ~ ~");
new CodeGeek();
// CodeGeek 的静态块。
//CodeGeek 的构造块。
//CodeGeek 的构造方法。
System.out.println("~ ~ ~ ~ ~ ~ ~");
new CodeGeek();
// 静态代码块只一次。
// CodeGeek 的构造块。
//CodeGeek 的构造方法。
System.out.println("~ ~ ~ ~ ~ ~ ~");
new CodeBlockDemo();
// CodeBlockDemo 的构造块。
//CodeBlockDemo 的构造方法。
System.out.println("~ ~ ~ ~ ~ ~ ~");
new CodeBlockDemo();
// CodeBlockDemo 的构造块。
//CodeBlockDemo 的构造方法。
}
}
/*
CodeBlockDemo 的静态块。
CodeBlockDemo 的 main() 方法。
~ ~ ~ ~ ~ ~ ~
CodeGeek 的静态块。
CodeGeek 的构造块。
CodeGeek 的构造方法。
~ ~ ~ ~ ~ ~ ~
CodeGeek 的构造块。
CodeGeek 的构造方法。
~ ~ ~ ~ ~ ~ ~
CodeBlockDemo 的构造块。
CodeBlockDemo 的构造方法。
~ ~ ~ ~ ~ ~ ~
CodeBlockDemo 的构造块。
CodeBlockDemo 的构造方法。
*/
package com.geek;
/**
* @author geek
*/
public class CodeGeek {
static {
System.out.println("CodeGeek 静态块。");
}
{
System.out.println("CodeGeek 构造块。");
}
public CodeGeek() {
System.out.println("CodeGeek 构造方法。");
}
}
父子类。
package com.geek;
/**
* @author geek
*/
public class Parent {
static {
System.out.println("Parent 构造块。");
}
{
System.out.println("Parent 静态块。");
}
public Parent() {
System.out.println("Parent 构造方法。");
}
public static void main(String[] args) {
System.out.println("Parent ~ main(String[] args);");
Children children = new Children();
System.out.println(" ~ ~ ~ ~ ~ ~ ~ ");
Children children1 = new Children();
}
}
/*
Parent 构造块。
Parent ~ main(String[] args);
Children 静态块。
Parent 静态块。
Parent 构造方法。
Children 构造块。
Children 构造方法。
~ ~ ~ ~ ~ ~ ~
Parent 静态块。
Parent 构造方法。
Children 构造块。
Children 构造方法。
*/
package com.geek;
/**
* @author geek
*/
public class Children extends Parent {
static {
System.out.println("Children 静态块。");
}
{
System.out.println("Children 构造块。");
}
public Children() {
// super();
System.out.println("Children 构造方法。");
}
public static void main(String[] args) {
System.out.println("Children ~ main(String[] args);");
Children children = new Children();
System.out.println(" ~ ~ ~ ~ ~ ~ ~ ");
Children children1 = new Children();
}
}
/*
Parent 构造块。
Children 静态块。
Children ~ main(String[] args);
Parent 静态块。
Parent 构造方法。
Children 构造块。
Children 构造方法。
~ ~ ~ ~ ~ ~ ~
Parent 静态块。
Parent 构造方法。
Children 构造块。
Children 构造方法。
*/
package com.geek;
/**
* @author geek
*/
public class ExtendsTest {
public static void main(String[] args) {
System.out.println("ExtendsTest ~ main(String[] args);");
Children children = new Children();
System.out.println(" ~ ~ ~ ~ ~ ~ ~ ");
Children children1 = new Children();
}
}
/*
ExtendsTest ~ main(String[] args);
Parent 构造块。
Children 静态块。
Parent 静态块。
Parent 构造方法。
Children 构造块。
Children 构造方法。
~ ~ ~ ~ ~ ~ ~
Parent 静态块。
Parent 构造方法。
Children 构造块。
Children 构造方法。
*/
本文深入解析Java中类的加载过程及构造顺序,包括静态代码块、静态方法、构造块和构造方法的执行流程。通过具体代码示例,展示不同场景下(如创建子类实例)的构造顺序差异。
1万+

被折叠的 条评论
为什么被折叠?



