Java小程序-初始化并实例化声明的位置

Java小程序-初始化并实例化声明的位置,java,swing,applet,compiler-errors,Java,Swing,Applet,Compiler Errors,这里有没有人不同意: 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给出以

这里有没有人不同意:

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给出以下错误:

令牌上的语法错误;,期望

但是,此代码B工作正常:

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

知道为什么会这样吗?这可能与init方法有关。我仍然期待着看到精确的数学解释,而不是可解释的理论。谢谢。我对小程序很陌生。PS:我遗漏了导入包,例如导入javax.swing.*;为了简单起见。

在类主体中不能有这样的免费指令。类主体可以包含方法、字段声明、构造函数、内部类声明、静态和实例初始值设定项块,但不能包含这样的自由指令

你可以

JLabel lbl;

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

但是很难看

在类主体中不能有这样的免费指令。类主体可以包含方法、字段声明、构造函数、内部类声明、静态和实例初始值设定项块,但不能包含这样的自由指令

你可以

JLabel lbl;

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

但是很难看

如果在方法中使用,则应相同:

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

如果在方法中使用,则应相同:

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

它与applet或init方法无关。您只能在方法体或块lbl=new JLabel a标签内有指令;无声明是一条指令

它与applet或init方法无关。您只能在方法体或块lbl=new JLabel a标签内有指令;无声明是一种指令

免费指令-你是什么意思?谢谢如果您引用空的init方法,我只是删除了它,仍然在代码A中得到错误。我不知道确切的术语。在类主体中声明是可以的。还提供了一种方法。但是,在声明、方法、构造函数或初始值设定项块之外为字段赋值是无效的。@JBNizet表示在第一种情况下,您有一个变量声明和一条恰好是变量初始化的指令。在第二种情况下,您有一个变量定义,它在结果方面是等价的,但在语法方面不是等价的。Java语法定义不允许块外的指令,但允许变量定义。自由指令-什么意思?谢谢如果您引用空的init方法,我只是删除了它,仍然在代码A中得到错误。我不知道确切的术语。在类主体中声明是可以的。还提供了一种方法。但是,在声明、方法、构造函数或初始值设定项块之外为字段赋值是无效的。@JBNizet表示在第一种情况下,您有一个变量声明和一条恰好是变量初始化的指令。在第二种情况下,您有一个变量定义,它在结果方面是等价的,但在语法方面不是等价的。Java语法定义不允许块外的指令,但允许变量定义;另外两个例子很好地说明了这一点,使我完全理解了这一点。谢谢大家!JB Nizet的回答让人大开眼界;另外两个例子很好地说明了这一点,使我完全理解了这一点。谢谢大家!