java中final修饰符实例分析
final修饰符:
final修饰成员变量必须有程序员显示指定初始值。
类的Field:必须在静态初始化块中或声明该Field时指定初始值。
实例Field:必须在非静态初始块中,声明Field或者构造器中指定初始值。
final局部变量:必须由程序员显示初始化。
final修饰的基本变量和引用类型变量的区别?
final修饰的基本变量:不能对基本变量重新赋值。
final修饰的引用变量:只保证这个引用类型所引用的地址不会变,即
一直引用同一个对象,但这个对象完全可以发生改变。
/** */ importjava.util.*; publicclassDemo5 { publicstaticvoidmain(String[]args) { finalBb=newB(22); b.test(); //合法 改变值,但仍是指向同一个引用 b.setAge(20); System.out.println(b.getAge()); //非法 //b=null; b.test2(); } } /** fianl修饰成员变量 */ classA { //合法 finalinta=10; //构造器或初始化化块中指定初始值 finalStringstr; finalintc; finalstaticdoubled; { str="hello"; //非法 //a=100; } static { d=100; } //构造器可对没在初始化块中指定的Field指定初始值 publicA() { //非法 //str="ddd"; c=1000; } publicdoublechangFinal() { //不能再普通方法中为final指定初始值 //returnd=1000.90; return0; } } /** fianl修饰数组对象 */ classB { privateintage; publicB() { } publicB(intage) { this.age=age; } publicvoidsetAge(intage) { this.age=age; } publicintgetAge() { returnthis.age; } publicvoidtest() { finalint[]arr={23,434,56,898}; System.out.println(Arrays.toString(arr)); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); arr[2]=200; System.out.println(Arrays.toString(arr)); //下面对Arr重新赋值非法 //arr=null; } /** 加深对final的理解 */ publicvoidtest2() { Stringstr1="美好未来"; //直接引用常量池中的"美好未来" Stringstr2="美好"+"未来"; //true System.out.println(str1==str2); Strings1="美好"; Strings2="未来"; Strings3=s1+s2; //false s1s2只是变量在编译时期不能确定 //若想在编译时期确定则用final修饰s1s2 System.out.println(str1==s3); } }
小伙伴们是否对java中final修饰符有所了解了呢,相信注释中已经给大家解释的很清楚了,我这里就不再啰嗦