首页 > 编程语言 >java | final 关键字介绍

java | final 关键字介绍

时间:2024-07-25 21:43:19浏览次数:16  
标签:初始化 stringUtil java number final 关键字 字段 public

在Java中,final关键字用于声明一个常量、不可改变的变量、方法或类。

对于如private final StringUtil stringUtil;这种情况,final关键字具有以下作用:

final的作用

  1. 不可重新赋值

    • final修饰的变量在初始化之后,不能被重新赋值。对于private final StringUtil stringUtil;,这意味着一旦stringUtil被赋值(通常在构造函数中),它就不能再被改变。你不能将stringUtil重新赋值为另一个StringUtil实例。
  2. 确保不变性

    • 使用final关键字可以帮助保证对象的引用不被修改,从而确保对象的一致性和可靠性。在构造函数中对final字段进行初始化,确保了在对象创建后,stringUtil字段的引用不会被改变。
  3. 线程安全

    • final字段的不可变性有助于提高线程安全性,因为一旦对象被构造完成,final字段的引用就不会改变。对于多线程环境,这意味着所有线程看到的都是同一个stringUtil实例,避免了由于修改引用所带来的同步问题。
  4. 编译器优化

    • final变量通常可以使编译器进行更多的优化,因为编译器知道这个变量不会被改变。这有助于提高程序的执行效率。

示例

以下是使用final关键字的实际示例:

1. 构造函数中的初始化

import org.springframework.stereotype.Service;

@Service
public class MyService {

    private final StringUtil stringUtil;

    @Autowired
    public MyService(StringUtil stringUtil) {
        this.stringUtil = stringUtil; // final字段在构造函数中初始化
    }

    public void performTask() {
        String result = stringUtil.concatenate("Hello", "World");
        // 其他操作
    }
}

在这个示例中,stringUtil字段被标记为final,并且在构造函数中被初始化。这样一来,stringUtil在对象创建后就不会被重新赋值。

2. final的字段不可修改

public class Example {

    private final int number;

    public Example(int number) {
        this.number = number; // final字段初始化
    }

    public void updateNumber(int newNumber) {
        // this.number = newNumber; // 编译错误,无法修改final字段
    }
}

在这个示例中,number字段是final的,因此在对象创建后无法修改其值。

总结

  • 不可重新赋值final修饰的变量在初始化后不能重新赋值。
  • 确保不变性:确保对象引用的一致性,提升对象的可靠性。
  • 线程安全:有助于在多线程环境下保持一致性,减少同步问题。
  • 编译器优化:允许编译器进行更多优化,提高性能。

final关键字在设计不可变对象和确保对象的稳定性时非常有用。

标签:初始化,stringUtil,java,number,final,关键字,字段,public
From: https://www.cnblogs.com/echohye/p/18324180

相关文章

  • static final 的含义和作用
    在Java中,staticfinal结合使用具有特定的含义和用途:staticfinal的含义和作用static:static修饰符表示该字段或方法属于类本身,而不是类的实例。也就是说,static字段或方法被所有实例共享,而不是每个实例都有自己的副本。static字段或方法在类加载时初始化,并且在整个程序运行......
  • Java简介及JDK的安装
    一、JAVA语言概述1.java语言的发展Java的开发者为詹姆斯·高斯林。转至sun公司,后参与“绿色计划”,发展了一套语言“Oak”,之后改名为Java(爪蛙)。2.Java语言的平台版本JavaSE标准版本:为普通开发桌面和商务应用程序提供的解决方案;此技术为后两项的基础,可以完成一些桌面的开发。......
  • JAVA初级之集合(List集合)
    目录1、数组和集合的区别2、集合的体系结构3、collection集合3.1collection集合的概述 3.2 Collection集合常用方法 3.3 Collection的增删查实现3.3.1增加3.3.2移除功能3.3.3查找功能4、List集合4.1List集合的概述和特点4.2List集合的常用方法 4.3常......
  • 7月24日JavaSE学习笔记
    序列化版本控制序列化:将内存对象转换成序列(流)的过程反序列化:将对象序列读入程序,转换成对象的方式;反序列化的对象是一个新的对象。serialVersionUID是一个类的序列化版本号privatestaticfinallongserialVersionUID=1L;//版本号如果序列化版本号没有定义,JDK会自动......
  • 7月25日JavaSE学习笔记
    线程的生命周期中,等待是主动的,阻塞是被动的锁对象创建锁对象,锁对象同一时间只允许一个线程进入//创建锁对象Locklock=newReentrantLock(true);//创建可重入锁可重入锁:在嵌套代码块中,锁对象一样就可以直接进入执行公平锁:保证线程获取锁的顺序与线程请求锁的顺序......
  • java包装类型缓存简单探究-Integer为例
    文章目录包装类型缓存自动装箱与valueOf感悟结语包装类型缓存包装类型缓存是什么本文以常用的Integer包装类为例做一个探索,感兴趣可以用类似方法查看其他包装类。我们都知道它会缓存-128到127之间的整数Integer对象。结论大伙都知道。那么我们今天就来探究一下底......
  • Java笔记day10
    一,不同方式创建多个线程并打印(1)定义了一个RunA实现Runnable接口,定义list存储数据,并重写了run方法 ,在run方法里定义循环向list中添加数据a;在main方法中创建a,b两个线程并引用该run方法,输出run对象的list和长度publicstaticvoidmainB(String[]args){RunAru......
  • 基于javaweb+mysql数据库实现的宠物领养|流浪猫狗网站
    《基于javaweb+mysql数据库实现的宠物领养网站》该项目含有源码、文档等资料、配套开发软件、软件安装教程、项目发布教程等使用技术:前端使用技术:JSP,HTML5,CSS3、JavaScript等后台使用技术:Servlet、Jdbc等数据库:Mysql数据库项目功能介绍:本系统为基于jsp+mysql的宠物领养......
  • [Java面向对象]接口
    接口接口中方法抛出异常在Java中,如果接口中的方法声明了抛出异常,那么实现这个接口的类必须处理这些异常。处理方式有两种:要么在实现方法中继续抛出异常,要么捕获并处理异常。假设接口定义如下:publicinterfaceMyInterface{voidmyMethod()throwsIOException;}继......
  • Java SE核心技术——2 Java基础语法
    一、关键字和保留字1.关键字关键字的定义和特点定义:被[java语言]赋予了特殊含义,用作专门用途的字符串。特点:关键字中所有字母都为小写。关键字不能用作变量名,方法名,类名,包名和参数。2.保留字定义:现在java尚未使用,但以后版本可能会作为关键字使用。自己使用时应避免使用。-......