2012-12-27 34 views
1

是否有任何人在这里谁不同意:Java小程序 - 初始化和实例,你声明

JLabel lbl; 
lbl = new JLabel ("a label"); 

等同于:

JLabel lbl = new JLabel ("a label"); 

我猜不是?

你的心灵 - 这是关系到以下问题:

public class Test 
extends JApplet 
{ 
    JLabel lbl; 
    lbl = new JLabel ("a label"); 
    public void init() 
    { 
    } 
} 

此代码(A)提供了以下错误:

Syntax error on token ";", , expected

然而,这个代码(B)完美的作品:

public class Test 
extends JApplet 
{ 
    JLabel lbl = new JLabel ("a label"); 
    public void init() 
    { 
    } 
} 

任何想法为什么会发生这种情况?这可能与init方法有关。我仍然期待看到数学精确的解释而不是可解释的理论。非常感谢。我是小程序新手。 PS:为简单起见,我省略了软件包导入(例如import javax.swing。*;)。

回答

2

你不能在课堂上有这样的免费说明。类的主体可以包含方法,字段声明,构造函数,内部类声明,静态和实例初始化块,但不是像这样的免费指令。

你可以做

JLabel lbl; 

{ 
    lbl = new JLabel ("a label"); 
} 

,但它的丑陋。

+0

免费指令 - 你是什么意思?谢谢。如果你引用了空init方法,我只是删除它,仍然得到代码A中的错误。 – Sam

+1

我不知道确切的术语。在一个类体中声明是可以的。一种方法也是。但是,从声明,方法,构造函数或初始化程序块中分配someting到一个字段是无效的。 –

+1

@JBNizet意味着在第一种情况下你有一个变量声明和一个碰巧是变量初始化的指令。在第二种情况下,你有一个变量定义,它在结果方面是等价的,但不是在语法方面(相等但不相同)。 Java语法定义不允许超出块的指令,但允许变量定义。 – OnaBai

2

它应该是相同的,如果是在一个方法中使用:

public void setMethod() { 
    JLabel lbl; 
    lbl = new JLabel ("a label"); 
} 
+0

JB Nizet的回答令人大开眼界,另外两个例子如此完美,他们让我充分理解了这一点。谢谢大家! – Sam

2

它无关applet或init()方法。你只能在方法体或块内部使用指令(lbl = new JLabel ("a label");没有声明就是指令)