首页 > 编程语言 >Java中的final关键字详解

Java中的final关键字详解

时间:2024-11-26 16:30:39浏览次数:9  
标签:Java final person class Person 详解 public name

在Java中,final 关键字是一个非常重要的修饰符,用于控制变量、方法或类的不可变性或不可覆盖性。下面我将通过文字解释和代码示例详细讲解 final 关键字的用法。

 1. final 关键字概述

final 关键字可以用于以下三种场景:

变量:用于声明常量,使其值在初始化后不能被修改。

方法:用于防止方法被子类重写(Override)。

类:用于声明一个类不能被继承。

 2. final 修饰变量

当 final 修饰变量时,表示该变量的值一旦被初始化后就不能被修改,即该变量为常量。

 2.1. final 修饰基本数据类型变量

public class FinalVariableExample {
    public static void main(String[] args) {
        final int MAX_SIZE = 100; // 声明一个常量
        System.out.println("MAX_SIZE: " + MAX_SIZE);
        
        // MAX_SIZE = 200; // 编译错误:无法为最终变量赋值
    }
}

解释:

MAX_SIZE是一个 final变量,一旦被赋值后,其值不能被修改。

如果尝试修改 MAX_SIZE的值,编译器会报错。

 2.2. final修饰引用类型变量

 

