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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值