黑马程序员技术交流社区

标题: 一道关于static用法的问题 [打印本页]

作者: 卢乾荣    时间: 2015-3-20 23:45
标题: 一道关于static用法的问题
比如说:我在一个类中定义了一个私有的静态成员变量。为什么该共享成员变量所有对象访问不到
class A
{
       private static int a=5;       
}
public class Play2
{
         public static void main(String args[])
       {
                      A r=new A();   
                  r.a//这一步是调用不了的


     }
我知道private是私有的只能被本类对象看到。但是不是有static吗,static修饰的成员不是都是对象的共享数据吗

}


作者: 齐浩    时间: 2015-3-21 22:38
static 在内存中开辟了独立的空间存储了 int a=5; class A的对象都共享这个内存。。但是A的对象有类内部的和外部的,private一出现就限制了外部的所有对象对int a=5;的访问。。。
你肯定是想知道static和private哪个作用更大
其实可以这么理解,static把内存地址分享给对象r了,但是private不让他去碰。。。就好像老师在甲班发水果,全年级每个学生一份,你是乙班的,private设了门禁需要刷卡的,只有甲班的学生的卡才能刷开甲班的门,你的水果在甲班屋里,但是你拿不到。。
作者: wuliang    时间: 2015-3-21 22:47
我们在定义静态变量时一般修饰符权限都是public,修饰符用private的情况很少见,在开发中基本不用,因为它与我们的需求相违背,我们既然定义static就是为了数据共享,前面加了一个private就给变量a加了一个访问局限,在本类中能访问,别的类是访问不到的,即使他是静态成员,还有静态可以被类名直接调用,如果变量a的权限是public static格式,在Play2
作者: wuliang    时间: 2015-3-21 22:48
l类中是可以通过类名.变量名调用的。例:A.a。纯手打,望采纳
作者: tinyvampire    时间: 2015-3-21 22:50
同意二楼!
作者: 夜班心桥    时间: 2015-3-21 22:57
任何变量,一旦被private修饰后,该变量只能在本类中使用,出去这个类,
就无法访问,需要对外提供公共的访问方式。
被static修饰后,该变量存储在方法区中的静态区,只不过是,无论创建多少个A对象,变量a只有一份。
作者: 卢乾荣    时间: 2015-3-21 23:09
明白了,我可不可以这么理解,private Static 它这个句子如果按语法格式看,private 修饰符在最前面,它直接就把属性私有化了,不管它是不是共享数据,也就是说它的权限要比static大,二楼的兄弟,你看对吗
作者: shewim    时间: 2015-3-21 23:28
同意二楼意见...
感觉楼主对static的理解有误吧:
static修饰变量是共享数据,这个共享是相对于该类所属的对象来说的。也就是说static修饰的变量是该类所有对象共享的数据,而不是其他类或其他类对象的共享数据。这个和从外部访问权限是没有关系的。
而public、protected和private则是用来标识类外部对该属性或方法的访问权限的。
作者: Pakumen    时间: 2015-3-21 23:58
权限符号优先于static
作者: 和谐木马    时间: 2015-3-22 00:06
共享是共享了,但是它又不让你碰,相当于就放在公共的地方,但又加了一把锁,让你不能直接访问,如果你通过get,set方法操作该值,所有对象都还是共享这个改变了的值的。
作者: 齐浩    时间: 2015-3-22 08:13
卢乾荣 发表于 2015-3-21 23:09
明白了,我可不可以这么理解,private Static 它这个句子如果按语法格式看,private 修饰符在最前面,它直 ...

对的,可以这么理解。。
作者: 胡几手    时间: 2015-3-22 09:01
二楼说的好,也解决了我的疑问。
作者: qq871406754    时间: 2015-3-22 09:14
我只知道static修饰的变量和方法是用类名调用的
作者: JARVIS_YJ    时间: 2015-3-22 09:19
顶一个,赞同二楼
作者: 浓眉小眼    时间: 2015-3-22 10:00
二三楼好厉害,学习了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2