public class UseStatic {
  private static int s;    
  public UseStatic(){
    System.out.println("Create new Class");
  }  static {
    System.out.println("static block initialized");
  }  
  
  public int getStatic(){
    return s;
  }  public void  setStatic(int i){
    s=i;
  }  public static void main(String[] args) {
    UseStatic classA= new UseStatic();
    UseStatic classB= new UseStatic();
    System.out.println("classA.s="+classA.getStatic()+";classB.s="+classB.getStatic());
    classA.setStatic(10);
    System.out.println("classA.s="+classA.getStatic()+";classB.s="+classB.getStatic());
    classB.setStatic(classB.getStatic()+10);
    System.out.println("classA.s="+classA.getStatic()+";classB.s="+classB.getStatic());
 }
}static {
    System.out.println("static block initialized");
  }  这是什么意思?

解决方案 »

  1.   

    static block...
    It's initialized before un-static variables...
      

  2.   

    static标注的东西会在类加载时最先加载,在内存中只有一份拷贝
      

  3.   

    static {
    }
    //静态块,与静态变量初始化一样。在类的首次加载时执行。初始化顺序与代码放置的先后顺序一致。
      

  4.   

    这代码为什么这么写?干吗用非static方法去操作static field
      

  5.   

    static { 

    //静态块,与静态变量初始化一样。在类的首次加载时执行。
    //初始化用的。
    //你去看看单利模式就明白了。public class Text()
    {
      private Text(){};  private static Text text = new Text();
      
      public static Text getText()
      {
        return text;
      }}
      

  6.   

    静态代码块
    static{}还有一种
    单独的代码块
    {}
    在构建器之前运行,
      

  7.   

    你再怎么get set  两个对象里的静态变量值都是一样的阿
      

  8.   

    static{}
    静态代码块,在Java中存在静态快static{}和非静态块{},其中静态块只有在类在第一次实例化时才会被执行,而非静态块在每次类实例化时都会执行。你的程序就是一个简单的测试而已,没有任何意义!
      

  9.   


    要说静态代码块的实际应用,在JDBC里的驱动经常用到.JDBC里加载驱动不是用Class.forName()么,当加载一个类的时候就会首先执行那个静态代码块,而JDBC的驱动就是在这个时候将自身注册的.
      

  10.   

    static {
       System.out.println("static");
    }
    这个是静态游离块。其执行的优先级较高,在进入main()之后,对象构建之前执行。看下面的例子:class StaticTest{
       //static {
        //   System.out.println("statictest");
       //}
       static private int age;
      {
         System.out.println("I'm not the first freeblock in runtime.");
      }
       static {
           System.out.println("statictest");
       }   public static void main(String[] args){
           staticTest st = new StaticTest();}   
    }
      

  11.   

     static private int age;
      { 
        System.out.println("I'm not the first freeblock in runtime."); 
      } 
    这里有错吧,你这里的age 有意义吗?还有那个static private 的位置是否应当换一下.
      

  12.   

    static{
    }
    是静态代码块,它和静态属性一起在类创建时加载
    类创建一般有4步:
    1)加载静态代码块,属性,
    2)预开空间
    3)初始化类实例变量(非静态),语句块(普通)
    4)构造函数如果有父类得话,先执行父类得每一步,在执行子类的.
    第3,4两步,父类一起执行完后,执行子类的3,4两步
      

  13.   

    有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。 
    声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制: 
    ◆它们仅能调用其他的static 方法。 
    ◆它们只能访问static数据。 
    ◆它们不能以任何方式引用this 或super package com.birdme;
    public class UseStatic {
    /**
    * @param args
    */
    private static int s;    
    public UseStatic(){
    System.out.println("Create new Class");
    }
    static {
    System.out.println("static block initialized");
    }    
    public int getStatic(){
    return s;
    }
    public void  setStatic(int i){
    s=i;
    }public static void main(String[] args) {
    // TODO Auto-generated method stub
    UseStatic classA= new UseStatic();
    UseStatic classB= new UseStatic();
    System.out.println("classA.s="+classA.getStatic()+";classB.s=
    "+classB.getStatic());
    classA.setStatic(10);
    System.out.println("classA.s="+classA.getStatic()+";classB.s=
    "+classB.getStatic());
    classB.setStatic(classB.getStatic()+10);
    System.out.println("classA.s="+classA.getStatic()+";classB.s=
    "+classB.getStatic());
    }
    }下面是该程序的输出: 
    static block initialized
    Create new Class
    Create new Class
    classA.s=0;classB.s=0
    classA.s=10;classB.s=10
    classA.s=20;classB.s=20
    从结果可以看出类中static块程序是在类被装载的时候开始执行。而不是在创建对象的时候执行
      

  14.   

    age 是为了说明静态属性和静态游离块执行的先后顺序的,
    static private 习惯上是错的,语法上是对的。