千家信息网

怎么使用Java中的final关键字

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"怎么使用Java中的final关键字"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一
千家信息网最后更新 2026年11月03日怎么使用Java中的final关键字

本篇内容介绍了"怎么使用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关键字"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

变量 编译 类型 对象 地址 结果 常量 数据 关键 关键字 字符 字符串 局部 成员 方法 普通 例子 内容 字面 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 A股互联网金融科技公司 易互联网科技有限公司 奇酷互联网科技公司 宜安科技 互联网金融 上海喔噻互联网科技 互联网科技缩写 上海万想互联网科技 互联网高科技企业 哈尔滨秒房互联网科技有限公司 卫星互联网科技股票 科技与互联网哪个更好 中国互联网公司排名锤子科技 产业互联网科技服务公司 工业互联网科技成果转化 全球科技与互联网公司市值变化 互联网高科技行业有哪些企业 陕西九四连强互联网科技有限公司 广西泛欧互联网科技有限公司 深圳互联网科技园地址 广州淘业互联网络科技 科技服务与互联网 科技互联网公司logo 顺玮阁互联网科技 受益于互联网科技的高速发展 阿大互联网科技有限公司 科技互联网的核心竞争力 互联网企业科技类企业如何做账 广州互联网高科技取餐柜 众联互联网络科技
0