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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭威 中级黑马   /  2012-4-4 10:22  /  2290 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class person
{
        String name;                                               
        static String country="china";
        public static void show()
        {
                System.out.println(":::::"+name);
        }
}

class jingtai
{
        public static void main(String[] args)
        {
                //person.show();                           //修改把name静态 得结果:::::null
                person p=new person();                     //在堆内存中开辟了个对象;并赋予简单;但没构造初始化只有默认的
                        p.show();  
               }
}


问题:开始输出//person.show(); 输出错误是 因为 name属性调用要有对象才在堆内存中出现;而此时没有对象,内存中没有name属性而不能用
           但是      person p=new person();                     //在堆内存中开辟了个对象;并赋予简单;但没构造初始化只有默认的
                        p.show();  
        我开辟了一个新对象,为什么还不能用啊

5 个回复

正序浏览
【静态优先于对象存在,静态的方法是存放在内存的方法区】
还有能给你提个小建议:类名首字母大写,养成习惯哟!因为JAVA严重区分大小写的
回复 使用道具 举报
Exception in thread "main" java.lang.Error: 无法解析的编译问题:
        不能对非静态字段 name 进行静态引用


System.out.println(":::::"+name);
name
不能对非静态字段 name 进行静态引用
回复 使用道具 举报
String name;                         System.out.println(":::::"+name); name代表的是什么

你在class person压根就没有定义 name的传入     name 表示什么??你想打印出的name具体值是什么?


正确的做法是 定义 person类的 构造函数
person(string name)
{
          this.name =name;
}
手动传入一个 name值,
回复 使用道具 举报
知道是 静态方法访问静态成员啊,那是非静态成员没有在堆内存中有对象而不存在,但是定义一个对象后,不就在堆内存中有值了吗
回复 使用道具 举报
//person.show();                          show方法是静态的,静态方法只能调用静态方法或者静态成员,所以把name变成static的就可以了。
person p=new person();                 
   p.show();     这句也是调用了show方法 ,方法里面的成员变量应该是静态的。还是那个问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马