//执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。
其中静态代码块只执行一次。构造代码块在每次创建对象时都会执行。
1 普通代码块
public class CodeBlock01{
public static void main(String[] args){
{
int x=
3;
System.out.println(
"1,普通代码块内的变量x="+x);
}
int x=
1;
System.out.println(
"主方法内的变量x="+x);
{
int y=
7;
System.out.println(
"2,普通代码块内的变量y="+y);
}
}
}
2 构造代码块
public class CodeBlock02{
{
System.out.println(
"第一代码块");
}
public CodeBlock02(){
System.out.println(
"构造方法");
}
{
System.out.println(
"第二构造块");
}
public static void main(String[] args){
new CodeBlock02();
new CodeBlock02();
new CodeBlock02();
}
}
3 静态代码块
class Code{
{
System.out.println(
"Code的构造块");
}
static{
System.out.println(
"Code的静态代码块");
}
public Code(){
System.out.println(
"Code的构造方法");
}
}
public class CodeBlock03{
{
System.out.println(
"CodeBlock03的构造块");
}
static{
System.out.println(
"CodeBlock03的静态代码块");
}
public CodeBlock03(){
System.out.println(
"CodeBlock03的构造方法");
}
public static void main(String[] args){
System.out.println(
"CodeBlock03的主方法");
new Code();
new Code();
new CodeBlock03();
new CodeBlock03();
}
}
4 Java类加载时的初始化顺序
(1) 初始化父类中的静态成员变量和静态代码块(按照在程序中出现的顺序初始化)
(2) 初始化子类中的静态成员变量和静态代码块(按照在程序中出现的顺序初始化)
(3) 初始化父类中的普通成员变量和构造代码块(按照在程序中出现的顺序初始化),然后再执行父类中的构造方法
(4) 初始化子类中的普通成员变量和构造代码块(按照在程序中出现的顺序初始化),然后再执行子类中的构造方法
class Member {
Member(String str) {
System.out.println(str);
}
}
class A {
static {
System.out.println(
"父类静态代码块");
}
public A() {
System.out.println(
"父类构造函数");
}
{
System.out.println(
"父类构造代码块");
}
Member member=
new Member(
"父类成员变量");
}
class B extends A {
Member member=
new Member(
"子类成员变量");
static {
System.out.println(
"子类静态代码块");
}
public B() {
System.out.println(
"子类构造函数");
}
{
System.out.println(
"子类构造代码块");
}
}
public class Test{
public static void main(String[] args) {
new B();
}
}
父类静态代码块
子类静态代码块
父类构造代码块
父类成员变量
父类构造函数
子类成员变量
子类构造代码块
子类构造函数