首页 > 编程语言 >Java中final关键字的学习

Java中final关键字的学习

时间:2024-08-28 19:04:35浏览次数:5  
标签:Java 变量 关键字 参数 修饰 方法 final 不能

final关键字


目录

在Java编程语言中,final关键字是一个非常重要的概念,它用于表示一个变量、方法或类是不可变的或不能被进一步修改的。以下是final关键字的几种常见用法:

1. 修饰变量

  • 常量final修饰的变量称为常量,一旦赋值后就不能被改变。这适用于基本数据类型和对象引用。对于基本数据类型,final保证了变量的值不可变;对于对象引用,final保证了引用不能指向另一个对象,但对象本身的状态(即对象的属性)是可以改变的。
  • 成员变量:对于类的成员变量,如果声明为final,则必须在构造方法或初始化块中对其进行初始化,之后就不能再被修改。
  • 局部变量final也可以修饰局部变量,一旦赋值后,该变量的值就不能被改变。

2. 修饰方法

  • 使用final修饰的方法表示该方法不能被子类重写。如果尝试在子类中重写该方法,编译器将报错。这有助于保护方法不被意外修改,确保方法的稳定性和可预测性。

3. 修饰类

  • 当一个类被声明为final时,表示该类不能被继承。这通常用于那些不希望被扩展的类,如工具类、枚举类型等。如果尝试继承一个final类,编译器将报错。

4. 修饰方法参数

  • 在方法定义中,final也可以用来修饰参数。这表示在方法体内,参数的值(对于基本数据类型)或引用(对于对象类型)不能被改变。这有助于保证方法参数的不可变性,防止在方法执行过程中被意外修改。

注意事项

  • final修饰的变量必须在声明时或构造方法中初始化(对于成员变量),否则编译器会报错。
  • final修饰的引用类型变量不能指向另一个对象,但对象本身的状态(即对象的属性)是可以修改的。
  • final修饰的方法不能被重写,但可以被重载。
  • final修饰的类不能被继承,但类中的成员变量和方法(除了private方法,它们隐式地被指定为final)可以被继承并访问。

示例

public final class FinalClass {
    private final int number = 10; // final成员变量,必须在声明时或构造方法中初始化

    public final void show() { // final方法,不能被重写
        System.out.println("This is a final method.");
    }

    public void anotherMethod(final String param) { // final参数,参数值在方法体内不能改变
        // param = "another value"; // 这将导致编译错误
        System.out.println(param);
    }
}

public class Test {
    public static void main(String[] args) {
        FinalClass fc = new FinalClass();
        fc.show(); // 调用final方法
        fc.anotherMethod("Hello, final parameter!"); // 调用带有final参数的方法
    }
}

在这个示例中,FinalClass是一个final类,不能被继承。它有一个final成员变量number和一个final方法show()anotherMethod()方法接受一个final参数param,该参数在方法体内不能被重新赋值。

标签:Java,变量,关键字,参数,修饰,方法,final,不能
From: https://www.cnblogs.com/BingBing-8888/p/18385385

相关文章

  • Java设计模式之工厂模式详细讲解和案例示范
    在Java的设计模式中,工厂模式(FactoryPattern)是最常见和最有用的一种创建型模式。工厂模式的核心思想是将对象的创建与使用分离,从而提供了一种灵活的方式来创建不同类型的对象。这种模式尤其适用于复杂对象的创建过程,并且可以很好地应对对象类型的变化。本文将详细讲解工厂模......
  • Java 入门指南:Java Socket 网络通信编程
    SocketSocket(套接字)是用于网络通信的编程接口、网络通信的基础,通过它可以实现不同计算机之间的数据传输,应用程序可以通过它发送或接收数据;就像操作文件那样可以打开、读写和关闭。它提供了一种机制,使得计算机之间可以进行数据的发送和接收。套接字允许应用程序将I/O应用......
  • Java实现学生、班级、年级管理系统
    分层思想DAO层:主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此Service层:主要负责业务模块的应用逻辑设计,设计接口、实现类等,Service层的业务层具体要调用已经定义的DAO层接口Controller层:负责具体的业务模块流程的控制,要调用Service层的接口来控制业务流程......
  • java.util.UUID
    概述Aclassthatrepresentsanimmutableuniversallyuniqueidentifier(UUID).一个不可变的通用的唯一标识符的classAUUIDrepresentsa128-bitvalue.一个uuid代表一个128位的值 UUID的版本UUID有多个版本,每个版本有不同的生成方式。常用的......
  • 【Java】多线程创建与管理 (实操图解)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1Thread4.2Runnable五、总结:一、前言多线程入门二、学习内容:实现多线程效果三、问题......
  • Java基础-学习笔记15
    15泛型1.泛型泛型的好处编译时,检查添加元素的类型,提高了安全性减少了类型转换的次数,提高效率比如:ArrayListarr=newArrayList();在放入时,如果添加Dog类到arr里,编译器发现添加的类型不满足要求,就会报错;在取出时,直接取出Person类,就不用再转型使用。泛型的......
  • java增加注解实现异步执行任务
    1.首先启动类增加注解@EnableAsync2.增加configpackagecom.xxx.config;importorg.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;importorg.springframework.context.annotation.Configuration;importorg.springframework.scheduling.annotation.A......
  • Effective Java理解笔记系列-第1条-何时考虑用静态工厂方法替代构造器?
    为什么写这系列博客?在阅读《EffectiveJava》这本书时,我发现有许多地方需要仔细认真地慢慢阅读并且在必要时查阅相关资料才能彻底搞懂,相信有些读者在阅读此书时也有类似感受;同时,在解决疑惑的过程中,还存在着有些内容不容易查找、查找到的解答质量不高等问题,于是我决定把我阅读此书......
  • Java后端微服务架构下的配置动态刷新:Spring Cloud Bus
    Java后端微服务架构下的配置动态刷新:SpringCloudBus大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在微服务架构中,服务的配置管理是一个挑战,尤其是当配置需要动态更新时。SpringCloudBus提供了一种基于消息总线的配置刷新机制,允许配置更改在服务......
  • Java后端分布式系统的服务健康检查:Spring Boot Health
    Java后端分布式系统的服务健康检查:SpringBootHealth大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,服务的健康检查是确保服务可用性和稳定性的关键环节。SpringBootHealth提供了一种标准化的方式来检查和管理服务的健康状态。服......