Java代码块的使用
- 1.代码块介绍
- 2.代码块的基本使用
- 3.静态代码块
1.代码块介绍
代码块的基本语法内容:
2.代码块的基本使用
在执行构造方法时,会首先加载代码块里面的内容
代码块调用的顺序优先于构造方法
/**
* 代码块
*/
public class Codeblock {
private String name;
private double price;
private String director;
{
System.out.println("屏幕打开!");
System.out.println("广告开始!");
System.out.println("开始播放!");
}
public Codeblock(String name) {
this.name = name;
}
public Codeblock(String name, double price) {
this.name = name;
this.price = price;
}
public Codeblock(String name, double price, String director) {
this.name = name;
this.price = price;
this.director = director;
}
}
测试类:
Codeblock shentan = new Codeblock("神探狄仁杰");
Codeblock lihuanying = new Codeblock("你好李焕英", 59.9);
--------------------------
输出:
屏幕打开!
广告开始!
开始播放!
屏幕打开!
广告开始!
开始播放!
当构造器存在冗余的时候,可以借助代码块有效减少冗余🍫
3.静态代码块
static
代码块又叫静态代码块,作用就是对类进行初始化,随着类的加载而执行,且只会执行一次,而如果是普通代码块,每创建一个对象都会执行一次
那么,类什么时候会被加载呢?
- 创建对象实例时
- 创建子类对象实例,父类也会被加载(父类先被加载,子类后被加载)
- 使用类的静态成员时
实例:
/**
* 静态代码块
*/
public class CodeblockStatic {
static {
System.out.println("静态代码块执行~");
}
}
测试:
CodeblockStatic c1 = new CodeblockStatic();
CodeblockStatic c2 = new CodeblockStatic();
----------------------
只会输出一个:
静态代码块执行~
要点注意:使用类的静态成员,普通代码块不会执行🍬
创建一个对象时,在一个类调用顺序是:
- 静态代码块和静态属性初始化(优先级一致,谁在前谁先执行)
public class CodeblockStatic {
// 静态属性初始化
private static int n = getN();
static {
System.out.println("静态代码块执行~");
}
public static int getN() {
System.out.println("getN被调用");
return 521;
}
}
---------------------------------
输出:
getN被调用
静态代码块执行~
- 普通代码块和普通属性初始化(优先级一致,谁在前谁先执行)
- 调用构造方法
public class CodeblockStatic {
{
System.out.println("普通代码块执行~");
}
// 静态属性初始化
private static int n = getN();
static {
System.out.println("静态代码块执行~");
}
public static int getN() {
System.out.println("getN被调用");
return 521;
}
public CodeblockStatic() {
System.out.println("构造器执行~");
}
}
测试:
CodeblockStatic c1 = new CodeblockStatic();
CodeblockStatic c2 = new CodeblockStatic();
----------------------------------
输出:
getN被调用
静态代码块执行~
普通代码块执行~
构造器执行~
普通代码块执行~
构造器执行~
存在继承关系的执行顺序:(面试高频真题)
静态代码块只可以调用静态成员,普通代码块可以调用任意成员🍭