前言
java类的五大成员分别是属性、方法、构造器(构造函数)、代码块、内部类
本篇文件将向大家介绍其中之一的代码块。
一、代码块是什么?
Java代码块是一组代码语句,这些语句被包含在一对{}中,代码块可以用于限制变量的作用域,控制流程等操作。
特点:1.代码块类似于方法,将逻辑语句封装在方法体中
2.代码块没有方法名,返回值,参数,只有方法体和修饰符
3.[修饰符]{代码块};(这里的分号可写可不写)
4.代码块相当于对构造器的补充机制,多个构造器中重复代码可以放到代码块中
5.构造器的最前面默认调用普通代码块
java代码块大致可以分为4类分别是:局部代码块、构造代码块、静态代码块、同步代码块.
二、四类代码块
1. 类加载的时机
在介绍代码块之前我们需要先了解类加载的时机
1.创建对象时(new)
2.创建子类对象实例,父类也会被加载
3.使用类的静态成员时,调用子类的静态成员时会先去调用父类的静态代码块。
2.局部代码块
局部代码块是定义在方法或语句块中的代码块,它只有在被包含的方法或语句块执行时才会被执行。局部代码块的主要作用是允许在代码块中定义变量,这些变量只在这个代码块内可见。这种方式可以避免变量名重复,也可以限制变量的作用范围,提高代码的可读性。
我们可以看到在代码块中定义的b在main中是访问不到的,这里体现了代码块限制变量的作 用范围
去除错误语句后:
我们可以看到abcabc并没有输出,这个输出是直接定义到CodeBlock1类的范围内的,是之后我们将要介绍的构造代码块.
3.构造代码块
构造代码块是定义在类中的一个代码块,在类的每次实例化对象时都会被执行。构造代码块的主要作用是在每次创建对象时执行一些预处理操作。与构造函数不同的是,构造代码块不能被继承和重载。如果存在多个构造函数,它们都可以共享同一个构造代码块。
我们可以看到这里的构造代码块运行了两次,这就是构造代码块的特点,每次类加载都会调用一次,首先我们创建了movie对象,类进行加载,一个参数的构造器中默认调用构造代码块,然后我们创建了movie1对象,类进行加载,两个参数的构造器 中默认调用构造代码块。
4.静态代码块
Java中的静态代码块是定义在类中,并且使用关键字
static修饰的某个代码块。它会在类被加载时执行,只会执行一次。静态代码块通常用来初始化静态变量或者执行需要在类初始化时就完成的操作,例如数据库驱动的加载、日志管理系统的初始化等等。
需要注意的是,静态代码块只会在类被加载时执行一次,即使类被实例化多次,静态代码块也只会执行一次。同时需要注意静态代码块的执行顺序是按照它在类中出现的先后次序进行的,也就是说,在类中出现早的静态代码块先执行,出现晚的静态代码块后执行.
5.在含继承时的执行顺序
首先我们要知道如果有继承时,那么代码块的执行顺序就是父类静态>子类静态>父类非静态>子类非静态
首先我们创建了AA类的对象,那么就触发了类的加载,首先调用静态代码块,然后调用非静态代码块。
之后我们创建了BB类的对象,这时由于BB类继承了AA类,所以是想去调用父类的静态代码块,但是父类的静态代码块已经被调用了,所以直接调用BB本身的静态代码块,然后再去父类去调用父类的非静态代码块,然后再调用本类的非静态代码块。
然后用类名去访问了各自的静态属性,其实调用静态属性也会访问静态代码块,但是静态代码块只能被调用一次所以就没有再去调用静态代码块了。
6.同步代码块
对于同步代码块这里我们只简单的介绍一下,到线程的时候再进行详细讲解
Java中的同步代码块是Java多线程编程中的一个重要概念。同步代码块是一个特殊的代码块,在运行时只允许一个线程进入并执行其中的代码,其他线程必须等待该线程执行完毕后才能进入执行。基本的语法结构:
synchronized(object){
需要同步的代码
}
其中object是需要同步的对象










被折叠的 条评论
为什么被折叠?



