博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA_四大代码块_普通代码块、构造代码块、静态代码块、同步代码块。
阅读量:6264 次
发布时间:2019-06-22

本文共 1681 字,大约阅读时间需要 5 分钟。

普通代码块


在方法或语句中出现的{}里面的内容就被称为普通代码块,普通代码块和一般的语句执行顺序一样,由他们在代码中出现的次序决定,即——“先出现先执行”。

但是不同的普通代码块即使在同一个方法里面定义,里面存储的方法和变量都有自己独立的作用域,但是都可以访问在自己所在花括号之外,所在方法或语句之内的内容。

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

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

转载于:https://www.cnblogs.com/16crow/p/9597555.html

你可能感兴趣的文章
powershell--uninstall webapplication
查看>>
ubuntu配置vsftpd记录
查看>>
日期控件Android 自定义日历控件
查看>>
Java多线程编程:变量共享分析(Thread)
查看>>
word如何自动生成目录
查看>>
疯狂暑期学习计划~~~
查看>>
Mysql查询大表出现的一个错误
查看>>
Scala 中的foreach和map方法比较
查看>>
使用OWIN作为WebAPI的宿主
查看>>
阿里巴巴、腾讯、百度的面试问题笔知识汇总(两)
查看>>
如果他们在未来的几年内技术水平没有突破性的提升,或者缺乏一点灵性和品味,那么可能在未来很长一段时间内,他们都会保持这个薪资水平(转)...
查看>>
修改setup.py的源
查看>>
SQL Server 常用高级语法笔记
查看>>
IOS开发之SVN的使用
查看>>
百度.搜狐...2015产品经理面试题
查看>>
Rewriting History with Git Rebase
查看>>
(算法)跳格子
查看>>
骨头汤,猪肉汤
查看>>
Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) A. Bear and Poker 分解
查看>>
生成文件下载
查看>>