代码块

代码码块的定义与使用

根据代码出现是位置以及关键字,分为以下四种代码块:

  • 普通代码块
  • 构造快
  • 静态块
  • 同步代码块

普通代码跨块(定义在方法中的代码块)

public class Test{    
	public static void main(String[] args) {        
        { //直接使用{}定义,普通方法块            
            int x = 10 ;            
            System.out.println("x = " +x);       
        }        
        int x = 100 ;        
        System.out.println("x = " +x);    
    } 
}

代码块

public class Test{    
	public static void main(String[] args) { 
		int x = 100 ;         
        { //直接使用{}定义,普通方法块            
            int x = 10 ;            
            System.out.println("x = " +x);       
        }              
        System.out.println("x = " +x);    
    } 
}

代码块

构造块

  • 定义在类中的代码块,不加任何修饰符
  • 在对象产生时,优先于构造方法执行,有几个对象产生,就调用几次构造块,用于在构造方法执行前完成一些属性的初始化操作
class Person{     
    public Person(){        
        System.out.println("2.Person类的构造方法");    
    }
    { 
        //定义在类中,不加任何修饰符,构造块        
        System.out.println("1.Person类的构造块");    
    }   
}
public class Test{    
    public static void main(String[] args) {        
        new Person();        
        new Person();    
    } 
}

代码块

静态代码块

非主类中的静态代码块

在类加载时执行(什么时候用到这个类),优先于构造块执行,无论有多少对象产生,只会调用一次

class Person{     
    public Person(){        
        System.out.println("2.Person类的构造方法");    
    }
    { 
        //定义在类中,不加任何修饰符,构造块        
        System.out.println("1.Person类的构造块");    
    }  
    static {
        //定义在非主类中的静态块        
        System.out.println("3.Person类的静态块");  
    } 
}
public class Test{    
    public static void main(String[] args) {        
        new Person();        
        new Person();    
    } 
}

代码块

主类中的静态代码块

主类中的静态块优先于主方法执行,其他和非主类相同

public class Test{        
    public Test(){        
        System.out.println("2.Test的构造方法");    
    }
    {        
        System.out.println("1.Test的构造块");    
    }    
    static{
        System.out.println("3.Test的静态块");    
    }
 
    public static void main(String[] args) {       
         System.out.println("--start--");        
         new Test();        
         new Test();        
         System.out.println("--end--");    
        } 
    }

代码块

同步代码块