关于java构造方法的问题
classC{privatefinalintx;publicC(intx){this.x=x;}}final不是不可变吗,那我还能不能构造他...
class C {
private final int x;
public C(int x) {
this.x = x;
}
}
final 不是不可变吗,那我还能不能构造他 展开
private final int x;
public C(int x) {
this.x = x;
}
}
final 不是不可变吗,那我还能不能构造他 展开
3个回答
展开全部
兄弟,我写了一个程序,并且运行了一下,如下:
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)可以随意构造
明白吗?
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)可以随意构造
明白吗?
展开全部
可以构造,只要x不是static的,这种情况下x是实例变量,实例变量只有在对象初始化的时候才赋值,所以这样是可以的,也可以这样。
class C {
private final int x;
{
x = 23;
}
public C(int x) {
}
}
class C {
private final int x;
{
x = 23;
}
public C(int x) {
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
final是首次赋值后不能再变,所以首次还是能赋值的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询