04_面向对象高级_final与常量

final

1. 基本介绍

final 关键字是最终的意思,可以修饰(类、方法、变量)

  • 修饰类:该类被称为最终类,特点是不能被继承了
  • 修饰方法:该方法被称为最终方法,特点是不能被重写了
  • 修饰变量:该变量只能被赋值一次
java 复制代码
// 1. final修饰类:类不能被继承了
// 一般情况很少用,但在写工具类时可能会用得比较多,因为工具类只想给你使用工具,不想被你继承
final class A {
}
//class B extends A{}  // 报错


// 2. final修饰方法:方法不能被重写了
class C {
    public final void test() {

    }
}

public class HelloWorld {
    /**
     * 常量:public static final 修饰的成员变量,建议名称全部大写,多个单词下划线连接
     */
    public static final String THIS_NAME = "常量";  // 3. final修饰变量:有且仅能赋值一次

    public final String name = "毫无意义";  // 这种用法没有意义,同一个内容,随着对象的增加占用多份内存,又无法修改

    public static void main(String[] args) {

        // 3. final修饰变量:有且仅能赋值一次
        final double pi = 3.1415926;
        final int a;
        a = 10;  // 第一次赋值
//      a = 99;  // 第二次赋值,报错

    }

    // 3. final修饰变量:有且仅能赋值一次
    public static void buy(final int y) {
//      y = 10;  // 在形参中加final,意味着形参不能修改了,所以这里想将y改成10,会报错!
    }
}
2. 注意事项
  • final 修饰基本类型的变量,变量存储的数据不能被改变。
  • final 修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。

常量

1. 基本概念

使用了 static final 修饰的成员变量,就被称为常量;其作用,通常是用于记录系统的配置信息

2. 写法规范
  • 通常用全大写的英文单词
  • 多单词之间使用下划线连接
3. 常量的好处
  • 代码可读性更好,可维护性也更好
  • 程序编译后,常量会被 "宏替换" : 出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接使用字面量的性能是一样的。
java 复制代码
// 源代码
public class HelloWorld {

    public static final String THIS_NAME = "小番茄";  // 常量

    public static void main(String[] args) {
        System.out.println(THIS_NAME);
        System.out.println(THIS_NAME);
        System.out.println(THIS_NAME);
    }
}
java 复制代码
// 下面是源代码编译后,经过反编译,得到的代码
// 你会发现,常量出现的地方全部会被替换成其记住的字面量了,也就是全部被替换为"小番茄"了
public class HelloWorld {
    public static final String THIS_NAME = "小番茄";

    public HelloWorld() {
    }

    public static void main(String[] args) {
        System.out.println("小番茄");
        System.out.println("小番茄");
        System.out.println("小番茄");
    }
}
相关推荐
guodingdingh17 小时前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯19 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育19 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵19 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔20 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
碎光拾影21 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Miao121311 天前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔1 天前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
CRMEB系统商城1 天前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience1 天前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu