java静态代码块、静态方法、静态变量、构造代码块、普通代码块

2021-09-23  本文已影响0人  WowBoard

一、静态代码块

public class CodeBlock{
    static{
        System.out.println("静态代码块");  
    }      
}

二、构造代码块

public class codeBlock {
    static {
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块");
    }
}
public class codeBlock {
    static {
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块");
    }
    public codeBlock(){
        System.out.println("无参构造函数");
    }
    public codeBlock(String str){
        System.out.println("有参构造函数");
    }
}

我们反编译生成的.class文件

import java.io.PrintStream
public class codeBlock {
    public codeBlock(){
        System.out.println("构造代码块");
        System.out.println("无参构造函数");
    }
    public codeBlock(String str){
        System.out.println("构造代码块");
        System.out.println("有参构造函数");
    }
}

三、构造函数

四、普通代码块

通代码块和构造代码块的区别是,构造代码块是在类中定义的,而普通代码块是在方法体重定义的。并且普通代码块的执行顺序和书写顺序是一致的

public class sayHelllo {
    {
        System.out.println("普通代码块");
    }
}

五、执行顺序

静态代码块>构造代码块>构造函数>普通代码块

public class codeBlock {
    static {
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块");
    }
    public codeBlock(){
        System.out.println("无参构造函数");
    }
    public codeBlock(String str){
        System.out.println("有参构造函数");
    }
    public void sayHello(){
        System.out.println("普通代码块");
    }

    public static void main(String[] args) {
        System.out.println("执行了main方法");

        new codeBlock().sayHello();

        System.out.println("---------------------------");

        new codeBlock().sayHello();
    }
}
1441368-20190307091009680-1897549312.png

六、实例

public class Test1 {

    static {
        int x = 5;
    }

    static  int x,y;

    public static void main(String[] args) {
        x--; // 步骤一  x没有设初始值初始值就是0,
        myMethod(); // 运行myMethod方法,x之前是-1,开始调用myMethod()函数
        System.out.println(x+y++ +x); // 输出 2,y=1
    }

    public static void myMethod()
    {
        y = x++ + ++x; //步骤2:这个地方的调用要注意:x++ + ++x 是将-1先自加然后加1,得到y=0  
        System.out.println(x);  // x= 1
        System.out.println(y); // y = 0
    }
}

执行过程分析:

1. static { int x =5;}  //静态代码块,在类加载的时候回被加载并且执行,但是由于是局部变量,所以x= 5 不影响后面的值

2. static int x,y;  这个时候会将x和y进行初始化,得到x=0;y=0

上一篇下一篇

猜你喜欢

热点阅读