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、构造代码块,每创建一个对象时就会执行一次,且优先于构造函数,主要用于初始化不同对象共性的初始化内容和初始化实例环境。
3、构造函数,每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。
通过上面的分析,他们三者的执行顺序应该为:静态代码块 > 构造代码块 > 构造函数。
JAVA_四大代码块_普通代码块、构造代码块、静态代码块、同步代码块。的更多相关文章
- java synchronized静态同步方法与非静态同步方法,同步语句块
摘自:http://topmanopensource.iteye.com/blog/1738178 进行多线程编程,同步控制是非常重要的,而同步控制就涉及到了锁. 对代码进行同步控制我们可以选择同步方 ...
- [java多线程] - 锁机制&同步代码块&信号量
在美眉图片下载demo中,我们可以看到多个线程在公用一些变量,这个时候难免会发生冲突.冲突并不可怕,可怕的是当多线程的情况下,你没法控制冲突.按照我的理解在java中实现同步的方式分为三种,分别是:同 ...
- 彻底理解线程同步与同步代码块synchronized
public class Demo { public static synchronized void fun1(){ } public synchronized void fun2(){ } pub ...
- 对象及变量的并发访问(同步方法、同步代码块、对class进行加锁、线程死锁)&内部类的基本用法
主要学习多线程的并发访问,也就是使得线程安全. 同步的单词为synchronized,异步的单词为asynchronized 同步主要就是通过锁的方式实现,一种就是隐式锁,另一种是显示锁Lock,本节 ...
- java中的synchronized同步代码块和同步方法的区别
下面这两段代码有什么区别? //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized ...
- Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)
关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...
- 编程开发之--java多线程学习总结(2)同步代码块
1.第一种解决办法:同步代码块,关键字synchronized package com.lfy.ThreadsSynchronize; /** * 1.使用同步代码块 * 语法: synchroniz ...
- java 多线程:线程通信-等待通知机制wait和notify方法;(同步代码块synchronized和while循环相互嵌套的差异);管道通信:PipedInputStream;PipedOutputStream;PipedWriter; PipedReader
1.等待通知机制: 等待通知机制的原理和厨师与服务员的关系很相似: 1,厨师做完一道菜的时间不确定,所以厨师将菜品放到"菜品传递台"上的时间不确定 2,服务员什么时候可以取到菜,必 ...
- 2.2synchronized同步语句块
使用synchronized虽然能够避免不同步的现象出现,但是也会出现弊端,比如代码执行时间过长,那么其他线程就必须等待该线程执行完毕释放锁之后才能拿到锁. 面对这种问题可以使用同步代码块来解决. 2 ...
随机推荐
- [Oracle]Oracle表权限小结
在数据库中,表是我们接触得最多的数据库对象,接下来对与表有关的系统权限与对象权限做一个小结. (1)与表有关的系统权限 CREATE TABLE 在当前Schema中创建.删除.修改表. SELECT ...
- React中setState同步更新策略
setState 同步更新 我们在上文中提及,为了提高性能React将setState设置为批次更新,即是异步操作函数,并不能以顺序控制流的方式设置某些事件,我们也不能依赖于this.state来计算 ...
- 解读JavaScript中的Hoisting机制(js变量声明提升机制)
hoisting机制:javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 知识点一:javascript是没有 ...
- axios基础用法
概述: 1.axios:一个基于Promise用于浏览器和nodejs的HTTP客户端.本质是对ajax的封装. 特征: 1>从浏览器中创建XMLHttpRequest 2>从node.j ...
- JDBC编程:使用 Statement 修改数据库
获取数据连接后,即可对数据库中的数据进行修改和查看.使用 Statement 接口可以对数据库中的数据进行修改,下面是程序演示. /** * 获取数据库连接,并使用SQL语句,向数据库中插入记录 */ ...
- ABAP术语-Business Components
Business Components 原文:http://www.cnblogs.com/qiangsheng/archive/2007/12/26/1015254.html Group of re ...
- DbUtils: JDBC Utility Component Examples翻译
DbUtils:JDBC实用组件实例 这一页提供了一些展示如何使用DbUtils的示例. 基本用法 DbUtils是一个非常小的类库,因此浏览完所有类的javadoc不会花费很长时间.DbUtils的 ...
- LINUX 启动图形界面和查看运行级别
runlevel 查看当前运行级别 cat /etc/inittab 可以查看7个运行级别 init 6 == reboot == shuttdown -r now 都是表示重启的命令 ...
- ASP.NET Web用户控件
用户控件可用来实现页面中可重用的代码,是可以一次编写就多处方便使用的功能块.它们是 ASP.NET控件封装最简单的形式.由于它们最简单,因此创建和使用它们也是最简单的.用户控件实际上是把已有的服务器控 ...
- PyCharm+QT Designer整合
CMD下使用pip安装PyQt4或者PYQT5 这里要注意,你下载的PYQT5不包含QT designer 还要:pip3 install PyQt5-tools,好像Pyqt5中将designer分 ...