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


    final

    1. 基本介绍

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

    • 修饰类:该类被称为最终类,特点是不能被继承了
    • 修饰方法:该方法被称为最终方法,特点是不能被重写了
    • 修饰变量:该变量只能被赋值一次
    // 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,会报错!
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    2. 注意事项
    • final 修饰基本类型的变量,变量存储的数据不能被改变。
    • final 修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。

    常量

    1. 基本概念

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

    2. 写法规范
    • 通常用全大写的英文单词
    • 多单词之间使用下划线连接
    3. 常量的好处
    • 代码可读性更好,可维护性也更好
    • 程序编译后,常量会被 “宏替换” : 出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接使用字面量的性能是一样的。
    // 源代码
    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    // 下面是源代码编译后,经过反编译,得到的代码
    // 你会发现,常量出现的地方全部会被替换成其记住的字面量了,也就是全部被替换为"小番茄"了
    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("小番茄");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    java计算机毕业设计ssm信息科技知识交流学习平台
    Shell判断:流程控制—if(三)
    【Docker】联合探讨Docker:容器化技术的革命性应用
    java面向对象.day29(内部类)
    iOS动画相关
    PHP的基础知识点解析
    超标量处理器设计 姚永斌 第3章 虚拟存储器 --3.3~3.4 小节摘录
    Qt QImage 图像处理(翻转,灰度,亮度)代码实现
    PyQt5快速开发与实战 9.2 数据库处理
    Linux使用之xshell、xftp保姆教学(含安装包,详细使用方法,连接失败解决方法)
  • 原文地址:https://blog.csdn.net/code_stream/article/details/134488084