黑马程序员技术交流社区

标题: final 关键字 [打印本页]

作者: 贾存双    时间: 2012-7-13 23:00
标题: final 关键字
本帖最后由 贾存双 于 2012-7-13 23:03 编辑

import java.util.* ;
public class Message_zh_CN extends ListResourceBundle{
private final Object data[][] = {
  {"info","贾存双,{0}!"}
} ;
public Object[][] getContents(){    //覆写的方法 ;
  return data ;
}
} ;
这是用类写的一个资源文件。
===================================
import java.util.* ;
import java.text.* ;
public class ListDemo{
public static void main(String args[]){
  Locale zhloc = new Locale("zh","CN") ;
  ResourceBundle zhrb = ResourceBundle.getBundle("Message",zhloc) ;
  String str = zhrb.getString("info") ;
  System.out.println("中文显示:" + MessageFormat.format(str,"你一定要黑马!加油!")) ;
}
} ;
运行结果:


为什么用 final 声明的的二维数组还可以被改变


作者: 温少邦    时间: 2012-7-14 00:00
final变量被赋值之后不能改变是指不能再被赋值
赋给final变量一个对象后,更改这个对象本身是可以的
比如数组:

  1. public class FinalTest{
  2.         public static void main(String[] args){
  3.                 final String[] s={"123","456"};

  4.                 System.out.println(s[0]);
  5.                 s[0]="qwe";
  6.                 System.out.println(s[0]);
  7.         }
  8. }
复制代码
s[0]="qwe"时
final定义的s变量还是指向这个数组,
只是这个数组里的内容改变了
作者: 全海波    时间: 2012-7-14 00:13
这个还真不知道
作者: 陆强强    时间: 2012-7-14 00:22
final修饰的成员变量可以通过new对象来不断赋值;
final修饰的局部变量可以通过不断调用所属方法来不断赋值。
所谓的final修饰的成员不能被修改是指不能被同等级成员修改,对上级成员无效。
像final修饰的局部变量,就不能被方法内的成员修改。而成员方法,成员变量也是在一个类里同级别的。

作者: 刘煜    时间: 2012-7-14 00:35
对于final修饰符,在Java声明类、属性和方法时,可以使用关键字final来修饰,final所标记的成分具有终态的特征,表示最终的意思。final的具体使用规则如下:
1、final标记的类不能被继承
2、final标记的方法不能被子类重写
3、final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次
4、final标记的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用
5、final标记的局部变量可以只声明不赋值,然后再进行一次性的赋值
6、final一般用于标记那些通用性的功能、实现方式或取值不能随意被改变的成分,以避免被误用。如果将引用类型(即任何类的类型)的变量标记为final,那么,该变量不能指向任何其它对象,但可以改变对象的内容,因为只有引用本身是final的。
注意红色字体部分,对于二维数组来说,只是定义了内存里一段连续的地址空间,它是引用类型的,数组只是指向你存的数据的空间,所以你可以修改二位数组的内容。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2