本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer s = new StringBuffer("xcbeyond");
执行如下语句将报告编译期错误:
s = new StringBuffer("xcbeyond1");
但是,执行如下语句则可以通过编译:
a.append(" hello!");
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:
public void method(final StringBuffer param) {
}
实际上,这是错误的,因此,final不能修饰方法中的参数。倘若能够修饰,则违背了final修饰变量不能修改这一原则。在该方法内部仍然可以增加如下代码来修改参数对象: param.append("a");
final回顾:
-
final修饰的变量,其引用变量是不可以改变的,而其引用变量指向对象的内容却是可以改变哦!正如此笔试题所述。 -
final修饰的类,不能再被继承。
-
Java 的
String就是final类,不能被继承!Math也是final类 -
在实际项目开发中,原则上不允许使用final类!如:
Spring,Hibernate,Struts 2,这些框架经常动态代理(动态继承)技术。使用final的类可以造成这些框架的工作 问 题。
final修饰的方法,不能再被覆盖。
在实际项目开发中,原则上不允许使用 final方法!
-
final修饰的变量,初始化以后不允许再修改。 -
final static, java使用final static修饰的变量作为一般要求变量名都有大写字母。