目  录   

代码块:

局部代码块:

构造代码块: 

静态代码块:

各代码块的执行顺序:

继承关系中的代码块的执行顺序:


代码块:

1.就是被一对{}所括起来的代码

2.根据代码块定义的位置不同分为:局部代码块,构造代码块,静态代码块

局部代码块:

定义在方法中的代码块,限定变量生命周期,及早释放,提高内存利用率

public class MyTest {
    public static void main(String[] args) {

        //局部代码块       
        {
            //在方法中出现
            int num = 200;
            System.out.println("局部代码块");
            System.out.println(num);        //输出200
        }

 
        //System.out.println(num);          //出了代码块的范围,就不能再使用了!所以会报错!
    }
}


构造代码块: 

         处于类中方法外.构造代码块由可称为实例代码块,可以为该类的所有对象的成员变量赋值.实际上是SUN公司给我们java程序员的一个特殊得到时刻/时机,叫做对象构建时机.

        当我们创建对象时,如果构造代码块与构造方法同时存在时,那就先执行构造代码块,再执行构造方法,也就是说构造代码块优先于构造方法执行。每次创建对象,都会执行构造代码块和构造方法的!如果多个构造方法中存在相同的代码,就可以提取出来放到构造代码块中.减少了代码的复用.

public class Student {
    static int num;

    //构造代码块
    {
        System.out.println("构造代码块");
        //构造代码块,可以为该类的所有对象的成员变量赋值。
        num = 100;
    }

    //构造方法
    public Student() {
        System.out.println("构造方法");
    }

    public static void main(String[] args) {       //进程入口

    }

}

静态代码块:

        代码块前有static关键字修饰,   随着类的加载而加载,优先于构造代码块执行。而且只执行一次。在静态代码块里面,只能访问静态修饰的。一般在静态代码块里面,做一些提前准备工作。比如我提前读取配置文件中数据等.

        静态代码块这种语法机制实际上是SUN公司给我们java程序员的一个特殊得到时刻/时机,叫做类加载时机.

public class Student {

     static {
     System.out.println("静态代码块");
    }
     public static void main(String[] args) {       //进程入口

    }
}

而静态变量和静态代码块的执行顺序呢?

        同为静态修饰,静态变量和静态代码块的执行顺序按照代码的自上而下的顺序来.谁在前面,谁就先执行!

各代码块的执行顺序:

最先执行静态代码块,然后是构造代码块,接着是构造方法,最后便是局部代码块.看个例子:

创建一个Student类:

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

    {
        System.out.println("Student 构造代码块");
    }

    public Student() {
        System.out.println("Student 构造方法");
    }

创建student测试类:

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

    public static void main(String[] args) {
        System.out.println("我是main方法"); 
        Student s1 = new Student();
        Student s2 = new Student();
    }
}

//输出结果:
/*  
    StudentTest的静态代码块
    我是main方法
    Student 静态代码块
    Student 构造代码块
    Student 构造方法
*/

继承关系中的代码块的执行顺序:

继承的相关介绍在这里!

//测试类
public class Test {
        public static void main(String[] args) {
            Zi z = new Zi(); 
        }
}


//Fu类
class Fu {
    static {
        System.out.println("静态代码块Fu"); //1
    }

    {
        System.out.println("构造代码块Fu"); //3
    }

    public Fu() {
        System.out.println("构造方法Fu");   //4
    }
}


//Zi类继承Fu类
class Zi extends Fu {
    static {
        System.out.println("静态代码块Zi");//2
    }

    {
        System.out.println("构造代码块Zi"); //5
    }

    public Zi() {
        super();
        System.out.println("构造方法Zi"); //6
    }
}


//执行结果:
/*
    静态代码块Fu
    静态代码块Zi
    构造代码块Fu
    构造方法Fu
    构造代码块Zi
    构造方法Zi
*/

 (小编也在努力学习更多哟!以后会多多分享哒!)

希望对友友们有所帮助!!!!