首页 > 代码库 > java基础之final关键字

java基础之final关键字

与final关键字相关的笔试题面试题也是一道必考题。而且对于final的实际应用非常广泛,在代码设计的时候,如果对此不够足够掌握,可能就会很难排查与此相关的异常。

final的理论知识如下:

final类型的成员变量初始化值:

1、声明时候直接赋值

2、构造方法中赋值,如果一个类中有多个构造方法,就要保证在每个构造方法中都要完成对final类型变量的初始化工作

 

3、静态final成员变量必须在声明时赋值,且不能在构造方法中赋值

 

4final成员变量指的是引用不能改变,即该变量的引用不能在指向其他的对象,但是对象的内容是可以改变的,比如stringbuffer可以通过appendremove等对该对象的内容作出改变。


5、一个类的修饰符不可以同时是abstractfinal

abstract类需要通过子类的继承来使用,而final则是不可继承,相互矛盾


6、为什么对于publicfinal类型的成员变量,一般都会加上static呢?

因为可以节省内存,static类型的,那么所有的对象都只有一个变量,如果是非static的,那么每一个对象都要有一个变量,而这个变量是不可改变的。


代码示例:(可将注释掉的代码放开运行,看看效果等)

/**
 * author Ding Chengyun
 * 2014-2-23
 */
package test;

/**
 * @author Ding Chengyun
 * 2014-2-23
 */
public class FinalTest {

	private static final int a = 1;
//	private final int a = 1;
	private String name;
	
	private final StringBuffer sb = new StringBuffer();
	private final Fi fi= new Fi();
	
	private final Integer i = new Integer(3);
	public FinalTest() {
//		a = 3;
	}
	public FinalTest(String name) {
//		a = 3;
		this.name = name;
	}
	public static void main(String[] args) {
		FinalTest ft = new FinalTest();
		FinalTest f = new FinalTest("hello");
		System.out.println(ft.a);
		System.out.println(f.a);
		ft.sb.append("aa");
		ft.fi.str = "abc";
		System.out.println(ft.fi.str);
	}
}

class Fi {
	public String str;
}