java简单程序中语句不明白,请注释

来源:百度知道 编辑:UC知道 时间:2024/06/07 23:46:24
//StaticInit.java

class Cat
{
Cat(int i)
{
System.out.println("Cat("+i+")");
}
void f(int i)
{
System.out.println("f("+i+")");
}
}

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

public class StaticInit
{
public static void main(String args[])
{
System.out.println("main()");
Cats.c1.f(7);
}
// static Cats c=new Cats();
}

在这些代码中,我不明白为什么最后屏幕输出
main()
Cat(100)
Cat(2)
f(7)
这样。
简单来讲,就是不明白 Cats.c1.f(7); 是什么意思,请高手加上注释,谢谢!!!
输出那里我写错了,正确如下:

main()
Cat(1)
Cat(2)
f(7)

我不明白的是,为什么 只是Cats.c1.f(7) ,却连 c(2)都输出了

在main()方法中执行到
Cats.c1.f(7); 时,首先运行的是Cats类中的静态代码块
static {
c1=new Cat(1);
c2=new Cat(2);
}
在静态代码中就已经执行了c2的初始化c2=new Cat(2);

调用类Cats中。对象c1的f()函数

void f(int i)
{
System.out.println("f("+i+")");
}

7为类打印的值

调用类cats的时候 实例化两个类c1,c2.. 实例化c1 调用cat的构造函数 打印第一个cat(1) 实例化c2的时候同样调用cat的构造函数 打印第二个cat(2) 最后调用函数f(7)

Cats.c1是Cats类中的静态成员变量--类型为Cat的一个引用,用这个引用调用方法f(7),就是这样。

Cats.c1.f(7);
Cats里面有一个静态类成员变量c1,所有可以直接用类名访问
static
{
c1=new Cat(1);
c2=new Cat(2);
}
会在第一次调用该类的时候执行一次,以后就不会执行了。
所有打印了
Cat(1)
Cat(2)
f(7)

哦,我最近正困扰在静态类这一块呢,多谢楼上的回答,谢谢楼主的提问呵呵