日期:2014-05-20  浏览次数:20697 次

类成员变量(Field)的声明和初始化语句,为什么不能拆成两句?
声明一个类的时候,对于一个成员变量的声明,只能允许两种情况:
1)声明变量(域)的同时初始化该变量
2)声明变量(域),然后在构造器或者方法中初始化

如果一句声明变量,一句初始化赋值,那么编译器就会报错,例如:
Java code

public class Test {
    private int a;
    a = 10;
}


请问为什么将声明和初始化分开,这么理所当然的事情,对于java的类成员变量却不允许呢?

------解决方案--------------------
原因很简单啊,a = 10;是付值语句,不是声名变量,这种语句只能写在方法内部、代码块内存或静态代码块内部,这是语法要求。用他你就得尊守他的规则,也就是说,方法外部(代码块外部)只能有变量。
------解决方案--------------------
int a;
{a=10;}

可以满足你的要求
------解决方案--------------------
LZ意思我理解错了。
对于java这么设计,我是这样理解的:
java是面向对象的语言,class类抽象为对象。
Field和Method对应对象的固有属性和行为。
而赋值和逻辑等操作,则相当于对象的动作,这些动作是和行为对应的,一连串的动作组成特定的行为。
所以呢,就把动作限定在行为里了。

而a=10是一个赋值动作
private int a = 10 是一个属性的性质。

说白了就是设计者当初这么设计了,所以就这样了。