一直在书上看的静态变量用类名直接调用就可以了。偶然发现new了个实例也是可以操作的。
下面的代码在eclipse里调试通过,虽然有小贴士“the static field should be accessed in a static way”,
但可以通过,可以运行。和个朋友讨论了下,他在.net下用C#编译通不过。就糊涂了。
难道java让静态变量可以用实例调用了,那这样static就没啥意思了啊
public class Animal {
static int weight = 30;
}
class Inter {
public static void main(String[] args) {
Animal an = new Animal();
Animal.weight = 4;
an.weight = 8;
System.out.println(Animal.weight);
}
}

解决方案 »

  1.   

    是的,java是可以这样调用的,不过会有编译警告,不提倡这样的!两种效果都是一样的
      

  2.   

    java可以,c#不知道
    但是这样不是更好吗,
    如果java没有这个功能的话,java对象需要使用getclass(),然后强转在调用,多麻烦。
      

  3.   

    net我也用过,
    Net还有静态类,静态构造器,代理
    net把我搞得更加糊涂!
      

  4.   

    可以啊,这并不能说static没啥意思,难道static就是为了不让实例调用而来的?在C++里面不也可以这样吗
      

  5.   

    JAVA尽管可以通过实例来调用静态变量,但是同一个类型的多个实例还是共享一个静态变量,并不是每个实例都有拷贝,所以静态变量的意义还是存在的
      

  6.   

    class Int {
    static int weight = 30;
    }public class Inter{
    public static void main(String[] args) {
    Int an = new Int();
    Int.weight = 4;
    an.weight = 8;
    System.out.println(Int.weight);
    }
    }你刚才的代码就没法运行,主函数应该写在公共类里,静态的变量是在类加在的时候加载的
      

  7.   

    static被设计为类属的,既然是类属的肯定可以被实例调用啊
    非static可以调static,static不能调非static
      

  8.   

    Java可以用类名调用或new一个对象调用,
    而C#就只能用类名调用了
      

  9.   

    java里可以,但是C#中不行,不过结果还是一样的。虽然在java中对象也可以调用静态变量,但是这个变量是属于类的,也就是说这个变量只有一个,不管你new多少个对象出来,它们调用的时候都是针对同一个来调的,所以static还是有意义的。C#中规定只有类名才能调用,可能是为了更好的说明这个函意吧,其实效果都一样。