关于java构造方法的问题

classC{privatefinalintx;publicC(intx){this.x=x;}}final不是不可变吗,那我还能不能构造他... class C {
private final int x;
public C(int x) {
this.x = x;
}
}
final 不是不可变吗,那我还能不能构造他
展开
 我来答
隐居山林做和尚
2011-06-10 · 超过25用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:19.8万
展开全部
兄弟,我写了一个程序,并且运行了一下,如下:
public class Test
{
private final int x;

public Test(int x)
{
this.x= x;
}

public static void main(String args[])
{
Test a = new Test(2);
System.out.println(a.x);
a = new Test(3);
System.out.println(a.x);
Test b = new Test(4);
System.out.println(b.x);
}
}
运行结果:
2
3
4
所以可以构造,a第一次指向Test(2)这个对象,后来又指向Test(3)这个对象,最后又构造了Test(4)这个对象,一共三个对象位于堆内存中。

这个final修饰的只是private final int x;中的X,这个X和 public C(int x)中的X不是一个变量。也就是说这个final的意思是,一旦我创建了一个新的对象,这个对象的成员变量(也就是private final int x;中的X)不能再变了,并不是说public C(int x)中的X不能传入新的值。
所以只要保证每个对象的成员变量private final int x;中的X不变,构造方法 public C(int x)可以随意构造
明白吗?
sdu_viper
2011-06-10 · TA获得超过124个赞
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:116万
展开全部
可以构造,只要x不是static的,这种情况下x是实例变量,实例变量只有在对象初始化的时候才赋值,所以这样是可以的,也可以这样。

class C {
private final int x;
{
x = 23;
}
public C(int x) {

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wdjhz
2011-06-10 · TA获得超过3529个赞
知道大有可为答主
回答量:2227
采纳率:41%
帮助的人:689万
展开全部
final是首次赋值后不能再变,所以首次还是能赋值的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式