Java简明解读代码块的应用

目录
  • 什么是代码块
  • 代码块的分类
  • 普通代码块
  • 构造块(实例代码块)
  • 静态代码块
  • 代码块的一些特性

什么是代码块

java中被 {} 括起来的代码这部分被称为代码块

代码块的分类

普通代码块(本地代码块)
构造块(实例代码块)
静态块
同步代码块

本片文章就先讲普通代码块,构造快和静态块。而同步代码块一般在多线程种用到,后面写到多线程的时候会说同步代码块,在这就不多说了。代码块还是很简答的,但是有一些要注意的点希望大家记住,接下来我会通过普通代码块,构造快和静态块一起对比来讲解。

普通代码块

普通代码块就是用{}括起来的代码,这部分就是普通代码块,也称本地代码块。举个例子,看下面这段代码:

public class Test {
    public static void main(String[] args) {
        {
            System.out.println("这是普通代码块");
        }
    }
}

主函数中,输出 “这是普通代码块”这个部分是被{}括起来的部分,并且它的前面没有任何限制条件,这部分就是 普通代码块。当然这种代码块没什么太大的意义,因为没有限制条件,加不加{}它都会执行,所以平时不加{}也可以。

构造块(实例代码块)

实例代码块一般定义在类的内部,方法的外部。看下面这段代码:

class blocks{
    public int a;
    {
        this.a = 1;
        System.out.println("这是实例代码块");
    }
public class Test {
    public static void main(String[] args) {
    }
}

而实例代码块和普通代码块非常像,只是位置不同而已,还有一点,实例代码块可以为普通的成员变量进行赋值。

静态代码块

静态成员变量也就是被static修饰的变量的初始化分为两种:就地初始化 和 静态代码块初始化。

就地初始化就是在创建变量的时候就给它进行了赋值。接下来我们来看一下静态代码块初始化,

先来了解一下什么是静态代码块,看一下下面的代码:

class blocks{
    static int a ;
    static {
        a = 1;//对静态的成员变量进行赋值
        System.out.println("这是静态代码块");
    }
}
public class Test {
    public static void main(String[] args) {
    }
}

静态代码块就是在普通代码块的前面加了一个static,这就是静态代码块。而我可以在静态代码块里面对静态成员变量进行赋值,静态代码块只能为静态的成员变量进行赋值。

代码块的一些特性

静态代码块不管生成多少个对象,其只会执行一次

如果有多个静态或实例代码块,看定义的顺序

如果没有实例化对象,只会执行静态的

静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的

如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并

实例代码块只有在创建对象时才会执行

在这给大家讲解一下代码块的特性,看一下下面这段代码:

class Blocks {
    public int a;
    static int b;
    public double c;
    public Blocks(){
        System.out.println("这是一个不带参数的构造方法");
    }
    {
        this.a = 1;
        System.out.println("这是实例代码块");
    }
    static {
        b = 1;
        System.out.println("这是静态代码块");
    }
}
public class Test {
    public static void main(String[] args) {
        Blocks blocks = new Blocks();
    }
}

我们都知道我们在主函数中创建对象的时候,编译器会调用构造方法,也就是public Blocks这个函数会被执行。那么这段代码的运行结果是什么?是只执行构造方法?还 是从上到下顺序执行?

答案是**静态代码块先执行,然后是实例代码块,最后是构造方法。**运行结果如图所示:

不只是这样,静态代码块在整个程序中,运行且只运行一次。看下面这张图:

这里我在上面代码的基础上又创建了一个对象,除了静态代码块,其它都是执行了两次。剩下的还有一些结论,大家记一下就可以了。

到此这篇关于Java简明解读代码块的应用的文章就介绍到这了,更多相关Java代码块内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java 浅析代码块的由来及用法

    1.概述   代码块也是属于类中的成员(即是类的一部分),类似于方法,将逻辑语句封装在方法体中,通过{}包围起来.在类加载时或创建对象时隐式调用.   下面为主要代码块的格式与详细解析概述: 2.主要应用顺序: 分析应用场景:当所在的类中的需要进行一些必要的操作时,可以通过放在代码块来进行,而不用通过给每个构造器放入相同的语句,会显得比较多余. 应用顺序:无论创建对象时,都会优先调用代码块中的内容.这里当你运用代码块时,是需要将调用构造器时候会自动先调用代码块. 3.代码块的注意事项和细节议论

  • JAVA代码块你了解吗

