博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java之final修饰
阅读量:6276 次
发布时间:2019-06-22

本文共 1679 字,大约阅读时间需要 5 分钟。

hot3.png

Java之final修饰

    final关键字用于修饰类,变量和函数,用于表示它修饰的类,函数和变量不可改变。


    final成员变量

        类Field:必须在静态初始化块中或声明该Field时指定初值。

        实例Field:必须在非静态初始化块,声明该Field或构造器中指定初值。

        已经初始化的实例Field不能再赋值。

public class Test{    final int a = 4;            // 在声明时赋值    final int b;    final static double c;    final static double d = 4.5;// 在声明时赋值    final int e;    {//非静态初始化块        b = 4;                  // final实例Field        c = 5.5;                // 发生错误,类Field不能在非静态初始化块中指定初值    }    static{//静态初始化块        c = 5.5;                // ok                  }}


    final局部变量

        在定义时没有指定默认值,则可以在后面代码中对该final变量赋初始值,但只能一次,不能重复赋值。

public void Test(){    final int a;    a = 6;            // 合法    a = 8;            // 错误,只能一次,不能重复赋值}


    final修饰基本类型变量和引用类型变量的区别

        基本变量:被final修饰的基本变量,它的值不能被改变。

        引用变量:final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全

                        可以改变其内部的Field的值。

class AA{    int t = 222;}public class Test{    public static void main(String[] args){        AA a = new AA();        AA b = new AA();        final AA aa = a;        // 合法        aa.t = 5;        aa = b;                 // 错误    }}


    final的宏替换

        只要满足3个条件,这个final变量就不再是一个变量,而是一个宏替换

            1.使用final修饰。

            2.在定义该final变量时指定了初始值。

            3.该初始值可以在编译时就被确定下来。

final int a = 5;System.out.println(a);     // a不存在,只是替换成System.out.println(5);final int b = 6 * 8;       // 如果被赋的表达式只是基本的算术表达式或字符串连接运算,没有访问                           // 变量,调用方法,Java编译器同样会将这种final变量当成宏变量


    final方法

        final修饰的方法不可被重写


    final类

        final修饰的类不可被继承


    自定义不可变类

        创建自定义不可变类,可遵守以下规则:

            1.使用prviate和final修饰符来修饰该类的Field。

            2.提供带参数的构造器,用于根据传入参数来初始化里的Field。

            3.仅为该类的Field提供getter函数,不要为其提供setter函数,因为普通方法无法修改final修饰的Field。

            4.如有必要,重写Object类的hash和equals函数。

        创建自定义不可变类时,如果包含其Field是可变的,则需要采取必要的措施来保护该Field所引用的对象不

        被修改。

转载于:https://my.oschina.net/Ccx371161810/blog/265144

你可能感兴趣的文章
黑客大赛GeekPwn攻破主流厂商众多产品
查看>>
中国通信业抱团 加快布局5G时代
查看>>
创业公司做数据分析(四)ELK日志系统
查看>>
如何在Linux中压缩及解压缩.bz2文件
查看>>
数据为王的时代 大数据对消费金融的影响
查看>>
万事达启动“用你自己替代密码”计划
查看>>
阿里巴巴“NASA计划”新进展:一个世界纪录!
查看>>
Linux下使用USB网络
查看>>
5G标准化进程提速 射频器件市场空间将打开
查看>>
《分布式系统:概念与设计》一3.3.6 拥塞控制
查看>>
“烧烤模式”下 安防设备如何经得住考验?
查看>>
人工智能时代,语音技术怎么赚钱?
查看>>
美大选被攻击 未来选举要回归纸质选票?
查看>>
SCRM火了,SaaS服务再现新风口
查看>>
黑客站在ATM机面前就直接吐出钞票 如何做到的?
查看>>
TensorFlow教程之资源 4.5 术语表
查看>>
菜鸟网络算法专家朱礼君:为你的淘宝订单选外箱的是人工智能 | CCF-GAIR 2017
查看>>
CMU教授金出武雄演讲:户外机器人系统 | CCF-GAIR 2017
查看>>
未来3年内25G将成数据中心主流网络
查看>>
《云计算:原理与范式》一1.3 云计算的架构与类型
查看>>