黑马程序员技术交流社区

标题: 关于静态static的一个问题 [打印本页]

作者: 彭威    时间: 2012-4-4 10:22
标题: 关于静态static的一个问题
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();  
        我开辟了一个新对象,为什么还不能用啊

作者: 冯建鹏    时间: 2012-4-4 11:01
//person.show();                          show方法是静态的,静态方法只能调用静态方法或者静态成员,所以把name变成static的就可以了。
person p=new person();                 
   p.show();     这句也是调用了show方法 ,方法里面的成员变量应该是静态的。还是那个问题。

作者: 彭威    时间: 2012-4-4 11:04
知道是 静态方法访问静态成员啊,那是非静态成员没有在堆内存中有对象而不存在,但是定义一个对象后,不就在堆内存中有值了吗
作者: 翟友伟    时间: 2012-4-4 16:38
String name;                         System.out.println(":::::"+name); name代表的是什么

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


正确的做法是 定义 person类的 构造函数
person(string name)
{
          this.name =name;
}
手动传入一个 name值,
作者: 翟友伟    时间: 2012-4-4 16:42
Exception in thread "main" java.lang.Error: 无法解析的编译问题:
        不能对非静态字段 name 进行静态引用


System.out.println(":::::"+name);
name
不能对非静态字段 name 进行静态引用
作者: 黄或俊    时间: 2012-4-5 10:06
【静态优先于对象存在,静态的方法是存放在内存的方法区】
还有能给你提个小建议:类名首字母大写,养成习惯哟!因为JAVA严重区分大小写的





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