黑马程序员技术交流社区
标题:
关于静态方法的一些疑惑
[打印本页]
作者:
何旭程
时间:
2013-3-12 20:20
标题:
关于静态方法的一些疑惑
本帖最后由 何旭程 于 2013-3-13 09:57 编辑
class StaticTest2
{
int num = 4;
void show()
{
System.out.println(num);
}
public static void main(String[] args)
{
//show();
new StaticTest2().show();
}
}
在静态方法内部不能访问非静态成员,为什么创建对象就可以调用了呢?
作者:
BitmapFactory
时间:
2013-3-12 20:25
没创建对象的话num还没有呢,show方法不能访问没有的东西,创建完对象后,就会对类进行初始化,会在堆中创建一个实例对象,然后就可以对这个对象进行访问了
作者:
谢玉成
时间:
2013-3-12 20:33
在静态方法内部不能访问非静态成员,为什么创建对象就可以调用了呢?
这是因为类的静态成员会随着类的加载而加载进了内存的方法区,而非静态方法(实例成员)会在使用new 完对象后才完成赋值,所以静态方法内部不能出现非静态成员,
非静态成员要在创建完对象后,才存在,所以...
作者:
王龙涛
时间:
2013-3-12 21:00
class StaticTest2
{
int num = 4;
//非静态方法编译器会隐式地把它变成show(StaticTest2 this)
//也就是说非静态方法一定要与对象相关联。即对象调用非静态方法。
void show()
{
System.out.println(num);
}
public static void main(String[] args)
{ //由于主方法是静态的,直接加载进内存,就没有产生对象,
//要调用非静态方法就一定有了该类的实例,就要创建对象。
//show();
new StaticTest2().show();//
}
}
复制代码
静态方法可以看作是类的方法,而非静态成员可以看作是对象的方法或变量
只有当创建了某个对象的时候才能够使用,静态方法可以通过类名来直接调用。
作者:
HM周磊
时间:
2013-3-12 23:06
因为静态方法它是优先对象存在的,而且它随着类的加载而加载。也就是说,静态方法先存在内存方法区里,
而对象要通过创建一个对象才存在于堆内存中。所以先来的是不能访问后到的。而后来的就可以访问先到的!!!
作者:
HM赵磊
时间:
2013-3-13 00:08
c:\a.jpg
作者:
HM赵磊
时间:
2013-3-13 00:13
不要好意思,刚才图片没有发上去
a.jpg
(1.09 MB, 下载次数: 11)
下载附件
2013-3-13 00:12 上传
作者:
李思杰
时间:
2013-3-13 00:14
一、非静态成员在对象创建之前还不存在,你不能访问不存在的东西。
二、随着对象的创建,非静态成员加载到堆内存中,这时就能访问了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2