1、局部代碼塊
普通代碼塊就是直接定義在方法或語句中,以”{}”劃定的代碼區域,此時隻需要關注作用域的不同即可,方法和類都是以代碼塊的方式劃定邊界的。
class TestDemo{
public static void main(String[] args) {
{
int x = 1;
System.out.println("普通代碼塊" + x);
}
int x = 99;
System.out.println("代碼塊之外" + x);
}
}
複制
運作結果:
2、構造代碼塊
直接定義在類中成員位置的代碼塊,優先于構造方法執行,構造代碼塊用于執行所有對象均需要的初始化動作,每建立一個對象均會執行一次構造代碼塊。
class Person {
private String name;
private int age;
{
System.out.println("構造代碼塊執行了");
}
Person(){
System.out.println("Person無參數的構造函數執行");
}
Person(int age){
this.age = age;
System.out.println("Person(age)參數的構造函數執行");
}
}
public class PersonDemo{
public static void main(String[] args){
Person p = new Person();
Person p1 = new Person(23);
}
}
複制
運作結果:
3、靜态代碼塊
靜态代碼塊是定義在成員位置,使用static修飾的代碼塊。
特點:産生對象時執行,它優先于主方法執行、優先于構造代碼塊執行。
該類不管建立多少對象,靜态代碼塊隻執行一次。
可用于給靜态變量指派,用來給類進行初始化。
案例1:
class Person {
private String name;
private int age;
//靜态代碼塊
static {
System.out.println("靜态代碼塊執行了");
}
public Person(String name) {
super();
this.name = name;
}
public Person(){
}
}
public class PersonDemo {
public static void main(String[] args) {
int a = 10;
Person p1 = new Person();
Person p2 = new Person("劉備");
Person p3 = new Person("劉備");
Person p4 = new Person("劉備");
}
}
複制
運作結果:
案例2:
class Person {
private String name;
private int age;
//靜态代碼塊
static {
System.out.println("靜态代碼塊執行了");
}
//成員代碼塊 又叫構造代碼塊 對象級别的代碼塊,每次建立對象都會執行一次
{
System.out.println("我是構造代碼塊");
}
public Person(String name) {
super();
this.name = name;
}
public Person(){
}
}
public class PersonDemo {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("劉備");
Person p3 = new Person("劉備");
Person p4 = new Person("劉備");
int a = 10;
//局部代碼塊限定變量作用域範圍
{
System.out.println(a);
int b = 20;
System.out.println(b);
}
// System.out.println(b);
}
}
複制
運作結果: