Topic: ****一种看不懂的Java语法

  Print this page

1.****一种看不懂的Java语法 Copy to clipboard
Posted by: KevinTian
Posted on: 2004-12-14 13:38

小弟看到一种看不太懂的语法Angry
class Test
{
  {
    System.out.println("X");
  }//这对括号一定要,否则编译不过
}

我测试了一下

public class Main
{
  
  static
  {
    System.out.println("y");
  }
  {
    System.out.println("x");    
  }
  public Main()
  {
    System.out.println("z");
  }
  public static void main(String argv[])
  {
    Main m=new Main();
  }
}

运行结果是Smile
y
x
z

如果把main函数改一下
public class Main
{
  
  static
  {
    System.out.println("y");
  }
  {
    System.out.println("x");    
  }
  public Main()
  {
    System.out.println("z");
  }
  public static void main(String argv[])
  {
    Main m1=new Main();
    Main m2=new Main();
  }
}

Smile运行结果是
y
x
z
x
z

也就是
{
  System.out.println("x");    
}
是在构造函数之后运行的,而且是每构造一个实例时都会运行

那位大虾能否解释一下这种语法
怎么以前没见过
也没有见哪本书上讲过啊
Big SmileBig SmileBig SmileBig SmileQuestionQuestionQuestionQuestion

2.Re:****一种看不懂的Java语法 [Re: KevinTian] Copy to clipboard
Posted by: think
Posted on: 2004-12-14 14:13

static{}是静态变量/类变量的构造块,包含一组类变量的初始化;
{}是实例变量的构造块,包含一组实例变量的初始化。

它们执行的先后顺序是:
静态变量(加载类时)
-> 实例变量(类实例化时)
-> 构造函数(类实例化时)

超类初始化 -> 子类初始化。

3.Re:****一种看不懂的Java语法 [Re: KevinTian] Copy to clipboard
Posted by: KevinTian
Posted on: 2004-12-14 14:28

这种语法和构造函数有什么不同呢?QuestionQuestionQuestionQuestion

4.Re:****一种看不懂的Java语法 [Re: KevinTian] Copy to clipboard
Posted by: zerol
Posted on: 2004-12-14 23:46

KevinTian wrote:
这种语法和构造函数有什么不同呢?QuestionQuestionQuestionQuestion


Initialization block can be used in anonymous inner class in which there is no constructor.

5.Re:****一种看不懂的Java语法 [Re: zerol] Copy to clipboard
Posted by: KevinTian
Posted on: 2004-12-15 08:10

Thanks

6.Re:****一种看不懂的Java语法 [Re: KevinTian] Copy to clipboard
Posted by: jigsaw
Posted on: 2004-12-15 18:10

好像。。通货膨胀之后加分变得容易些了哈。。。哈哈。。。

7.Re:****一种看不懂的Java语法 [Re: jigsaw] Copy to clipboard
Posted by: KevinTian
Posted on: 2004-12-15 18:41

jigsaw wrote:
好像。。通货膨胀之后加分变得容易些了哈。。。哈哈。。。


什么意思啊??????

8.Re:****一种看不懂的Java语法 [Re: KevinTian] Copy to clipboard
Posted by: tool
Posted on: 2004-12-31 07:40


Vector v;
{
v = new Vector();
v.addElement(new Object());
}

也许上面的代码更容易理解,{}里面的代码编译后是放在Contructor里的。java里之所以允许这么写,是由于可能存在多个Contructor,你不必每个Contructor里都写同样的代码。

9.Re:****一种看不懂的Java语法 [Re: KevinTian] Copy to clipboard
Posted by: sailor
Posted on: 2005-01-04 16:35

static
{
System.out.println("y");
}//该块被static修饰,与静态变量相似只在类加载时被执行

{
System.out.println("x");
}//该块为普通块。固每一个该类的实例实例化时都执行一次!


   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