java静态代码块、普通代码块、构造代码块

静态代码块、普通代码块、构造代码块

执行顺序:(优先级从高到低。)静态代码块>main方法>构造代码块>构造方法。

其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。

static{...}是静态块,而只有{...}的是叫做构造块。

而构造块是,只要建立一个对象,构造代码块都会执行一次。

静态块优先于主方法的执行,静态块优先于构造块,然后是构造方法的执行,而且只执行一次!

1、普通代码块

普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”。

public class Test {

   public staticvoidmain(String[] args){

       {

           int x=3;

           System.out.println("1,普通代码块内的变量x="+x);   

        }

                     

        int x=1;

       System.out.println("主方法内的变量x="+x);

                     

       {

          inty=7;

         System.out.println("2,普通代码块内的变量y="+y);   

        }

   }

}

执行结果:

1,普通代码块内的变量x=3

主方法内的变量x=1

2,普通代码块内的变量y=7

2、构造代码块

构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

public class Test {

   {

     System.out.println("第一代码块");   

    }

      

    public Test(){

     System.out.println("构造方法");

   }

          

   {

     System.out.println("第二构造块");

   }

   public staticvoidmain(String[] args){    

      new Test();

      new Test();

      new Test();

                

   }

}

执行结果:

第一代码块

第二构造块

构造方法

第一代码块

第二构造块

构造方法

第一代码块

第二构造块

构造方法

3、静态代码块

静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。

如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。

注意:静态代码块不能存在于任何方法体内。


练习1:

class Code{

    {

      System.out.println("Code的构造块");

    }

   

    static{

        System.out.println("Code的静态代码块");

        }

       

    public Code(){

        System.out.println("Code的构造方法");

        }

    }

   

public class CodeBlock03{

     {

      System.out.println("CodeBlock03的构造块");   

     }

    

     static{

        System.out.println("CodeBlock03的静态代码块");

     }

       

     public CodeBlock03(){

        System.out.println("CodeBlock03的构造方法");

     }

       

      public static void main(String[] args){

            System.out.println("CodeBlock03的主方法");

            new Code();

            new Code();

            new CodeBlock03();

            new CodeBlock03();

          }

    }


执行结果:

CodeBlock03的静态代码块

CodeBlock03的主方法

Code的静态代码块

Code的构造块

Code的构造方法

Code的构造块

Code的构造方法

CodeBlock03的构造块

CodeBlock03的构造方法

CodeBlock03的构造块

CodeBlock03的构造方法

 

练习2:

package riqi_test;

 

import java.util.Random;

/**

 * 静态代码块、构造块、构造函数练习

 * @author fandi1993

 *

 */

public class EmployeeTest {

   public staticvoidmain(String[] args){

      Employee[] e = new Employee[3];

      e[0] = newEmployee("张三", 400);

      e[1] = newEmployee(500);

      e[2] = newEmployee();

     

      for (Employee employee : e) {

      System.out.println("name:"+employee.getName()+",id:"+employee.getId()+",salary:"+employee.getSalary());

      }

   }

}

 

class Employee{

   private staticintnextId;  //静态变量

  

   private intid;

   private String name;

   private doublesalary;

   /*

    * 静态代码块

    */

   static{

      Random generator = new Random();

      nextId = generator.nextInt(10000);

   }

   /*

    * 构造代码块

    */

   {

      id = nextId;

      nextId++;

   }

   /*

    * 构造方法

    */

   public Employee(){

     

   }

   public Employee(String namedoublesalary){

      this.name = name;

      this.salary = salary;

   }

   public Employee(doublesalary){

      this("Emplyee#"+nextIdsalary);

   }

  

   public intgetId() {

      return id;

   }

   public voidsetId(intid) {

      this.id = id;

   }

   public String getName() {

      return name;

   }

   public voidsetName(String name){

      this.name = name;

   }

   public doublegetSalary() {

      return salary;

   }

   public voidsetSalary(doublesalary){

      this.salary = salary;

   }

  

}


执行结果:

name:张三,id:9316,salary:400.0

name:Emplyee#9317,id:9317,salary:500.0

name:null,id:9318,salary:0.0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值