您的位置:首页 > 其它

关于空白final 的赋值和思考

2015-12-18 18:33 330 查看
所谓空白final 是指声明为final但未给定初始值的域

空白final可在定义处或构造器中或创建对象时赋值

如果一个类有多个空白final不可建多个构造器进行赋值 只能再一个构造器中赋值否则会显示另一个空白final未定义

代码如下:

public class ewq {
final private String i;
final private String i2;
final private Integer a;

public ewq(String ii, Integer x) {
i2 = "构造器中赋值";
i = ii;
a = x;
}

// 只能用一个构造器 用两个构造器会显示另一个空白final未定义
/*
* public ewq(String ii){ i=ii; }
*/

// 重写 toString方法,运用 + 将integer 类型转换为 string
public String toString() {
return "i2=" + i2 + "\ni=" + i + "\na=" + a;

}

public static void main(String[] args) {
System.out.println(new ewq("创建对象时赋值", 2).toString());

}

}
结果:

i2=构造器中赋值

i=创建对象时赋值

a=2

运用空白final在创建两个不同的对象时 a有什么变化?

public class ewq2 {

final private int a;

public ewq2(int x) {
a = x;
// a++;  错误 a并不能改变

}

public int toInteger() {

return a;

}

public static void main(String[] args) {

ewq2 w = new ewq2(3);

System.out.println("number-->" + w.toInteger());

System.out.println("\n---------");
ewq2 w2 = new ewq2(10);

System.out.println("number-->" + w2.toInteger());

}

}
结果:

number-->3

---------

number-->10

为什么number会变成10?不是说final修饰的是不可以改变的吗!

通过debug可知 a的变化

ewq2 w = new ewq2(3);    a: 0-->3
<pre name="code" class="java">ewq2 w2 = new ewq2(10);  a: 0-->10




a是成员变量默认值为0

a的值并不是从3--->10的,因为创建对象时会分配新的内存块,而a实际是两个地址不同名称相同的变量 所以并不是a的值改变了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: