1.代码块的定义:
使用{ }包裹的区域
2.分类
(1).局部代码块:
位置:在方法内部的代码块
作用:限定局部变量的作用域
class CodeBlock{
public void show(){
//局部代码块
{
int x=10;
System.out.println(x);
}
{
int x=20;
System.out.println(x);
}
}
}
(2)构造代码块
位置:在成员位置的代码块
作用:抽取多个构造方法的共性代码,从而简化编程
执行时间:每调用一次构造方法,即每创建一个对象就执行一次,且优于构造方法之前执行
public class pratice10 {
public static void main(String[] args) {
//主方法创建了两次对象
CodeBlock c1=new CodeBlock();
CodeBlock c2=new CodeBlock(12,14);
}
}
class CodeBlock{
int a;
int b;
//构造代码块
{
System.out.println("我是构造代码块");
}
public CodeBlock() {
System.out.println("我是无参构造");
}
public CodeBlock(int a, int b) {
this.a = a;
this.b = b;
System.out.println("我是全参构造");
}
}
//执行结果:
我是构造代码块
我是无参构造
我是构造代码块
我是全参构造
(3)静态代码块
位置:在成员位置,static修饰的代码块
作用:
a.初始化静态成员
b.由于在创建对象之前执行,并且只执行一次,所以通常会把预加载的代码放到静态代码块中,例如:数据库的连接,Xml,JSON等配置文件的读取
特点:无论创建多少个对象,只执行一次静态代码块
执行时机:类中的成员被访问 ,必然导致该类的静态代码块被执行
class CodeBlock{
int a;
int b;
//构造代码块
{
System.out.println("我是构造代码块");
}
//静态代码块,当类被加载的时候加载,且只加载一次
static {
System.out.println("我是静态代码块");
}
public CodeBlock() {
System.out.println("我是无参构造");
}
public CodeBlock(int a, int b) {
this.a = a;
this.b = b;
System.out.println("我是全参构造");
}
}
我是静态代码块
我是构造代码块
我是无参构造
我是构造代码块
我是全参构造
(4)同步代码块:多线程中使用,保证代码的原子性