论坛首页 Java企业应用论坛

final学习笔记(一)

浏览 1831 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-17  
OO
首先看下面的代码:
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类型的变量是在加载类的时候创建的,也就是说是在创建对象之前即执行构造方法之前执行的。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics