Java中final关键字有什么用

Java中final关键字有什么用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一. final类

final修饰的类,该类不能被继承。当你确认一个类永远不会被继承或不想被继承,那么就可以用final修饰。

Java中final关键字有什么用

同样,对于接口(interface)和抽象类(abstract Class),其本就是为了“多态”而设计,自然无法用final关键字修饰

Java中final关键字有什么用

Java中final关键字有什么用

final类中的成员方法默认也被隐式指定为final方法。

二. final方法

final修饰的方法不可被重写。

例子:

/**
*父类
*@authorLH
*/
publicclassFinalDemo1{
publicfinalvoidtest(){

}
}

Java中final关键字有什么用

三. final变量

final变量包括成员变量和局部变量。变量类型包括基本数据类型、对象。

通过final修饰局部基本类型变量(及其包装类),数值一经初始化(可以定义时初始化,也可以在使用前初始化)不可改变。如:

finalinta=0;
a=1;//报错
finalintb;
b=1;//编译通过

通过final修饰局部引用类型变量时,其引用的对象(内存地址)(可以定义时初始化,也可以在使用前初始化)不可改变,但对象中存放的数据可以改变

publicstaticvoidmain(String[]args){
finalStringstr1="helloWorld";
str1="helloChina";//编译出错,String的不可变性,此处返回的是新的对象引用。

finalStringBuildersb=newStringBuilder("hello");
sb.append("world");//编译通过

sb=newStringBuilder("China");//编译出错
}

final修饰的成员变量必须在定义的时候直接初始化,否则会编译出错

publicclassFinalDemo1{
publicfinalintage;//final修饰的基本类型,编译出错
publicfinalintage1=20;//final修饰的基本类型,编译通过
publicfinalStringBuilderaddress;//final修饰的引用类型,编译出错
publicfinalStringBuilderaddress1=newStringBuilder("中国");//final修饰的引用类型,编译通过
}

那么final变量与普通变量之间到底有何区别,看下面的例子

publicstaticvoidmain(String[]args){
Stringstr0="helloWorldChina";
Stringstr1="helloWorld";
Stringstr3=str1+"China";
System.out.println(str0==str3);//false

finalStringstr2="helloWorld";
Stringstr4=str2+"China";
System.out.println(str0==str4);//true

finalStringstr5;
str5="helloWorld";
Stringstr6=str5+"China";
System.out.println(str0==str6);//false
}

str0 == str3运行结果为false,这是因为通过“+”生成了一个新的字符串对象,返回的引用地址和str0不再一样,这在《Java基础(三) String深度解析》中有讲解。

那么str0 == str4的执行结果为什么是true?

通过final修饰的变量,如果在编译期都可以知道确切值(定义变量的时候就初始化),那么在编译器会将其当做常量使用,所有用到该变量的地方就相当于直接使用该常量,String str4 = str2 + "China" 在编译期间都已经合并处理成String str4 = "helloWorldChina",因此str0与str4引用了常量池中同一个字符串字面量的地址,故而结果为true。

而str0 == str6的执行结果为false也很好理解

str5在编译期并不知道确切值,而是在使用之前才进行初始化,因此编译器无法事先进行合并处理,str6通过“+”生成了一个新的字符串对象,返回的引用地址和str0也不再一样。

而针对基本数据类型来说定义为final变量与普通变量,比较结果来说并无差异

publicstaticvoidtestint(){
intint0=8;
finalintint1;
int1=4;
intint2=int1+4;
System.out.println(int2==int0);//true
}

关于Java中final关键字有什么用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

发布于 2021-06-13 23:21:10
收藏
分享
海报
0 条评论
184
上一篇:如何在易语言中操作数据库 下一篇:Visual Studio如何安装离线插件vsix
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码