书上说声明static变量实际上就是声明public变量,但如果把原来声明的static变量改为public变量,再在static方法中调用的话就会报错.
请问应该怎样理解static和public呢?有什么区别?以及适用的场合.谢谢大家!
class Teststatic{
public int a = 3;                  //这里改为public就报错
static int b;static void meth(int x){
System.out.println("x="+x);
System.out.println("a="+a);
System.out.println("b="+b*a);
}
static{
System.out.println("初始化!");
//b=a*4;
}
}
class Teststaticmain{
public static void main(String args[]){
Teststatic.b=5;
Teststatic.meth(42);Teststatic ts = new Teststatic();
ts.meth(42);
Teststatic.meth(42);
}
}

解决方案 »

  1.   

    是不是public int i;在每个类的实例中都有一个新的拷贝,而static int i;所有类的实例只有一个拷贝?
      

  2.   

    java2.pdf第124页中写道"声明为static的变量实质上就是全局变量",全局变量不就是public变量嘛.
      

  3.   

    static 和 public 本身没有可比性,你可以把public 和static混在一块儿用,如:public static int a = 3;public 定义的是一种访问规则,也就是别的类是不是可以访问你这个类成员的规则,和它相对应的有private protected defaultstatic 说得是这个成员变量不再专属于某一个对象,而是属于所有的对象,或者说属于整个类,你可以在static 方法中直接访问该成员变量,而不用new 一个对象出来.但是,static 方法不能直接访问非static的变量PS.严重同意二楼的意见,你的那本书可以扔掉了!****北京尚学堂教师,希望对您有所帮助*****
      

  4.   

    那是不是在某种意义上讲,public和static有相同的作用呢?比如所有类的对象都可以访问public或static的变量?
    小弟初学,希望各位大侠不吝赐教!
      

  5.   

    不是, 他们两个没有联系, 也没有任何共通点, 一个static变量可以是pubic private protected default任意一种
    ****北京尚学堂教师,希望对您有所帮助*****
    ****www.bjsxt.com****
      

  6.   

    ***
    本质的区别:
    public:需要使用对象来引用
    static:直接使用类名来引用,就是说不需要声明类的对象
      

  7.   

    那public static int a;是不是等于static int a;或public int a;呢?
      

  8.   

    当然不是!!!!!****北京尚学堂教师,希望对您有所帮助*****
    ****www.bjsxt.com****
      

  9.   

    两个不是一类
    public的说明类的外部可以使用此变量
    static是静态的,他修饰的变量一直存在
    如:
    static int i=0;
    public int j=0;
    public void test()
    {
        i++;
    }
    调用这个函数后,i的值会改变的。public没有这个作用,只是说明别的类可以访问到j
      

  10.   

    请看下面的代码:class T {
      static int a; 
      int b;
    }T t = new T():
    T t1 = new T();那么, t中有一个a, t1中也有一个a, 但是他们两个共享b这就是static的含义, 跟public 没有任何的联系!!!!!!!!!!
      

  11.   

    public static int a;没有这种写法,static本身就是全局
    static int a;对当前全体用户全局的
    public int a;对当前用户程序是全局的
      

  12.   

    java2.pdf第124页中写道"声明为static的变量实质上就是全局变量",全局变量不就是public变量嘛.
    ===================================================
     看看书吧
      

  13.   

    static是一个静态变量,在内存中只存在一个,可以被所有的对象访问,public如果有多个对象时会有多个副本。
      

  14.   

    两个关键字的意义不同,怎么能比呢?
    static 是静态方法,只应该使用静态变量
      

  15.   

    class T {
      static int a; 
      int b;
    }T t = new T():
    T t1 = new T();那么, t中有一个a, t1中也有一个a, 但是他们两个共享b这就是static的含义, 跟public 没有任何的联系!!!!!!!!!!
    ---------------------------------------------------------
    这样的啊,没反吗,小弟也新学java.
      

  16.   

    to 175cm(hanhui) 
    那么, t中有一个a, t1中也有一个a, 但是他们两个共享b
    -----------------------------------------------------------------
    怎么是两个共享b呢?应该是共享a吧,b是两个都有一个拷贝
      

  17.   

    gahade(沙果) ( ) 信誉:100    Blog  2006-10-20 9:40:21  得分: 0  
       
    那public static int a;是不是等于static int a;或public int a;呢? bjsxt() ( ) 信誉:100    Blog  2006-10-20 9:42:06  得分: 0   
       
    当然不是!!!!!--------------------------------------------------------------------------------
    to bjsxt()
    不对吧,public static int a应该等于static int a吧.
    比如
    class Testpublicstatic{
    static int a;
    static{
    a=10;
    }
    }class Testmain{
    public static void main(String args[]){
    System.out.println("a="+Testpublicstatic.a);
    Testpublicstatic ob = new Testpublicstatic();
    ob.a=20;
    System.out.println("ob.a="+ob.a);
    System.out.println("a="+Testpublicstatic.a);
    }
    }
    结果是:
    a=10
    ob.a=20
    a=20
      

  18.   

    public static int a 和 static int a 不是一回事儿前者是公共访问权限,后者是包访问权限,也就是说只有在同一个包内部的其他类才能访问!
    比如package a;
    class T {
      public static int a;
      static int b;
    }另外一个类:package b;import a.T;class M {
      int c = T.a; //这句话没问题
      int d = T.b //这句话有问题,不能编译,因为不能直接访问T中的b, T 和M 位于不同的包里
    }谢谢楼上上上的修正,应该是共享a,独有b的copy****尚学堂教师,希望对大家有所帮助****
    ****http://www.bjsxt.com*****
      

  19.   

    jlu3389(激情的89) ( ) 信誉:100    Blog  2006-10-20 11:51:00  得分: 0  
     
     
       这个我问题至于讨论这么长吗?  
     
      

  20.   

    回复人:chocolate0823(小破孩流浪``) ( 一级(初级)) 信誉:100  2006-10-20 14:01:00  得分:0

    jlu3389(激情的89) ( ) 信誉:100 Blog 2006-10-20 11:51:00 得分: 0
    这个我问题至于讨论这么长吗?理不辩不明。
      

  21.   

    我也是初学者
    这个问题是不是在于static 方法直接调用需要用static 变量
      

  22.   

    同学,我教你一个英文单词:public,它的中文意思是:公有的,而非“共有”的。
      我也是在金山词霸上找的,共同学习,装个金山词霸,不错
      

  23.   

    全局变量=public ?
    有没有搞错啊
      

  24.   


    java2.pdf第124页中写道"声明为static的变量实质上就是全局变量",全局变量不就是public变量嘛.
    **********************************************************************************仔细看LZ的话,不是书的问题,而是理解问题。。
    全局变量怎么会就是public变量??
      

  25.   

    java中访问修饰符三个public/protected/private,但访问范围有四种,不用任何修饰符时即为default同包范围,java中说全局变量不合适,static并不是访问修饰符,所以楼上有兄弟说二者不可比很有道理
      

  26.   

    public int a = 3;                  //这里改为public就报错
    静态方法不能访问类的实例字段
      

  27.   

    你的书上如果说static是public的话,我建议你把你的书烧掉。不要再害你了!
      

  28.   

    class Teststatic{
    public int a = 3;                  //这里改为public就报错
    static int b;你可以改成public static a=3;
    因为你调用时没有实例化Teststatic,所以无法访问非static内容。
      

  29.   

    我觉得可以理解为static是对象的,public是实例的;另外对于书中所写应该是理解的问题