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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么对象可以引用类的静态变量,为什么不能引用静态函数?大家说说内部原理

4 个回复

倒序浏览
黑马网友  发表于 2011-9-30 16:24:25
沙发
static 变量
        当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新。
static函数
        对于非静态函数一般都隐含了一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的。通常情况下,this 是缺省的。如函数fn()实际上是this->fn()。但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针。
应该是这样的吧 我也是刚百度的[url=http://baike.baidu.com/view/536145.htm]http://baike.baidu.com/view/536145.htm[/url],里面讲的很详细 你看下

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-10-1 01:19:06
藤椅
可以啊,你可以像引用静态变量一样引用静态方法
回复 使用道具 举报
黑马网友  发表于 2011-10-1 02:13:59
板凳
静态成员方法,我们又叫类方法。采用static关键字修饰说明该方法不属于类的某个实例对象。可以用类名.成员(包括属性和方法)或对象名.成员(包括属性和方法)访问的形式访问!

在使用类的静态方法时要注意一下几点:
1.静态方法里只能直接调用同类中其他的静态成员(包括属性和方法),而不能直接访问类中的非静态成员。因为非静态成员需要先new出对象才可访问,静态方法使用前不用创建任何对象。
2.静态方法不能以任何方式引用this和super关键字。与上面同理,静态方法使用前不用创建任何对象,当静态方法被调用时,this所引用的对象根本就没有产生。
3.。main()方法是静态的,因此JVM在执行main方法时不创建main方法所在类的实例对象,因而在main方法中,不能访问该类中的非静态成员,必须创建该类的实例对象后,通过这个对象去访问类中的非静态成员。

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
比如 Instance i=new Instance();之后个人理解:

1. 从内存开辟来说,Instance类中静态的方法随类的加载而产生,应该存在于内存的静态区,而在栈内存中的 i 变量并没指向静态区静态方法,而是指向了堆中实例的地址。

2.没有相应的引用,自然就无法用 i 调用静态函数了。
[ 本帖最后由 张洋铭 于 2011-10-01  19:06 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 鼓励一下!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马