实例化和声明分开

时间:2014-01-08 08:33:16

标签: java declaration assign

我的问题是关于Java中的声明和值赋值规则。 在编写字段时,我们可以声明并分配值,但我们不能单独执行相同的操作。

E.G:

class TestClass1 {
    private int a = 1;
    private int b ;
     b= 1;
    private int sum;

    public int getA() {
        return a;
    }

    public int getB() {
        return b;
    }

    public int getSum() {
        sum = a + b;
        return sum;
    }

}

public class TestClass {
    public static void main(String[] args) {
        TestClass1 testClass1 = new TestClass1();

        System.out.println("total =" + testClass1.getSum());
    }    

}    

在线:

private int a = 1; 

我们可以将a声明为私有int并为其赋值1。但在以下情况下:

private int b ;
b= 1; 

Eclipse不允许这种情况发生并抛出错误。请解释一下这背后的逻辑。

5 个答案:

答案 0 :(得分:5)

类中的代码,但在函数外部,纯粹是声明。它没有被“执行”。它只是声明一个类包含哪些字段。

您可以使用简写private int a = 1;的原因只是Java语言允许的语法糖。实际上,会发生的是a = 1部分作为构造函数的一部分执行。当它在变量声明旁边时,它更容易读写。

Java语言创建者允许这样做很好。并非每种语言都允许这样,将C ++视为一个并不总是允许它的例子。

答案 1 :(得分:2)

您必须将b=1;放在方法中或将其置于构造函数中。

您收到此错误,因为除了声明之外您不能做任何事情(private int a= 1; )在班级。

答案 2 :(得分:1)

这只是Java中语法的问题。在您显示的示例中,您尝试在类的成员声明部分中将值影响为b。 Java的语法不允许这样做。只有在声明属性时,在方法体内或静态块中,如果属性是静态的,例如,您才能这样做。 :

private static int b;
static {
    b = 1;
}

答案 3 :(得分:1)

这只是一个语法问题。你可以这样做:

private int b ;

{  // <- Initialization block
  b= 1;
}

请参阅What is an initialization block?

答案 4 :(得分:0)

您无法直接在课堂上编写逻辑。你应该将它移动到构造函数。

Java只允许在类和任何方法之外进行声明。初始化新对象时,将执行int b = 1;之类的声明。