前言:
思考下面代码运行结果是什么?
class Person1{
{
System.out.print(" P1 ");
}
static{
System.out.print(" P2 ");
}
public Person1(){
System.out.print(" P3 ");
}
}
public class Test13 extends Person1{
static{
System.out.print(" S1 ");
}
public Test13(){
System.out.print(" S3 ");
}
{
System.out.print(" S2 ");
}
public static void main(String[] args){
new Test13();
}
}
运行结果:
P2 S1 P1 P3 S2 S3
一、概念
代码块概念
代码块是由一对大括号 {}
包围起来的一段代码,它可以包含一条或多条语句。通过使用代码块,可以将一组相关的语句组织在一起,并且在代码块内部可以定义局部变量。
常见的代码块有以下几种:
方法体:方法体用 {}
包围起来,包含了方法中的执行逻辑和语句。
构造代码块:构造代码块在类的构造方法执行之前执行,用于对对象进行初始化操作。
静态代码块:静态代码块在类被加载时执行一次,用于对静态成员进行初始化或进行一些静态预处理任务。
二、代码块实现
2.1、方法体
方法体是指方法的具体实现部分,也就是包含了方法的逻辑和语句的代码块。方法体位于方法的声明部分和结束的位置之间,用于定义方法的具体功能。
public void myMethod() {
// 方法体开始
...
// 方法体结束
}
2.2、构造代码块
构造代码块会在每次创建对象时执行,并且在构造方法之前执行。它的作用是为对象进行一些共同的初始化操作,无论使用哪个构造方法创建对象,构造代码块总是会被执行。
public class MyClass {
// 构造代码块开始
{
// 构造代码块中的逻辑和语句
}
// 构造代码块结束
// 构造方法
public MyClass() {
// 构造方法中的逻辑和语句
}
}
构造代码块的特点和用途包括:
(1) 构造代码块在对象创建时会被执行,可以用来对对象进行共同的初始化操作,例如给成员变量赋初值。
(2) 构造代码块和构造方法一起完成对象的初始化过程,构造代码块在构造方法之前执行。
(3)如果一个类中定义了多个构造方法,它们都会调用构造代码块进行对象初始化。
需要注意的是,构造代码块属于实例化对象时执行的代码,对于静态成员的初始化操作应使用静态代码块。
2.3、静态代码块
用来对静态成员进行初始化或进行一些静态预处理任务的一种特殊代码块。它位于类的成员位置,使用关键字 static
加上一个匿名代码块来定义。
静态代码块只会在类被加载时执行一次,它在类加载时自动执行,无需调用。静态代码块主要用于进行静态成员的初始化操作或进行一些静态预处理任务,例如加载配置文件、创建数据库连接等。
public class MyClass {
// 静态代码块开始
static {
// 静态代码块中的逻辑和语句
}
// 静态代码块结束
// 其他静态成员变量和静态方法,例如:
private static int myStaticVariable;
}
静态代码块的特点和用途包括:
(1)静态代码块在类被加载时执行,只执行一次,并且在类的所有对象创建之前执行。
(2)静态代码块用于对静态成员变量进行初始化,可以给静态成员变量赋初值。
(3)静态代码块还可以进行一些其他的静态预处理任务,例如加载配置文件、创建数据库连接等。
需要注意的是,静态代码块属于类级别的代码,在类加载时执行,并且只会执行一次。它执行的顺序是按照代码的先后顺序来执行的。