【小家java】java中为final变量赋值的几种方式

简介: 【小家java】java中为final变量赋值的几种方式

前言


final修饰的变量,很多人第一印象就是不可变三个字。然后以为它只能在申明的时候就必须得赋值,其实不然,本文就重点讲述平时我们用到的final变量的赋值问题。


对被final修饰的变量进行赋值的几种方法



1.被final修饰的变量,有三种赋值方式。


被final static 修饰的变量,有两种赋值方式


在讲解之前,希望读者对静态代码块、构造代码块、构造方法的执行顺序了解清楚。【小家java】类中静态代码块、构造代码块、静态变量执行顺序和继承逻辑

和对final修饰的变量的内存特点有所了解。【小家java】final修饰的变量真的不可变吗?


精华部分:


当类被加载进内存的时候,这个属性并没有给其分配内存空间,而只是定义了一个变量,只有当类被实例化的时候这个属性才被分配内存空间,而实例化的时候同时执行了构造函数,所以属性被初始化了,也就符合了当它被分配内存空间的时候就需要初始化,以后不再改变的条件。


先看第一种情况的变量


被final修饰的变量:三种赋值方式


1.在定义时直接赋值。


2.声明时不赋值,在constructor中赋值(最常用的方式)


3.声明时不赋值,在构造代码块中赋值


如果一个非final成员变量在定义的时候没有赋值,那么它只可能在构造函数里被赋值了(不考虑构造代码块的情况) 这个特性在JDK以及Spring中都有大量的应用


private final int finalVal = 10;


/

private final int finalVal;
    Demo (int val){
        this.finalVal = val;
    }


private final int finalVal;
    {
        this.finalVal = 10;
    }


备注:在看Spring源码的时候,我们会经常看到它定义的final变量,然后对外提供构造函数给与赋值的设计模式。


我们得出结论:当你发现一个类的变量被final修饰但没被赋值,那么可以判断出它肯定会在构造函数里被赋值。(因为倘若是set方法赋值,现在是不安全的,因为set方法可以被调用多次,而final变量只能被赋值一次)


被final static修饰的变量:两种赋值方式


1.在定义时直接赋值.


2.在静态代码块里赋值


最后


final变量会经过JVM进行优化处理,所以平时使用过程中建议使用final变量。但更建议读者先重点了解下final变量在JVM中的内存结构后,再频繁使用为佳


相关文章
|
18天前
|
Java
Java 变量命名规则
4月更文挑战第6天
|
1月前
|
存储 Java 测试技术
滚雪球学Java(08):深入理解Java变量、常量及其作用域
【2月更文挑战第14天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
93 0
|
1月前
|
存储 Java 开发者
Java变量命名规则
Java变量命名规则
18 0
|
1月前
|
存储 Java 程序员
Java变量类型
Java变量类型
13 0
|
1月前
|
存储 Oracle Java
【详识JAVA语言】数据类型与变量
【详识JAVA语言】数据类型与变量
44 1
【详识JAVA语言】数据类型与变量
|
2天前
|
存储 Java 测试技术
一文搞清楚Java中的方法、常量、变量、参数
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:**常量与变量**,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。
14 0
|
3天前
|
存储 Java
JAVA变量类型
JAVA变量类型
11 0
|
1月前
|
存储 Java C语言
【Java】以数组为例简单理解引用类型变量
【Java】以数组为例简单理解引用类型变量
15 1
|
1月前
|
自然语言处理 Java
这是什么操作?java中的变量竟然可以先使用后声明?
这是什么操作?java中的变量竟然可以先使用后声明?
14 0
|
1月前
|
存储 安全 Java
Java变量类型
Java变量类型
8 0