class b{
 static int a=3;
}
1.a是公用的,还是私有的.
2.想问下,static 到底为什么有特权可以不生成对象就可以使用.
3.调用时要注意什么??

解决方案 »

  1.   

    1:不是公有的也不是私有的.是默认方式的.2:JAVA的机制.3:注意所调用的类与此类所有在的包的方法(实际也就是因为你既没有public(公有),private(私有)).你可以去看看JAVA的访问权限说明.
      

  2.   

    1.是公用的,因为在类中可以不用构造对象,用类名.就可以调用。它是类变量!
    2.好象static是在池中声明的;
    3.注意父类和间的关系!(本人也在学习中,有错误的地方也请前辈们指出)
      

  3.   

    1.无访问权限关键字,为JAVA默认的friendly,当前类和同一package可以调用;
    2.如1楼所讲基于JAVA机制.对于变量来讲,static关键字意味着在类初始化时就已经分配了内存空间.
    3.类其他类中调用无须实例化此类,直接b.a就可以了.
       如果b类中有方法被static,它不能调用非static的变量.
      

  4.   

    static类型的变量、方法、类都是已经分配内存空间的,是不需要实例化就可以访问的
    问题答案参看楼上
      

  5.   

    被标题吸引来,既来之则论之a是公用的
    第2个问题,将会引起学术讨论不发表个人言论,个人觉得只是jvm行为无需特别关注。
    调用时尽可能的使用类来调用
    over
      

  6.   

    static变量与权限(如private,protected,public)无直接关系,
    没有不生成对象就使用的特权,如
    public static Test t;
    。。
    你在使用前必须对其进行初始化,否则会出现空指针异常。
    public static Test t=new Test();是正确的。
    再就是“静态成员变量被所有实例所共享”
    这是最重要的,相当于单例模式一样,所以要注意并发的问题如
    class TestSta{
    public static int i= 0;
    public static void main(String[] args){
       TestSta t1=new Teststa();
       TestSta t2=new Teststa();
       t1.i++
       System.out.println(t1.i);//打印1
    t2.i++
       System.out.println(t2.i);//打印2}
    }
    两个TestSta的实例共享了一个static的变量
      

  7.   

    1: 很显然它是默认的访问修饰符  protected2: static 静态的,在ClassLoader启动就初始化了那个static变量,并且只初始化这一次。它是类成员变量(类成员变量属于某个类),而不是实例变量(实例),它是属于类的所以用类名就可以调用static变量和方法。
      

  8.   


    1。答,a是java中默认的访问权限,即就是在该包中可以访问
    2,答,至于为什么可以直接用对象.a来访问它,我个人认为是由于在分配内存时,处于全局变量和常量区域中,这样这个a就属于蕾类成员而不是对象成员,它在内存中有唯一一个内存地址,
    3,答,这个就看你具体情况了,在c++中static分static const static,
      

  9.   


    2.好象static是在池中声明的;什么池?
      

  10.   

    答:前两个不用回答了。楼上热心人已回答很清楚了。
    第三个问题:用类调用或者用实例来调用(若:已创建了实例的话),都是一样的。编译时编译程序自动全部用同一条指令:putstatic来完成的。效率是一样的
      

  11.   

    都是基础,建议先看书。
    Statics (Objective 1.3)
    q  
     Use static methods to implement behaviors that are not affected by the state of any instances.
     
    q  
     Use static variables to hold data that is class specific as opposed to instance specific—there will be only one copy of a static variable.
     
    q  
     All static members belong to the class, not to any instance.
     
    q  
     A static method can't access an instance variable directly.
     
    q  
     Use the dot operator to access static members, but remember that using a reference variable with the dot operator is really a syntax trick, and the compiler will substitute the class name for the reference variable, for instance:d.doStuff();becomes:Dog.doStuff(); 
    q  
     static methods can't be overridden, but they can be redefined.
     
      

  12.   

    就是static 静态的,是属于类的,不是属于类的实例化对象的,对所有的对象都只有一个值
    访问的时候是类名.静态名
    b.a
    有什么特权,这是规定好了的,就是可以实现全局变量的作用
      

  13.   

    默认的应该是friendly吧,如4楼
      

  14.   

    1,static 是静态的意思,并不是一种访问控制修饰符,有4种反问控制权限,public,protected,private,默认,这四种2,static的变量不单独属于任何一个对象,是所有对象公用的变量,也就是属于类本身的,所以可以用类来直接调用。
    3,要注意这个变量对于所有对象是公用的,也就是所有对象的引用指向一个内存空间,即static类型变量只有一个内存空间,并不为某个对象单独开辟空间。
    再就是在继承的时候,关于static类型变量或者方法的在继承关系中的调用是按照引用的类型去调用的,并不是看引用所指向的对象的类型。例如:
    class A
    {
       public static String s="dfdfdfd";}class B extends A
    {    public static String s="sdfsdfsdf";
        public static void main(String[] args)
        {
             A a = new B();
             System.out.println(a.s);
        }}这个时候应输入dfdfdfd也就是A类中定义的s变量。因为a引用的类型是A所以对于静态成员则根据类型邦定,调用A中的s,static 类型的方法在继承中也是这个道理