public class Test01 {
public String test = {

System.out.print("ttt");
String ww = "hhh";
test = "iii";

};}我是JAVA初学者,从没见过这样给字符串test赋值的,请问={}在语法中应该怎么称呼?具体请什么作用?在线等,多谢各位了!

解决方案 »

  1.   

    真的不知道,哥们你确认一下你的语法对不对,
    MARK。
      

  2.   

    ={}这个中的{}代表的是一个语句块,其意义和静态初始化函数相似,如public class A {static {
    System.out.println("static constructor");
    .....
    }}其作用之一是定义一个作用域,如public static void main(String[] args){   {
         String msg = "Hello World";
         System.out.println(msg); //这儿没有语法错误
       }
       System.out.println(msg); //这儿有语法错误}
      

  3.   

    对于类的成员可以这么做,但是不支持对局部变量进行类似处理,花括号内的代码等价于构造方法方法中的代码,即构造类的实例时被调用,因此如果test是static的成员,花括号中的代码在类被new之前是没机会执行的。该代码应该是抓住Java语言编译时的一些处理特性写出的可读性极差的代码,人们使用高级语言的目的之一就是其程序维护性,Java还好了,如果是C,只要对BNF范式敏感,完全可以写出不是人读的而按照自己意愿去执行的代码。接触Java一段时间,第一次见到这种写法,一点拙见。
      

  4.   

    huoyin 说的分割作用域是正确的,但这些代码和static块是有分别的,static块在类被load时候就执行,而这些代码是在创建类实例时才执行。
      

  5.   

    呵呵,我说的是相似:-)你说得没有错,static块会在jvm加载类对象的时候会被调用,一般用来初始化Log的对象。而楼主所写的代码块会在类实例初始化成员属性时被执行,其会在类的构造函数前被执行。我也是第一次见这样的写法,没有看出来这样的写的目的是什么
      

  6.   

    我的环境下不能编译.windows xpjdk1.5.0_06-b05IDEA6.02
      

  7.   

    不能编译的用IDE编译通过的,是被IDE自动优化处理过的代码,你反编译下就知道了
      

  8.   

    public   class   Test01   { public String test;{ System.out.print("ttt"); 
    String   ww   =   "hhh"; 
    test   =   "iii"; }; } 改成这样就可以编译通过了