普通代码块


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

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

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

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

JAVA_四大代码块_普通代码块、构造代码块、静态代码块、同步代码块。的更多相关文章

  1. java synchronized静态同步方法与非静态同步方法,同步语句块

    摘自:http://topmanopensource.iteye.com/blog/1738178 进行多线程编程,同步控制是非常重要的,而同步控制就涉及到了锁. 对代码进行同步控制我们可以选择同步方 ...

  2. [java多线程] - 锁机制&同步代码块&信号量

    在美眉图片下载demo中,我们可以看到多个线程在公用一些变量,这个时候难免会发生冲突.冲突并不可怕,可怕的是当多线程的情况下,你没法控制冲突.按照我的理解在java中实现同步的方式分为三种,分别是:同 ...

  3. 彻底理解线程同步与同步代码块synchronized

    public class Demo { public static synchronized void fun1(){ } public synchronized void fun2(){ } pub ...

  4. 对象及变量的并发访问(同步方法、同步代码块、对class进行加锁、线程死锁)&内部类的基本用法

    主要学习多线程的并发访问,也就是使得线程安全. 同步的单词为synchronized,异步的单词为asynchronized 同步主要就是通过锁的方式实现,一种就是隐式锁,另一种是显示锁Lock,本节 ...

  5. java中的synchronized同步代码块和同步方法的区别

    下面这两段代码有什么区别? //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized ...

  6. Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)

    关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...

  7. 编程开发之--java多线程学习总结(2)同步代码块

    1.第一种解决办法:同步代码块,关键字synchronized package com.lfy.ThreadsSynchronize; /** * 1.使用同步代码块 * 语法: synchroniz ...

  8. java 多线程:线程通信-等待通知机制wait和notify方法;(同步代码块synchronized和while循环相互嵌套的差异);管道通信:PipedInputStream;PipedOutputStream;PipedWriter; PipedReader

    1.等待通知机制: 等待通知机制的原理和厨师与服务员的关系很相似: 1,厨师做完一道菜的时间不确定,所以厨师将菜品放到"菜品传递台"上的时间不确定 2,服务员什么时候可以取到菜,必 ...

  9. 2.2synchronized同步语句块

    使用synchronized虽然能够避免不同步的现象出现,但是也会出现弊端,比如代码执行时间过长,那么其他线程就必须等待该线程执行完毕释放锁之后才能拿到锁. 面对这种问题可以使用同步代码块来解决. 2 ...

随机推荐

  1. Spring知识点总结(四)之SpringAOP基础 - 代理设计模式

        1. 分析程序中存在的问题(高内聚,低耦合)        通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...

  2. stl之std::remove_copy

    template <class InputIterator, class OutputIterator, class T> OutputIterator remove_copy (Inpu ...

  3. Mac iOS 允许从任何来源下载应用并打开

    一个快捷的小知识点,mark! 允许从任何来源下载应用并打开,不用手动去允许,更加简洁! 只需一行命令 sudo spctl --master-disable 1.正常情况下,打开偏好设置,选择安全性 ...

  4. 动态规划(一)POJ1163

    动态规划算法是比较实用的算法之一,结合实际问题能更好的熟悉这个算法 下面以POJ1163为例子 1. 首先是题目大意 :在给定的一个数字三角形中找到一条自上而下的路径,路径每一步只能左下或者右下,最后 ...

  5. leetcode笔记(五)809. Expressive Words

    题目描述 Sometimes people repeat letters to represent extra feeling, such as "hello" -> &qu ...

  6. Zabbix——部署(DB与web一体)

    前提条件: CentOS连接网络并可以正常访问网络 DNS设置完成,可以Ping同外网域名 安装数据库为8.0版本 关闭防火墙 如果需要搭建分离式请见:DB与Web分离 &DB.web.age ...

  7. vue兄弟组件传值$on多次执行的问题

    首先附上如何进行兄弟组件通信的方法链接 https://segmentfault.com/a/1190000011882494 下面是$on多次执行的解决办法 https://blog.csdn.ne ...

  8. 图片懒加载 jquery.lazyload

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Maven命令参数

    命令参数 备注 mvn -v --version 显示版本信息; mvn -V --show-version 显示版本信息后继续执行Maven其他目标; mvn -h --help 显示帮助信息; m ...

  10. mongo数据库相关目录

    mongodb的docker化安装 mongodb的windows系统下安装 grafana使用Prometheus数据源监控mongo数据库 mongodb副本集的docker化安装 mongodb ...