黑马程序员技术交流社区
标题:
关于静态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