    目录 非静态代码块:没有static修饰的代码块 静态代码块:用static修饰的代码块 用处 总结 非静态代码块:没有static修饰的代码块 可以有输出语句 可以对类的属性声明进行初始化操作 可以调用静态或者非静态的变量或方法 若有多个非静态的代码块,那么按照从上到下的顺序依次执行 再次创建对象的时候都会执行,且先于构造函数执行 代码: public class Per { { System.out.println("非静态代码块1"); } { System.out.printl

  • 详解java中的四种代码块

    在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. 3.静态代码块: 用static{}包裹起来的代码片段,只会执行一次.静态代码块优先于构造块执行. 4.同步代码块: 使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性.同步代码块需要写在方法中. 二.静态代码块和构造

  • Java杂谈之类和对象 封装 构造方法以及代码块详解

    目录 1. 类和对象的初步认知 2. 类的实例化 3. 类的成员 字段(属性/成员变量) 方法 static 关键字 修饰字段 修饰方法 修饰代码块(暂不讲) 修饰类(暂不讲) 4. 封装 5. 构造方法 6. this 用法 关于引用的几个注意事项: 7. 代码块 Java当中的类和对象 1. 类和对象的初步认知 java 是一门面向对象的语言,所谓面向对象有别于面向过程,面向对象是只需对象之间的交互即可完成任务,但是面向过程的话,需要我们将每一个步骤都详细地做出来.比如,以洗衣服为例,如果是

  • Java深入理解代码块的使用细节

    目录 1.基本介绍 基本语法 快速入门 2.代码块细节 类的调用顺序 实例 代码块细节2 实例 代码块细节2 实例 1.基本介绍 代码块又称为初始化块,属于类中的成员(类的一部分),类似于方法,讲逻辑语句封装在方法体中,用{}抱起来: 但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用. 基本语法 (修饰符)(可有可无){代码}: 注: 1.修饰符可选,要写只能写static 2.代码块可分为两类,使用static修饰的叫静态代码块,没有static修饰的叫普

  • Java浅析代码块与构造块及静态块三者之间的关系

    目录 普通代码块(本地代码块) 构造块(实例代码块) 静态块(静态代码块) 他们之间有什么关系呢 例子 分析 普通代码块(本地代码块) 定义在方法里面用{ }括起来的代码块(凡是用{ }括起来都叫代码块,只是没有细分),就是普通代码块,也叫本地代码块.(不多见,也不常用) 例如: public class Test { public static void main(String[] args){ { System.out.println("本地代码块!"); } } } 构造块(实例

  • Java简明解读代码块的应用

    目录 什么是代码块 代码块的分类 普通代码块 构造块(实例代码块) 静态代码块 代码块的一些特性 什么是代码块 java中被 {} 括起来的代码这部分被称为代码块 代码块的分类 普通代码块(本地代码块)构造块(实例代码块)静态块同步代码块 本片文章就先讲普通代码块,构造快和静态块.而同步代码块一般在多线程种用到,后面写到多线程的时候会说同步代码块,在这就不多说了.代码块还是很简答的,但是有一些要注意的点希望大家记住,接下来我会通过普通代码块,构造快和静态块一起对比来讲解. 普通代码块 普通代码块

  • Java 中普通代码块,构造代码块,静态代码块区别及代码示例

    Java中普通代码块,构造代码块,静态代码块区别及代码示例 //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--"先出现先执行" public class CodeBlock01{ public static void main(Strin

  • 深入浅析Java中普通代码块、构造代码块与静态代码块

    //执行顺序:(优先级从高到低.) 静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1.普通代码块 public static void main(String[] args) { /*普通代码块: *直接定义在在方法或语句中出现"{普通代码的执行语句}"的就称为普通代码块. *普通代码块执行顺序由他们在代码中出现的次序决定--"先出现先执行" * */ { System.out.p

  • 关于Java中静态代码块的执行浅析

    前言 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的:需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的, 静态方法在类加载的时候就已经加载,可以用类名直接调用. 比如main方法就必须是静态的,这是程序入口 两者的区别就是: 静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 问题及总结 关于静态代码块其实是面试时老生常谈的问题,虽然面试时问了我也大概知道,但是在用的时候还

  • java中静态代码块与构造方法的执行顺序判断

    前言 静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存.所以静态的会优先非静态的. 执行构造器(构造方法)的时候,在执行方法体之前存在隐式三步: 1,super语句,可能出现以下三种情况: 1)构造方法体的第一行是this语句,则不会执行隐式三步, 2)构造方法体的第一行是super语句,则调用相应的父类的构造方法, 3)构造方法体的第一行既不是this语句也

  • Java并发系列之JUC中的Lock锁与synchronized同步代码块问题

    目录 一.Lock锁 二.锁的底层 三.案例 案例一:传统的synchronized实现 案例二:Lock锁的实现 四.Lock锁和synchronized的区别 写在前边: 在Java服务端中,会常常遇到并发的场景,以下我使用两个售票的案例实现传统的Lock锁与synchronized加锁解决线程安全问题. 本章代码:Gitee: juc.demo 一.Lock锁 ReentrantLock类: 可重用锁(公平锁|非公平锁) ReentrantReadWriteLock.ReadLock:读锁

  • java 面向对象代码块及不同位置对属性赋值的执行顺序

    目录 代码块 对属性可以赋值的位置 不同位置对属性赋值的执行顺序 结语 前言: java中的代码块介绍以及一个类中不同位置对属性赋值的执行顺序. 代码块 1.代码块的作用:用来初始化类.对象 2.代码块如果有修饰的话,只能使用 static 3.分类:静态代码块 VS 非静态代码块 4.静态代码块 内部可以有输出语句. 随着类的加载而执行,而且只执行一次. 作用:初始化类的信息. 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行. 静态代码块的执行要优先于非静态代码块的执行. 静态代码

  • Android代码块执行顺序分析总结

    本文介绍了Android代码块执行顺序分析总结,分享给大家,具体如下: 子类.父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中时不时遇到的一个问题,也是比较容易混淆的. 基础准备: 变量: 成员变量(叫类变量.实例变量)和局部变量 方法: 成员方法和构造方法 代码块:普通代码块.构造代码块.静态代码块.同步代码块 测试的父类: public class ParentClass { public static String name = "爸爸"; public int ag

  • java中synchronized(同步代码块和同步方法)详解及区别

     java中synchronized(同步代码块和同步方法)详解及区别 问题的由来: 看到这样一个面试题: //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized (obj){} } synchronized用于解决同步问题,当有多条线程同时访问共享数据时,如果进行同步,就会发生错误,Java提供的解决方案是:只要将操作共享数据的语句在某一时段让一个线程执行完,在执行过程中,其他

随机推荐