这样一个代码:
class test
{
System.out.println();
}编译的时候会错,而如果用大括号把那条语句括起来,变成:class test
{
{
             System.out.println();
          }
}形成代码块,编译,就不出错。
这让我感到相当奇怪,请大家帮帮忙,告诉我,到底第一种写法,犯了什么语法错误——似乎在C++中,在类里直接写这样的语句没有错。这是俺的第一贴,看看这里好心人是不是传说中的很多 :)

解决方案 »

  1.   

    当然是语法不对了
    一个空类中 不能突然出现一个 System.out.println();{
    System.out.println();
    }就相当一个方法了,不过这个方法的名称是的名称是空,一般会默认为构造方法
    相当class test
    {
    test()
    {
      System.out.println();
    }
    }
      

  2.   

    楼上,你可能说错了!
    如果把 System.out.println();
    用大括号括起来,不是构造函数,而是,代码块。
    我不太懂的是,为什么“一个空类中 不能突然出现一个 System.out.println();”?
    有没有相关的语法说明啊?
      

  3.   

    这不是方法,是“实例初始化块(Instance Initializer)”。JTS中说:一个类体里面可以直接定义成员变量、内部类、内部接口和成员方法,一个类体里面还可以直接包含实例初始化块,静态初始化块和构造器声明,但不能包含除此以外的其它语句。将语句括在一对花括号里直接放在类体里面正是“实例初始化块(Instance Initializer)”的形式。实例初始化块在每次创建该类的一个实例时执行。与此类似的“静态初始化块(Static Initializer,在花括号前面加static关键字)”在类加载的时候执行。实例初始化块可以执行多次,而静态初始化块只执行一次。
      

  4.   

    Dan1980
    我的QQ是:99134829
    加我,我家在北戴河,要去玩,我可以招待你。我现在在北京。
    希望,有机会想你多学点,你似乎是高手啊,哈哈
      

  5.   

    这与JVM的类加载机制有关,代码快,静态成员还有代码块都是在对象生成之前就有的,也就是说在JVM解释字节码的时候就为它们分配了空间.
    但是如果你不将它变成代码快,System.out是一个对象,而println是它的一个方法,他们只能在其他方法里被调用.其实一句话说明问题: JAVA规定这样不行,就是不行.
      

  6.   

    第一种写法是错误的,因为JAVA不支持这么写。
    第二种写法正确,因为JAVA把它当场对象的初始化代码,也就是说在创建对象的时候被执行的代码,效果跟
    class A{
        List l=new ArrayList();
    }
    中的l=new ArrayList()是等同的。