您的位置:首页 > 编程语言 > Java开发

Java的4种代码块

2015-06-30 23:52 561 查看
Java的4种代码块

一、普通代码块

  直接在一个方法中出现的{}就称为普通代码块,例子程序如下:

public class CodeDemo01{

public static void main(String[] args){

//普通代码块

{

int x = 10;

System.out.println("x=" + x);

}

int x = 100;

System.out.println("x=" + x);

}

}

  二、构造代码块

  直接在类中定义的没有加static关键字的代码块{}称为构造代码块,例子程序如下:

  public class CodeDemo02{

  public CodeDemo02(){

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

  }

  //这是构造代码块,而且在new对象时,构造代码块优先构造方法执行

  {

  System.out.println("=========这是构造块!=========");

  }

  public static void main(String[] args){

  new CodeDemo02();

  new CodeDemo02();

  }

  }

  三、静态代码块

  使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化,例子程序如下:

  public class CodeDemo03

  {

  static{

  System.out.println("这是主类中的静态代码块!");

  }

  public static void main(String[] args){

  new Demo();

  new Demo();

  new Demo();

  }

  }

  class Demo

  {

  static{

  System.out.println("这是Demo类中的静态代码块!");

  }

  {

  System.out.println("这是Demo类中的构造块!");

  }

  public Demo(){

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

  }

  }

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

  四、同步代码块

  同步代码块主要出现在多线程中。

下面是相关例子:

public class Main{

{

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

}



static{

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

}



public Main(){

System.out.println("构造函数");

}



public static void main(String args[]){

Main m;

}

}

执行结果为:



静态代码块



为什么呢,程序里面只是申请了一个引用,但是并没有实例化,这说明构造方法和构造块都是在实例化时调用的,而静态代码块不是,分析内存知道,静态的并不属于对象,而是属于类,不论实例化多少对象,静态的内存只有一个,在出现声明引用的时候即分配内存!



再看下面例子:

public class Main{

{

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

}



static{

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

}



public Main(){

System.out.println("构造函数");

}



public static void main(String args[]){

Main m=new Main();

}

}



这个程序跟上面那个比较只是实例化了一个对象,为对象分配了内存,那么看执行结果:



静态代码块

构造块

构造函数



这个说明了一个问题:在程序执行过程中,静态代码块优于构造块,构造块优于构造函数执行。



再看下面代码:

public class Main{

{

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

}



static{

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

}



public Main(){

System.out.println("构造函数");

}



public static void main(String args[]){

Main m=new Main();

Main m1=new Main();

}

}



此代码与上面代码相比较是实例化了两个对象,那么看执行结果:



静态代码块

构造块

构造函数

构造块

构造函数



此结果足以说明一个问题:静态代码块不论实例化多少对象,只调用一次!而其他的执行多次!

注:静态代码块是在main方法执行之前执行的!

转载自: http://blog.sina.com.cn/s/blog_6730a3aa0100wmv0.html 转载自:http://www.cnblogs.com/end/archive/2012/12/21/2827554.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: