java 静态块

小谈java中的静态块,非静态块

 

      java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++中的static,都是最先初始化好的。

所以注意:

a在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。

b静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生,

至于非静态块是存在每一个类中,除了带有static块以外,它最先执行,(在构造函数前)下面是一个例子。

 

publicclass text {
 public int a;
 {
  System.out.println("非静态2");
 }
 static{
   System.out.println("static");
 }
 text(){
  System.out.println("text");
 }
}
public class text1 extends text{
public int t;
public double w;
{
 System.out.println("非静态块");
}
static {
 System.out.println("static1");
}
public text1(){
 System.out.println("text1");
}
public static void main(String args[]){
 text1 te=new text1();
}
}
结果是:

static
static1
非静态2
text
非静态块
text1


非静态块比构造函数更早调用。

 


另外注意System.err.println()与System.out.println()的区别

例:

public  class  TestCodeSeg
{
     static
     {
         System.out.println( "1" );
     }
     {
         System.out.println( "2" );
     }
     public  TestCodeSeg()
     {
         System.err.println( "3" );
     }
     public  static  void  main(String[] args)
     {
         new  TestCodeSeg();
     }
}
求输出结果:

1

 2 

3 

3的位置不确定


解释:

1和2顺序是不变的,因为它们是静态(类装载时被执行),3是在构造函数里。所以,程序执行顺序是静态部分然后是构造函数。但是输出结果还要收到System.out和System.err的影响。System.out是行缓冲而System.err是不缓冲,所以System.err.println("3")是立即输出。但System.out.println("1")和System.out.println("2")则因为缓冲的原因可能稍晚(但1和2的顺序不变)。具体输出结果1先2后是绝对的,但3在哪里出现跟程序执行时情况有关。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值