浏览 1831 次
锁定老帖子 主题:final学习笔记(一)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-17
public class Test2 { private final int a; private String name; public Test2() { a=3; } public Test2(String name) { this.name=name; } public static void main(String[] args) { Test2 test = new Test2(); Test2 test2 = new Test2("hello"); } } 编译是不会通过的,在第11行出错。因为成员变量a被声明为final类型,也就是说a是被该类的多个对象所共享,当创建一个该类的对象事必须为变量a赋值,一旦赋值了就不能改变了。但是当一个类有多个构造方法时,对成员变量a需要在每个构造方法中初始化,也就是说在this.name=name前加一行a=5,编译就会通过。 总结: 引用 对于final类型成员变量的初始化方法有两种: 1、声明变量时直接赋值; 2、在构造方法中完成赋值,如果一个类有多个构造方法,就要保证在每个构造方法都要完成对该final类型的成员变量赋值。 将这个代码稍微改一下,在final前加一个static: public class Test2 { private static final int a; private String name; public Test2() { a=3; } public Test2(String name) { a=7; this.name=name; } public static void main(String[] args) { Test2 test = new Test2(); Test2 test2 = new Test2("hello"); } } 编译同样不会通过。 总结: 引用 对于final+static声明的成员变量,必须在声明时赋值,不能在构造方法中赋值。 因为static类型的变量是在加载类的时候创建的,也就是说是在创建对象之前即执行构造方法之前执行的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |