Topic: 这段程序,我有一点不理解,望高手指点

  Print this page

1.这段程序,我有一点不理解,望高手指点 Copy to clipboard
Posted by: huahua325
Posted on: 2005-08-18 10:54

class Cup{
Cup(int marker){
System.out.println("Cup(" + marker + ")");
}
void f(int marker){
System.out.println("f(" + marker +")");
}
}

class Cups {
static Cup c1;
static Cup c2;
static {
c1 = new Cup(1);
c2 = new Cup(2);
}
Cups () {
System.out.println("Cups()");
}
}

public class bb{
public static void main(String [] args){
System.out.println("Inside main()");
Cups.c1.f(99);
}
}
这段程序的运行结果是:
Inside main()
Cup(1)
Cup(2)
f(99)
但是我不明白为什么会有
Cup(2)
这个运行结果

2.Re:这段程序,我有一点不理解,望高手指点 [Re: huahua325] Copy to clipboard
Posted by: beyond1984
Posted on: 2005-08-18 11:36

.....
你对static成员有何看法???
对于一个类,首先初始化static变量,然后static成员函数或是构造函数,接着是instance变量,instance成员函数或是构造函数。
...
static Cup c1;
static Cup c2;
static {
c1 = new Cup(1);
c2 = new Cup(2);
}
...
你在调用Cups.c1.f(99)时,使用的是[class].[static member].[member function]的格式,当然不管是否用到c2,都会在使用这个类的时候,现初始化static成员的。所以,c2也被初始化了,其构造函数System.out.println("Cup(" + marker + ")");
就会显示“Cup(2)”了。

3.Re:这段程序,我有一点不理解,望高手指点 [Re: huahua325] Copy to clipboard
Posted by: huahua325
Posted on: 2005-08-18 15:41

谢谢
但是还有一点不明白
为什么下面的这个函数没有初始化
Cups () {
System.out.println("Cups()");
}
结果里没有输出:
Cups()

4.Re:这段程序,我有一点不理解,望高手指点 [Re: huahua325] Copy to clipboard
Posted by: yoreland
Posted on: 2005-08-18 18:33

huahua325 wrote:
谢谢
但是还有一点不明白
为什么下面的这个函数没有初始化
Cups () {
System.out.println("Cups()");
}
结果里没有输出:
Cups()


Cups () 是构造函数,没有创建Cups类型的对象就不会执行……
个人观点。。

5.Re:这段程序,我有一点不理解,望高手指点 [Re: huahua325] Copy to clipboard
Posted by: huahua325
Posted on: 2005-08-19 09:14

那也就是说,
Cups.c1.f(99)
这样的一个调用语句,
只能让cups类中的static
变量初始化,
而不能执行该类中的其他的
函数代码
对吗?

6.Re:这段程序,我有一点不理解,望高手指点 [Re: huahua325] Copy to clipboard
Posted by: nevercompromise
Posted on: 2005-08-25 17:32

我认为是这样的,cups没有构造实例,所以不用调用构造函数,更加没有调用类内的其他函数。

7.Re:这段程序,我有一点不理解,望高手指点 [Re: huahua325] Copy to clipboard
Posted by: huahua325
Posted on: 2005-08-26 09:20

谢谢!


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923