解释以下JAVA代码出现的现象

[复制链接]
查看11 | 回复3 | 2008-12-16 18:39:25 | 显示全部楼层 |阅读模式
烦请解释后提供资料来源,按知道能给出的最高分结分。
/*No Error*/
package cn.com.rwang.test;
public class NoStaticTest {
AClass a;
AClass b;
{
a=new AClass(1);
b=new AClass(2);
}
}
/* Error With the field b*/
package cn.com.rwang.test;
public class NoStaticTest {
AClass a;
AClass b;
a=new AClass(1);
b=new AClass(2);
}

回复

使用道具 举报

千问 | 2008-12-16 18:39:25 | 显示全部楼层
public class NoStaticTest { AClass a; AClass b; { a=new AClass(1); b=new AClass(2); } } 这个是正确的,对于非静态变量的初始化,java是支持这种语法的,并且特别是对于匿名内部内,如果你不是在定义的时候就给成员变量赋初值,那么匿名内部类由于不存在类名,所以不存在显式的构造器(从而无法在构造器中初始化成员变量了),导致这种为成员赋初值的方式是必须的.这种语法的另一个作用在于,无论一个类中存在有多少个构造器来创建对象,在这个对象创建前都会执行{...}中的代码,因为{...}中的内容是在构造器执行前执行的.有时候这样做是很有用的,你...
回复

使用道具 举报

千问 | 2008-12-16 18:39:25 | 显示全部楼层
上面的类是正确的java类,下面的有语法错误。在Java中,类直接包含的内容可以有:属性(成员变量)、方法、构造器、内部类及块(块包含静态块和非静态块)。上面的类包含两个属性及一个非静态块,语法正确。下面的类包含两个属性,但a=new AClass(1)......不可以被类直接包含,它可以被包含在方法、构造器及块中。...
回复

使用道具 举报

千问 | 2008-12-16 18:39:25 | 显示全部楼层
问题出在对属性的初始化上。a=new AClass(1); b=new AClass(2); 赋值语句不能直接写在类当中。可以用静态块将起括起来static{ a=new AClass(1);b=new AClass(2); }楼主不妨看一下这篇文章:Java 类中类属性和对象属性的初始化顺序http://...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行