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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沈样 黑马帝   /  2012-3-2 14:18  /  3011 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 沈样 于 2012-3-2 14:40 编辑

class PrivateTest {
        private int a = 1;
        private int b = 2;
        public static void main(String[] args)
        {
                PrivateTest t = new PrivateTest();
                int b = t.b;
                System.out.println(b);
        }


}

class Test
{
                public static void main(String[] args)
                {
                        PrivateTest t = new PrivateTest();
                        int b = t.b;
                        System.out.println(b);
                }
}
这个私有的变量为什么可以在privateTest主函数中访问,但是在Test中不能访问,这不是同样的加载类,我想问的是不是虚拟机是加载前就判断如果private就不加载,还是全部加载然后在控制他的访问,突然想到的问题就发疑问

6 个回复

倒序浏览
本帖最后由 沈样 于 2012-3-2 14:33 编辑

static方法要访问static的变量,现在在本类的主函数中可以访问,说明PrivateTest t = new PrivateTest();已经把私有变量加载进来了,但是其他类中加载就不能访问,是因为他没有加载进来还是因为有一个判断机制控制的访问权限
回复 使用道具 举报
额,看了你这个程序,首先楼主要知道javase中访问修饰符的权限啦

作用域 当前类 同一package   子孙类   其他package
public     √          √                √      √
protected √        √               √        ×
friendly √             √              ×        ×
private √             ×              ×       ×
java访问权限修饰符(特殊情况除外)  
不写时默认为friendly

你的private是在当前类的呀,所以当然能访问啊!!
PrivateTest t = ew PrivateTest();
    t 就是一个引用,相当于c语言的指针,他所存放的事对象的地址
   然后通过t访问b  在赋值给b
   打印输出
回复 使用道具 举报
在同一个类中当然可以直接访问
回复 使用道具 举报
本帖最后由 舞动的心弦 于 2012-3-2 14:37 编辑

额,看了你这个程序,首先楼主要知道javase中访问修饰符的权限啦

作用域 当前类 同一package   子孙类   其他package
public     √          √                √      √
protected √        √               √        ×
friendly √             √              ×        ×
private √             ×              ×       ×
java访问权限修饰符(特殊情况除外)  
不写时默认为friendly

你的private是在当前类的呀,所以当然能访问啊!!看了这个你应该明白了吧......
PrivateTest t = new PrivateTest();
    t 就是一个引用,相当于c语言的指针,他所存放的是对象的地址
   然后通过t访问b  在赋值给从新定义的变量b
     打印输出
  这是很基础的问题,建议LZ有时间多看看《Thanking in java》啦,一起加油吧!!呵呵  ,,,
回复 使用道具 举报
好多不懂看来还好加倍努力,兄弟们一起努力吧
回复 使用道具 举报
加载是加载到了,只是访问受阻。因为首先建立t后就开辟了一个内存;另外虽然不能直接访问,但是可以通过set和get方式来访问,说明只是访问时候权限问题。我也是菜鸟,只是自己理解而已。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马