与final关键字相关的笔试题面试题也是一道必考题。而且对于final的实际应用非常广泛,在代码设计的时候,如果对此不够足够掌握,可能就会很难排查与此相关的异常。
final的理论知识如下:
final类型的成员变量初始化值:
1、声明时候直接赋值
2、构造方法中赋值,如果一个类中有多个构造方法,就要保证在每个构造方法中都要完成对final类型变量的初始化工作
3、静态final成员变量必须在声明时赋值,且不能在构造方法中赋值
4、final成员变量指的是引用不能改变,即该变量的引用不能在指向其他的对象,但是对象的内容是可以改变的,比如stringbuffer可以通过append、remove等对该对象的内容作出改变。
5、一个类的修饰符不可以同时是abstract和final
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; }
java基础之final关键字,码迷,mamicode.com
原文地址:http://blog.csdn.net/sundenskyqq/article/details/24813853