java中为final变量赋值的几种方式

java中为final变量赋值的几种方式

前言

使用final修饰变量,很多人第一时间想到的就是不可变。然后以为变量必须得在声明的时候就为其赋初始值,其实不然,本文将详细讲解java中使用final修改的变量的赋值问题。

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

1、被final修饰的变量有三种赋值方式。
2、被final static修饰的变量有两种赋值方式。

储备知识:在类的加载中,类的加载顺序我们应该都知道,静态代码块->构造代码块->构造方法

精华:

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

被final修饰的变量

1、在定义时直接赋值

public class Test {public final String str = "mark";
}

2、声明时不赋值,在构造方法中进行赋值

public class Test {public final String str;public Test() {this.str = "mark";}
}

3、声明时不赋值,在构造代码块中进行赋值

public class Test {public final String str;{this.str = "mark";}
}

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

被final static修饰的变量

1、在定义时直接赋值

public class Test {public static final String str = "mark";}

2、在静态代码块里面进行赋值

public class Test {public static final String str;static {str = "mark";}
}

final变量会经过jvm进行优化,所以平时使用过程中建议使用final来修饰变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

instanceof 和 对象转型

一、instanceof 判断某个对象是否属于某个类 father1 instanceof Father; // true// 如果有子类继承父类的话 son instanceof Father; // true二、对象转型 子转父 > 自动转(向下转型) 父转子 > 强转(向上转型) 三、Obj…

java类验证和装载顺序_Java JVM类加载顺序详解

首页 > 基础教程 > 基础知识 > JDK&JRE&JVMJava JVM类加载顺序详解JVM加载就是寻找一个类或是一个接口的二进制形式并用该二进制形式来构造代表这个类或是这个接口的class对象的过程,其中类或接口的名称是给定了的。当然名称也可以通过计算得到&am…

从lambda表达式看final关键字

Variable used in lambda expression should be final or effectively final 想必大家在开发java程序的时候应该经常见到。 这是因为在lambda的匿名表达式里需要传入final的对象,那么这是为什么呢? 因为lambda是匿名表达式,它是在新开的一个…

linux中负载值为多少正常_Linux系统中load average平均负载

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:1)它没有在等待I/O操作的结果2)它没有主动进入等待状态(也就是没有调用wait)3)没有被停止(例如:等待终止)英译文:http://blog…

lambda里面赋值局部变量必须是final原因

public class LambdaTest {public static void main(String ... args){int portNumber 1337;Runnable r ()-> {portNumber 1338;System.out.println(portNumber);};r.run();} }如上代码,lambda里面要访问局部变量会报如照片错误: 在介绍为什么会报…

classin安卓手机安装条件_ClassIn上课官方软件下载-ClassIn安卓版本 v3.0.7.1_5577安卓网...

ClassIn上课官方软件下载分享给大家。ClassIn在线互动教室是一对多直播互动教学平台!培养学习能力更强大的学习者!班级群课下互动答疑收发作业!记录学习成长历程,展示学习成果!【软件说明】欢迎使用ClassIn&#xff01…

lambda表达式或者匿名函数中为什么要求外部变量为final

1、参考博客 关于Lambda表达式里面修改外部变量问题JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰 2、匿名内部类 在jdk7之前,匿名内部类访问外部类的局部变量时,那么这个局部变量必须用final修饰符修饰,如下图1所…

location 和 history

Location 对象:封装了浏览器地址栏的 URL 信息 一、hash 返回 URL 中 hash(#后跟零个或者多个字符), 如果不包含, 返回空字符串 # 位置标识符 : 当前页面的位置信息, 比如: 跳转顶部 console.log(location.hash); // ""二、host : 返回服务器名称和端口…

ble芯片 全称_蓝牙芯片都有哪些厂商?一文解答

蓝牙5新标准是蓝牙技术自1999年诞生以来推出的第十个标准版本。其性能上大幅提升,可归结为:更快、更长、更给力,非常适合运用于无线可穿戴、工业和智能家居等领域。但蓝牙技术产品能否真正进人批量生产在于芯片制造技术能否跟得上&#xff0c…

你知道Java中final和static修饰的变量是在什么时候赋值的吗?

开始 一位朋友在群里问了这样一个问题: 本着乐于助人的想法,我当时给出的回答: 后来我总觉得哪里不对劲,仔细翻阅了《Java虚拟机规范》和《深入理解Java虚拟机》这一部分的内容,害!发现自己理解的有问题。…

获取元素大小和位置的方式

一、直接获取元素样式属性值 – element.style.width console.log(div.style.width); // 500px console.log(parseInt(div.style.width)); // 500 console.log(typeof (div.style.width)); // string二、Offset 偏移量 offsetWidth width padding border offsetHeight he…

mybatis 取查询值_MyBatis-SELECT基本查询

1、返回一个LISTselect * from tbl_employee where last_name like #{lastName}2、将查询记录封装为一个Mapselect * from tbl_employee where id#{id}返回一条记录的map;key就是列名,值就是对应的值。3、多条记录封装为一个mapMapKey("id")pu…

ES6 里面的 class

ES5 对象的写法 let x 10,y 20;const obj {x: x,y: y,sum: function () {return this.x this.y;} };ES6 对象的写法 const obj {x,y,sum() {return this.x this.y;} };class 有点类似 java 的 class class Person { // 类名大写// 私有属性和方法 写在 construtor 里面…

normalize函数_Pandas 数据处理(一) —— 几个简单函数掌握!

对于 Pandas, 接触过 Python 数据处理的小伙伴们都应该挺熟悉的,做数据处理不可或缺的一个程序包,最大的特点高效,本篇文章将通过案例介绍一下 Pandas 的一些基础使用!1,读入数据大部分数据都可以用 read_c…

Java Collections.emptyList() 方法的使用及注意事项

Java Collections.emptyList方法的使用及注意事项 一、emptyList() 作用:返回一个空的List(使用前提是不会再对返回的list进行增加和删除操作);好处: 1. new ArrayList()创建时有初始大小,占用内存&#…

git 生成多个patch_详解如何使用git 生成patch 和打入patch

平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用git 生成patch 给到我们,那我们就需要把客户给到patch 打入到我们的project ,基于这样一个场景,我把git 如何生成patch 和如何打入patch 做总结生…

Java集合工具类的一些坑,Arrays.asList()、Collection.toArray()...

Arrays.asList() 使用指南 最近使用Arrays.asList()遇到了一些坑,然后在网上看到这篇文章:Java Array to List Examples 感觉挺不错的,但是还不是特别全面。所以,自己对于这块小知识点进行了简单的总结。 简介 Arrays.asList()…

python saltstack web_saltstack学习-8:web管理页面(halite)

安装halite方法一:失败,待查原因1、安装并启动salt-api yuminstall salt-api –yservice salt-api startchkconfig salt-api on2、安装halite及其依赖文件 yuminstall python-pip –ypipinstall --upgrade pippipinstall -U halitepipinstall cherrypypi…

什么是 NIO? NIO 和 BIO、AIO 之间的区别是什么?NIO主要用来解决什么问题?

1 BIO,NIO,AIO都有什么区别,NIO的原理是什么? BIO BIO:传统的网络通讯模型,就是BIO,同步阻塞IO, 其实就是服务端创建一个ServerSocket, 然后就是客户端用一个Socket去连…

关于页面配色

一、互补色 当两个颜色恰好在色环的两端时,这两个颜色叫做补色。补色搭配能形成强列的对比效果 在线配色工具地址 文字背景色和文字颜色互为补色,文字会很难看清,那么就只使用一种颜色作为主要颜色,其补色用来装点页面 比如&…