Java代码块详解
Java中代码块指的是用 {} 包围的代码集合,分为4种:普通代码块,静态代码块,同步代码块,构造代码块
普通代码块:
定义:在方法、循环、判断等语句中出现的代码块
修饰:只能用标签修饰
位置:普通代码块可以出现在方法体内除"()"外的任何地方,包括 方法体,代码块中(即可以嵌套在代码块中)
执行:普通代码依赖方法的执行而执行,按照正常的先后顺序执行
作用:将多行代码封装在一起,实现特定的功能。(有点废话)
注意:无
静态代码块
 定义:在类中定义使用static修饰的代码块
 修饰:使用static修饰
 位置:它不能出现在方法体或者代码块内
 执行:在加载类时会先执行静态代码块,且只执行一次,如果有多个静态代码块则按照先后顺序执行
 作用:一般用于静态变量的初始化,创建对象前的环境的加载
 注意:静态代码块中不能直接访问非静态变量和方法,需要通过类的实例对象来访问
同步代码块
定义:可以简单地认为同步代码块是使用 synchronized 修饰的普通代码块
位置:同普通代码块
执行:同普通代码块
作用:用于多线程环境的同步保护
注意:注意同步代码块使用不当可能会造成“死锁”
构造代码块
定义:在类中定义且没有加任何修饰的代码块
位置:它不能出现在方法体或者其他代码块内
执行:依赖于构造函数的调用而执行
作用:初始化实例变量和实例环境,一般用于提取类构造函数中的公共代码
注意:构造代码块不是在构造函数之前执行的!!!编译器在编译的时候会把构造代码块插入到每个构造函数的最前面!!
     构造代码块随着构造函数的执行而执行!!
     如果某个构造函数调用了其他的构造函数,那么构造代码块不会插入到该构造函数中以免构造代码块执行多次!
执行案例:
public class CodeAreaExecuteDemo{
    static{
        System.out.println("static code  block!");
    }
    {
        System.out.println("construct code  block!");
    }
    public CodeAreaExecuteDemo(){
        System.out.println("Constructor() ");
    }
    public static void main(String[] args) {
        new CodeAreaExecuteDemo();
    }
}  
执行结果:
static code block!
construct code block!
Constructor()
反编译结果:
我们发现构造代码块确实被插入到了构造函数最前面中
构造代码块与构造函数关系的案例
public class ConstructorDemo{
    public ConstructorDemo(){}
    public ConstructorDemo(int num){
        this();
    }
    {
        System.out.println("construct code  block!");
    }
    public static void main(String[] args) {
    }
}
 
反编译结果如下:
我们发现构造代码块确实被插入到了无参构造函数最前面,而调用了无参构造函数的有参构造函数没有被插入构造代码块
以上便是本人对Java代码块的总结,圉于博主的水平,理解可能有所偏差,还望各位大佬不吝指正!
本博客参考了秦小波《编写高质量代码:改善Java程序的15个建议》北京:机械工业出版社,2011.11
Java代码块详解的更多相关文章
- Java 代码块详解
		
注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 注:本文原链接:https://www.cnblogs.com/chloneda/p/java-c ...
 - java中的静态变量、静态方法与静态代码块详解与初始化顺序
		
我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...
 - java构造代码块详解
		
一.简介 首先说一下,Java中有哪些代码块. 普通代码块 就是在方法后面使用"{}"括起来的代码片段,不能单独执行,必须调下其方法名才可以执行. 静态代码块 在类中使用stati ...
 - java中的静态变量,静态方法与静态代码块详解
		
java中的类的生命周期分为装载,连接,初始化,使用,和卸载五个过程. 而静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...
 - Java基础(basis)-----代码块详解
		
1.静态代码块 格式: static{ 内容..... } 随着类的加载而加载,而且只被加载一次 多个静态代码块之间按照顺序结构执行 优先其他各种代码块以及构造函数先执行 静态的代码块中只能执行静态的 ...
 - java中静态代码块详解
		
感谢大佬:https://blog.csdn.net/qq_35868412/article/details/89360250 今天在项目中看到这行代码,静态代码块,很久没用静态代码块了,今天来复习一 ...
 - 静态代码块详解(原出处:http://versioneye.iteye.com/blog/1129579)
		
一 般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情 况下,其他程序来调用的时候,需要使用静态方法,这种 ...
 - Java :内部类基础详解
		
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类. public class OuterClass { pr ...
 - Java的String详解
		
Java的String详解 博客分类: Java javaStringString详解常用方法 Java的String类在开发时经常都会被使用到,由此可见String的重要性.经过这次认真仔细的学习 ...
 
随机推荐
- iOS 开发 旧版 framework
			
0. 参考 http://www.cocoachina.com/ios/20150127/11022.html http://www.cnblogs.com/gcb999/p/3296414.html ...
 - js原生设计模式——2面向对象编程之闭包2
			
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
 - 表单验证--通过原生js模仿ajax的异步交互
			
今天给大家带来个福利,我也是刚刚学习的很实用的一个东西,通过原生js模仿ajax的异步交互. 我的博客只是给那些新手看的大神勿喷,写的不好可留言,请指出. 因为当初自己学的时候一个问题不会找人问,知道 ...
 - EntityFramework 简单入个门
			
任何一个和数据相关的系统里,数据持久化都是一个不容忽视的问题. 一直以来,Java 平台出了很多 NB 的 ORM 框架,Hibernate.MyBatis等等..NET 平台上,ORM 框架这一块一 ...
 - KB奇遇记(9):艰难的上线
			
经历了非常多的磨难,系统也“如约“在2017年01月01日勉强上线了.尽管我认为它还不到上线的程度,条件不具备,但上头的指令下来和计划便是在这一天.整个上线过程从2016年3月8号开始到上线日,扣除中 ...
 - 纯css实现轮播图
			
轮播图的实现原理其实是比较简单的 举个例子 <div class="main"> <div class="div-main"></ ...
 - Dubbo源码学习文章目录
			
目录 Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 Dubbo源码学习--注册中心分析 Dubbo源码学习--集群负载均衡算法的实现
 - Express与NodeJs创建服务器的两种方法
			
NodeJs创建Web服务器 var http = require('http'); var server = http.createServer(function(req, res) { res.w ...
 - 蓝桥网试题 java 基础练习 十进制转十六进制
			
---------------------------------------------------------------------------------------------------- ...
 - Linux驱动技术(四) _异步通知技术
			
异步通知的全称是"信号驱动的异步IO",通过"信号"的方式,放期望获取的资源可用时,驱动会主动通知指定的应用程序,和应用层的"信号"相对应, ...