A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卢乾荣 中级黑马   /  2015-3-20 23:45  /  1715 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如说:我在一个类中定义了一个私有的静态成员变量。为什么该共享成员变量所有对象访问不到
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修饰的成员不是都是对象的共享数据吗

}

14 个回复

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

对的,可以这么理解。。
回复 使用道具 举报
二楼说的好,也解决了我的疑问。
回复 使用道具 举报
我只知道static修饰的变量和方法是用类名调用的
回复 使用道具 举报
顶一个,赞同二楼
回复 使用道具 举报
二三楼好厉害,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马