1.为什么"Cups.c1.f(99);语句"能直接引用Cups呢?他不是一个类吗?
2.为什么最后结果没有输出"Cups"呀,我觉得应该是"inside main(),Cup(1),Cup(2),Cups(),f(99)"的!!代码如下:
class Cup
{
Cup(int er)
{
System.out.println("Cup(" + er + ")");
}
void f(int er)
{
System.out.println("f(" + er + ")");
}
}
class Cups
{
static Cup c1;
static Cup c2;
static
{
c1 = new Cup(1);
c2 = new Cup(2);
}
Cups()
{
System.out.println("Cups()");
}
}
public class ExplicitStatic
{
public static void main(String [] args)
{
System.out.println("inside main()");
Cups.c1.f(99);
}
}

解决方案 »

  1.   


    1 类里面的静态方法静态变量都是这么直接使用的
    2 创建Cups的实例才会执行构造函数
      

  2.   

    1、c1,c2是Cups类的静态成员,也就是我们说的类成员,和类方法一样,是通过类名+“.”直接调用的,而c1,c2又正好是Cup的两个对象,所以可以直接调用f方法,正如System.out.print一样,out是System类的静态成员,也是PrintStream类的实例,而print是out对象的方法一样2、并没有实例化一个Cups对象,所以没有调用Cups的构造函数,不会打印“Cups()”
      

  3.   

    static即静态是属于类的,不是类的实例对象的
      

  4.   

    楼上的已经说完了,楼主可以结贴了
    1.static修饰的类成员,都可以通过类名来直接调用;如果用对象来调用static修饰的静态成员,反而不太直观(虽然效果一样);
    2.构造函数是在new对象的时候被自动调用的,你的代码中没有new cups();当然不会执行构造函数的