2014-01-08 31 views
1

我的问题是关于Java中的声明和值赋值规则。 当编写字段时,我们可以声明和分配值,但我们不能单独做同样的事情。Instantiation and declaration separate

例如为:

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; 

我们能够宣布为私人诠释,并分配一个值1到它。但在以下情况下:

private int b ; 
b= 1; 

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

+1

是你不能,这是Java的基本语法,成员字段可以是'initialized'时声明,任何的说法应该是在方法或静态块! – Rugal

+0

除了没有意义(在基元的情况下)?因为这就是语言的设计。请参阅:http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html –

回答

4

类内的代码,但在函数之外的代码纯粹是声明。它不会被“执行”。它只是声明一个类包含的字段。

你可以做简写的原因private int a = 1;只是Java语言允许的语法糖。实际上,a = 1部分是作为构造函数的一部分执行的。在变量声明旁边读取和写入会更容易。

这是Java语言创建者允许的优点。并非所有的语言都允许这样做,但以C++为例,并不总是允许的。

+0

隔间龙: - 我应该把它作为一种习惯,不要在课堂中声明一个值,而是在一个函数之外声明一个值?总是看到它应该有一个构造函数,它将包含所有的声明? TX – jagvirsingh5

2

你必须把b=1;放在一个方法中,或者把它放在构造函数中。

由于除了声明(private int a= 1; )在课堂上的水平,你不能做任何事情。

+0

这是一条评论,他问这个语法错误的原因。 – NINCOMPOOP

+0

@TheNewIdiot你把这个评论,而我正在编辑此.. –

+0

大家好,正如我所说我知道这个问题。我知道b = 1应该在声明时或者在方法/构造函数中被赋值。我在问这个解释?因为如果声明是prob外部方法,那么甚至私人int a = 1;应该是一个问题。 – jagvirsingh5

0

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

Java只允许在类和外部任何方法内声明。当您初始化一个新对象时,将会执行像int b = 1;这样的声明。

+0

但是为什么?这就是他所要求的。 – NINCOMPOOP

+0

Java只允许在类和外部任何方法内声明。声明像int b = 1;将在初始化一个新对象时执行。 – AppX

+0

将该评论置入您的回答中。 – NINCOMPOOP

1

这只是Java语法问题。在你展示的例子中,你尝试在你的类的成员声明部分中影响b的值。这是Java语法所不允许的。您只能在声明您的属性时,在方法的主体中或在静态块中声明您的属性是静态的,例如属性是静态的。 :

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

您无法在静态块中初始化非静态元素! – A4L

+0

真的!为此事道歉。编辑。 – Julien

+1

将您的属性设置为静态并不能解决问题,因为OP会为非静态属性提供解决方案。解决方案是从初始化块中移除'static'。 –