一个Java变量赋值的弱问题 我倒 你要么直接就这样private int i =10;就好了的啊要么就在方法里面赋值怎么可以private int i;i = 10; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 兄弟的问题是个好问题啊,以前没注意。找了一下,建议去看《JAVA IN A NUTSHELL》第3章,3。2 CREATING AND INTIALIZING OBJECTS。就都明白了。看你的名字应该是从C++转过来的吧。因为JAVA是纯面向对象语言,就是说所有的东西都是类,包括已经存在的API库和任何人要编的JAVA程序。在类里只能有2种东西存在。一个是变量,一个是方法。所以用任何一种都合理。private int i =10;这个就是变量。合理。如果写成这样private int i;i = 10;很明显第2个不是方法。所以JAVA说出错。但是JAVA语言里除了定义变量和方法外,还定义了构造函数。和方法类似。就是没有返回。这个构造函数不管你定义不定义都存在。不定义,JAVA就自动生成,来默认。当你写成这样的时候, int i;static int j;// 静态初始化语句块static{j=10;System.out.println("In static initializer.");}//实例初始化语句块{i=10;System.out.println("In instance initializer.");}// 构造方法public ClassExample(){System.out.println("In constructor.");}JAVA实际做的是把int i;和这个块{i=10;System.out.println("In instance initializer.");}放到构造函数里,就象public ClassExample(){int i;i=10;System.out.println("In instance initializer.");System.out.println("In constructor.");}这样的来执行。同样,对于静态的,JAVA也有个默认的构造函数在后台。静态的声明和静态块都放到那里。 在变量声明完成之后的赋值操作一定要在类方法里操作,int i=10;是直接在声明时赋初值当然可以的,而写在 { i=10; System.out.println("In instance initializer."); }里,因为这是一个匿名方法,已经有了方法的概念,所以也可以编译通过。 apollo333和zrtl两位兄弟都分析的很透彻啊,呵呵void ClassBodyDeclaration() :{}{ LOOKAHEAD( { isInitializer() } ) Initializer()| LOOKAHEAD( { isNestedClassDeclaration() } ) NestedClassDeclaration()| LOOKAHEAD( { isNestedInterfaceDeclaration() } ) NestedInterfaceDeclaration()| LOOKAHEAD( { isConstructorDeclaration() } ) ConstructorDeclaration()| LOOKAHEAD( { isMethodDeclaration() } ) MethodDeclaration()| FieldDeclaration()}其中void VariableInitializer() :{}{ ArrayInitializer()| LOOKAHEAD(1, <BOOLEAN> | <BYTE> | <CHAR> | <DOUBLE> | <FALSE> | <FLOAT> | <INT> | <LONG> | <NEW> | <NULL> | <SHORT> | <SUPER> | <THIS> | <TRUE> | <VOID> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <CHARACTER_LITERAL> | <STRING_LITERAL> | <IDENTIFIER> | <LPAREN> | <BANG> | <TILDE> | <INCR> | <DECR> | <PLUS> | <MINUS>) Expression()} Eclipse 启动参数疑惑 求助:Calender日期是怎么回事?很诡异,附代码 struts的模板如何理解和使用?? Jbuilder 2006运用 map to pojo(在线等) 为什么插入数据时抛出sqlerror异常 请教java语言"保存"按扭的代码是如何写的,我是初学者,想实现这个功能. 关于java中的TreeView的问题,希望大虾们指点,我是真的搞不懂了 编一个简单程序,以确定给定字符是否为中文字符 奇怪还是少见多怪!? 关于static的问题 如何獲得當前運行.class文件的路徑
private int i =10;这个就是变量。合理。
如果写成这样
private int i;
i = 10;
很明显第2个不是方法。所以JAVA说出错。但是JAVA语言里除了定义变量和方法外,还定义了构造函数。和方法类似。就是没有返回。
这个构造函数不管你定义不定义都存在。不定义,JAVA就自动生成,来默认。当你写成这样的时候,
int i;
static int j;// 静态初始化语句块
static{
j=10;
System.out.println("In static initializer.");
}//实例初始化语句块
{
i=10;
System.out.println("In instance initializer.");
}// 构造方法
public ClassExample(){
System.out.println("In constructor.");
}
JAVA实际做的是把
int i;
和这个块
{
i=10;
System.out.println("In instance initializer.");
}
放到构造函数里,就象public ClassExample(){int i;i=10;System.out.println("In instance initializer.");System.out.println("In constructor.");
}
这样的来执行。
同样,对于静态的,JAVA也有个默认的构造函数在后台。静态的声明和静态块都放到那里。
{
i=10;
System.out.println("In instance initializer.");
}
里,因为这是一个匿名方法,已经有了方法的概念,所以也可以编译通过。
{}
{
LOOKAHEAD( { isInitializer() } )
Initializer()
|
LOOKAHEAD( { isNestedClassDeclaration() } )
NestedClassDeclaration()
|
LOOKAHEAD( { isNestedInterfaceDeclaration() } )
NestedInterfaceDeclaration()
|
LOOKAHEAD( { isConstructorDeclaration() } )
ConstructorDeclaration()
|
LOOKAHEAD( { isMethodDeclaration() } )
MethodDeclaration()
|
FieldDeclaration()
}其中
void VariableInitializer() :
{}
{
ArrayInitializer()
|
LOOKAHEAD(1, <BOOLEAN> | <BYTE> | <CHAR> | <DOUBLE> | <FALSE> | <FLOAT> | <INT> |
<LONG> | <NEW> | <NULL> | <SHORT> | <SUPER> | <THIS> | <TRUE> |
<VOID> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> |
<CHARACTER_LITERAL> | <STRING_LITERAL> | <IDENTIFIER> | <LPAREN> |
<BANG> | <TILDE> | <INCR> | <DECR> | <PLUS> | <MINUS>)
Expression()
}