public class FinalReferenceExample {
    public static void main(String[] args) {
        final Person person = new Person("Alice");
        System.out.println("Person name: " + person.getName());
        
        person.setName("Bob"); // 可以修改引用对象的属性
        System.out.println("Person name after modification: " + person.getName());
        
        // person = new Person("Charlie"); // 编译错误:无法为最终变量赋值
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

解释:

 person 是一个 final 引用变量,表示 person 引用不能指向其他对象。

 但是,可以通过 person 引用修改对象的属性,例如 setName 方法。

 如果尝试让 person 引用指向另一个 Person 对象,编译器会报错。

 3. final 修饰方法

当 final 修饰方法时,表示该方法不能被子类重写(Override)

class Base {
    public final void display() {
        System.out.println("Base class display method");
    }
}

class Derived extends Base {
    // @Override // 编译错误:无法覆盖最终方法
    public void display() {
        System.out.println("Derived class display method");
    }
}

解释:

Base 类中的display 方法被final修饰,表示该方法不能被子类Derived 重写。

 如果子类尝试重写display 方法,编译器会报错。

 4.fina修饰类

当final修饰类时,表示该类不能被继承。

final class FinalClass {
    public void show() {
        System.out.println("FinalClass show method");
    }
}

// class DerivedFromFinal extends FinalClass { // 编译错误:无法继承最终类
//     public void show() {
//         System.out.println("DerivedFromFinal show method");
//     }
// }

解释:

 FinalClass 被 final 修饰,表示该类不能被其他类继承。

 如果尝试继承 FinalClass,编译器会报错。

 5. final 关键字的总结

 变量:

基本类型:final 变量是常量,值不可变。

引用类型:final 引用不能指向其他对象,但对象本身可以修改。

 方法:

final 方法不能被子类重写。

 类:

final 类不能被继承。

使用 final 关键字可以提高代码的安全性和稳定性,防止意外修改或重写关键代码。

 6. 完整示例

 

public class FinalKeywordExample {
    public static void main(String[] args) {
        // Final variable example
        final int MAX_VALUE = 100;
        System.out.println("MAX_VALUE: " + MAX_VALUE);
        
        // Final reference example
        final Person person = new Person("Alice");
        person.setName("Bob");
        System.out.println("Person name: " + person.getName());
        
        // Final method example
        Base base = new Base();
        base.display();
        
        // Final class example
        FinalClass finalClass = new FinalClass();
        finalClass.show();
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class Base {
    public final void display() {
        System.out.println("Base class display method");
    }
}

final class FinalClass {
    public void show() {
        System.out.println("FinalClass show method");
    }
}

 

标签:Java,final,person,class,Person,详解,public,name
From: https://blog.csdn.net/lxsxjsj/article/details/144060817

相关文章

  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-6- 元素基础定位方式-上篇 (详细教
    1.简介从这篇文章开始,就开始要介绍UI自动化核心的内容,也是最困难的部分了,就是:定位元素,并去对定位到的元素进行一系列相关的操作。想要对元素进行操作,第一步,也是最重要的一步,就是要找到这个元素,如果连元素都定位不到,后续什么操作都是无用功,都是扯淡,因此宏哥建议小伙伴或者同学们从......
  • 网站调取天地图开发全攻略:方法与步骤详解
    地理信息系统(GIS)在网站开发中的应用日益广泛。天地图作为国内权威的地理信息服务平台,为开发者提供了丰富的地图数据和强大的功能接口。本文将详细介绍网站调取天地图进行开发的方法和步骤,帮助开发者快速上手,打造出具有地理信息展示功能的优质网站。一、使用天地图JavaScript......
  • DolphinScheduler JavaTask动态传参秘籍:轻松实现任务间数据流动
    ApacheDolphinScheduler的JavaTask可以通过在任务执行日志中输出特定格式的参数来支持OUT参数的下游传输,通过捕捉日志并将其作为参数传递给下游任务。这种机制允许任务间的数据流动和通信,增强了工作流的灵活性和动态性。那具体要怎么做呢?本文将进行详细的讲解。0修改一行源码......
  • JavaScript 中的“造物”艺术:对象、构造函数与原型
    走进JS,走近讶语在JavaScript的世界里,对象和面向对象编程(OOP)是不可或缺的一部分。本文将带你深入了解JavaScript中对象的创建方式,特别是ES6中引入的class语法,以及传统的构造函数和原型的概念。希望通过这篇文章,你能对JavaScript的面向对象编程有一个更深入的理解。1.造对象......
  • java电子学习笔记交易系统vue+springboot
    目录课题介绍具体实现截图课程项目技术路线代码流程执行分析thinkphp框架解析开发技术介绍PHP核心代码部分展示详细视频演示源码获取课题介绍功能需求:(可能想的不是很全面,参考校园二手就可以了)登录页面:可以注册、登录,用户名密码(密码有格式检验)主页:头、搜索功能、播......
  • HTTP状态码详解及其解决方案404,403,500等
    HTTP状态码详解及其解决方案引言在现代互联网中,HTTP(HyperTextTransferProtocol,超文本传输协议)是最常用的数据传输协议之一。它定义了客户端(通常是浏览器)与服务器之间如何进行通信。HTTP状态码是服务器响应请求时返回的一个三位数字,用于描述请求的处理结果。这些状态码不仅......
  • 02 - Java 基本数据类型
    1、基本数据类型Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。基本数据类型介绍长度取值范围默认值例子bytebyte数据类型是8位、有符号的,以二进制补码表示的整数;byte类型用在大型数组中节约空间,主要代替整......
  • java小白入门学习之---多态(重要)
    引出传统的方法:代码复用性不高,不利于管理和维护解决方法:多态多【多种】态【状态】:(方法或对象具有多种形态,面向对象的第三大特征,建立于封装、继承之上)一、方法的多态1.重写和重载就体现多态重载:Aa=newA();System.out.print(a.sum(10,30));......
  • Java全栈开发:智慧校园系统设计与实现
    一、项目概述智慧校园系统是一个面向高校师生的综合信息服务平台,采用Java全栈技术开发,包括SpringBoot后端和Vue.js前端,实现了校园信息化和智能化管理。二、系统主要功能模块1.成绩管理模块教师成绩录入与修改学生成绩查询成绩统计分析成绩单导出打印2.校园卡管理校......
  • java基础知识(常用类)
    目录一、包装类(Wrapper) (1)包装类与基本数据的转换 (2)包装类与String类型的转换  (3)Integer类和Character类常用的方法二、String类(1)String类介绍1)String对象用于保存字符串,也就是一组字符序列2)字符串常量对象是用双引号括起的字符序列。例如:"你好"、"12.97"、......