Java中的普通代码块、构造块、静态代码块

代码块

  代码块定义:使用“{}”定义的一段代码。
  根据代码块定义的位置以及关键字,又可分为以下四种:

  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块

1.1 普通代码块

  普通代码块:定义在方法中的代码块。
  范例:观察普通代码块

public class Test1{
    public static void main(String[] args)
    {
        {
            //普通代码块
            int a=20;
            System.out.println(a);
        }
        int a=10;
        System.out.println(a);
    }
}

在这里插入图片描述
  一般如果方法中代码过长,为避免变量重名,使用普通代码块。
  代码是否可以这样写????:

public class Test1{
    public static void main(String[] args)
    {
        int a=10;
        {
            //普通代码块
            int a=20;
            System.out.println(a);
        }
        System.out.println(a);
    }
}

  不可以!!!

在这里插入图片描述
  写代码时要注意变量作用域的问题!!!!

1.2 构造块

  构造块: 定义在类中的代码块(不加修饰符)
  范例:观察构造块:

class Person{
	//定义在类中,不加任何修饰符
    {
        System.out.println("Person类的构造块!");
    }
    //构造函数
    public Person(){
        System.out.println("Person类的构造函数!");
    }
}
public class Test1{
    public static void main(String[] args)
    {
        new Person();
        new Person();
    }
}

在这里插入图片描述
  通过上述代码我们发现:构造块优先于构造方法执行,每产生一个新的对象就调用一次构造块。
所以构造块可以进行简单的逻辑操作(在调用构造方法之前)。

1.3 静态代码块

  静态代码块: 使用static定义的代码块。
  根据静态块所在的类不同又可分为以下两种类型:

  • 在非主类中
  • 在主类中

1.3.1 在非主类中的静态代码块

  范例:非主类中的静态代码块:

class Person{
    //构造块
    {
        System.out.println("Person类的构造块!");
    }
    //构造函数
    public Person(){
        System.out.println("Person类的构造函数!");
    }
    //静态块
    static
    {
        System.out.println("Person类的静态代码块!");
    }
}
public class Test1{
    public static void main(String[] args)
    {
   	    System.out.println("*******start*********");
        new Person();
        new Person();
        System.out.println("*********end*********");
    }
}

在这里插入图片描述
  通过以上代码,我们可以发现:

  • 在非主类中的静态块,在类加载时执行,优先于构造块执行。
  • 无论产生多少实例化对象,静态块都只执行一次。
      静态块的主要作用是为static属性进行初始化!!!!!

1.3.2 在主类中的静态代码块

  范例:主类中的静态代码块:

public class Test1{
     //构造块
    {
        System.out.println("Test1类的构造块!");
    }
    //构造函数
    public Test1(){
        System.out.println("Test1类的构造函数!");
    }
    //静态块
    static
    {
        System.out.println("Test1类的静态代码块!");
    }
    public static void main(String[] args)
    {
        System.out.println("*******start*********");
        new Test1();
        new Test1();
        System.out.println("*********end*********");
    }
}

在这里插入图片描述
  在主类中定义的静态块,优先于主方法(main)执行!!

猜你喜欢

转载自blog.csdn.net/zhao_miao/article/details/83215956
今日推荐