温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用Java中的final关键字

发布时间:2021-11-20 11:36:12 来源:亿速云 阅读:103 作者:iii 栏目:编程语言

本篇内容介绍了“怎么使用Java中的final关键字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一. final类

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

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

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

二. final方法

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

例子:

/** * 父类 * @author LH */public class FinalDemo1 { public final void test() {   }}

三. final变量

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

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

final int a = 0;a = 1;//报错final int b;b = 1;//编译通过

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

public static void main(String[] args) { final String str1 = "helloWorld"; str1 = "helloChina";//编译出错,String的不可变性,此处返回的是新的对象引用。 final StringBuilder sb = new StringBuilder("hello"); sb.append("world");//编译通过 sb = new StringBuilder("China");//编译出错}

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

public class FinalDemo1 { public final int age;//final修饰的基本类型,编译出错 public final int age1 = 20;//final修饰的基本类型,编译通过 public final StringBuilder address;// final修饰的引用类型,编译出错 public final StringBuilder address1 = new StringBuilder("中国");//final修饰的引用类型,编译通过}

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

public static void main(String[] args) { String str0 = "helloWorldChina"; String str1 = "helloWorld"; String str3 = str1 + "China"; System.out.println(str0 == str3);//false  final String str2 = "helloWorld"; String str4 = str2 + "China"; System.out.println(str0 == str4);//true  final String str5; str5 = "helloWorld"; String str6 = 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变量与普通变量,比较结果来说并无差异

public static void testint(){ int int0 = 8;  final int int1;  int1 = 4;  int int2 = int1 + 4;  System.out.println(int2 == int0);//true}

因为基本数据类型并不存在引用传递的概念,基本类型变量也是字面常量,所以对基本类型的操作都是直接对值的操作,和引用不一样,比较的并非地址。

“怎么使用Java中的final关键字”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI