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修饰符有所了解了呢,相信注释中已经给大家解释的很清楚了,我这里就不再啰嗦