• JAVA_四大代码块_普通代码块、构造代码块、静态代码块、同步代码块。


    普通代码块


    在方法或语句中出现的{}里面的内容就被称为普通代码块,普通代码块和一般的语句执行顺序一样,由他们在代码中出现的次序决定,即——“先出现先执行”。
    但是不同的普通代码块即使在同一个方法里面定义,里面存储的方法和变量都有自己独立的作用域,但是都可以访问在自己所在花括号之外,所在方法或语句之内的内容。

    public class Main {
        public static void main(String[] args) {
            int a = 1;
            {
                int b=2;
                int c=1;
                System.out.print(a);    //可以访问a,代码块可以访问块外的元素
                System.out.print(c);
            }
            {
                int c=3;
                System.out.print(c);
            }
           // System.out.print(b);这一句是不行的,b脱离作用域了
        }
    }
    

    构造代码块(实例代码块)

    直接在类中定义的而且没有加static的代码块被称为构造代码块,构造代码块在创建对象的时候被调用,每次创建对象的时候都会被调用,并且构造代码块的执行次序是优于构造函数的。
    构造代码块在每次创建对象的时候被调用;

    代码块是没有独立运行的能力,他必须要有一个可以承载的载体,那么编译器会如何来处理构造代码块呢?编译器会将代码块按照他们的顺序(假如有多个代码块)插入到所有的构造函数的最前端,这样就能保证不管调用哪个构造函数都会执行所有的构造代码块

    public class CodeBlock02{
        {
          //这里写在构造函数的前面,但是这并不是在构造函数之前执行的原因
          System.out.println("第一代码块");    
        }    
        public CodeBlock02(){
            System.out.println("构造方法");
            }       
            {
              //这里写在构造函数的后面,可以在结果上看到依旧是在构造函数之前执行的
              System.out.println("第二构造块");
            }
          public static void main(String[] args){
              new CodeBlock02();
        }
    }
    

    执行结果:

    第一代码块
    第二构造块
    构造方法


    静态代码块

    在类中定义的有static关键词的代码块被称为静态代码块,静态类被用于初始化类,为类的属性初始化,对于一个类,其对应的静态代码只会执行一次,由于JVM在加载类时会执行静态代码块,所以静态代码优于主方法执行(意思是,如果main函数定义在该类中,静态代码块也会先执行);
    如果类中包含有多个静态代码块,那么将按照“先定义的代码先执行,后定义的代码后执行”;
    静态代码块不能存在于任何的方法体内,因为本身是静态的,所以也只能访问对应类中的静态成员。

    特点:

    1. 随着类的加载而执行,而且只执行一次。
    2. 优先于主函数执行。
      作用:给类进行初始化。

    1、静态代码块,它是随着类的加载而被执行,只要类被加载了就会执行,而且只会加载一次,主要用于给类进行初始化。

    2、构造代码块,每创建一个对象时就会执行一次,且优先于构造函数,主要用于初始化不同对象共性的初始化内容和初始化实例环境。

    3、构造函数,每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。

    通过上面的分析,他们三者的执行顺序应该为:静态代码块 > 构造代码块 > 构造函数。

  • 相关阅读:
    【原创】编程题练习:反转字符串中的单词
    【最近的学习安排】
    【转载】判断两个链表是否相交、一个链表是否有环
    获取字符串字节长度
    如何找到GridView里的控件,建立GridViewRow对象
    Flex和.NET协同开发利器FluorineFx Flex与.NET互操作
    两款基于Visual Studio开发Flex的插件
    Mysql:向信号量添加给定计数将导致其超出它的最大计数错误
    Sql Server数据库触发器实例
    国外一些知名ASP.Net开源CMS系统
  • 原文地址:https://www.cnblogs.com/16crow/p/9597555.html
Copyright © 2020-2023  润新知