精华内容
下载资源
问答
  • 然后以为它只能在申明的时候就必须得赋值,其实不然,本文就重点讲述平时我们用到的final变量的赋值问题。 对被final修饰的变量进行赋值的几种方法 被final修饰的变量,有三种赋值方式。 被final static 修饰的...

    相关阅读

    【小家java】java5新特性(简述十大新特性) 重要一跃
    【小家java】java6新特性(简述十大新特性) 鸡肋升级
    【小家java】java7新特性(简述八大新特性) 不温不火
    【小家java】java8新特性(简述十大新特性) 饱受赞誉
    【小家java】java9新特性(简述十大新特性) 褒贬不一
    【小家java】java10新特性(简述十大新特性) 小步迭代
    【小家java】java11新特性(简述八大新特性) 首个重磅LTS版本


    每篇一句

    开豪车的人都想着换更好的车,开一般车的人总想着怎么省油,这是格局不一样

    前言

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

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

    1. 被final修饰的变量,有三种赋值方式。
    2. 被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中的内存结构后,再频繁使用为佳


    关注A哥

    AuthorA哥(YourBatman)
    个人站点www.yourbatman.cn
    E-mailyourbatman@qq.com
    微 信fsx641385712
    活跃平台
    公众号BAT的乌托邦(ID:BAT-utopia)
    知识星球BAT的乌托邦
    每日文章推荐每日文章推荐

    BAT的乌托邦

    展开全文
  • java中为final变量赋值的几种方式

    千次阅读 多人点赞 2019-04-09 18:48:46
    java中为final变量赋值的几种方式 前言 使用final修饰变量,很多人第一时间想到的就是不可变。然后以为变量必须得在声明的时候就为其赋初始值,其实不然,本文将详细讲解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来修饰变量。

    展开全文
  • java判断反射的Field是不是final修饰

    千次阅读 2019-02-25 18:22:57
    今天调用Field.set方法报错: Caused by: java.lang.IllegalAccessException: Can not set static final long field ...原因是用final修饰了属性,不能赋值,那如何判断呢?...

    今天调用Field.set方法报错:

    Caused by: java.lang.IllegalAccessException: Can not set static final long field com.zdwl.wlj.entity.BzUserPersonal.serialVersionUID to java.lang.Long

    原因是用final修饰了属性,不能赋值,那如何判断呢?

     

    找到了如下的解决方法:

    要引用的包:

    import java.lang.reflect.Field;
    import java.lang.reflect.Modifier;

    判断代码:

    if (Modifier.isFinal(field.getModifiers()))
    	return;

    Modifier是判断反射修饰符的工具类,还有许多其他的静态判断方式:

    展开全文
  • final修饰的字段在运行时被初始化(可以直接赋值,也可以在实例构造器中赋值),一旦赋值便不可更改;static final修饰的字段在Javac时生成ConstantValue属性,在类加载的准备阶段根据ConstantVal

    static修饰的字段在类加载过程中的准备阶段被初始化为0或null等默认值,而后在初始化阶段(触发类构造器)才会被赋予代码中设定的值,如果没有设定值,那么它的值就为默认值。

    final修饰的字段在运行时被初始化(可以直接赋值,也可以在实例构造器中赋值),一旦赋值便不可更改;

    static final修饰的字段在Javac时生成ConstantValue属性,在类加载的准备阶段根据ConstantValue的值为该字段赋值,它没有默认值,必须显式地赋值,否则Javac时会报错。可以理解为在编译期即把结果放入了常量池中。

    展开全文
  • I am iterating an array list in Java 7 loop and Java 8 forEach ... Java 8 loop wants variable inside the loop to be final. For example,List testList = Arrays.asList( "apple", "banana", "cat", "dog" ...
  • Java 对象反射赋值工具类

    千次阅读 2016-06-28 15:01:21
    对象反射赋值
  • javac final变量未赋值检测讲解

    万次阅读 2018-09-19 18:41:01
    前言 我们在前面介绍AssignAnalyzer时,对AssignAnalyzer.letInit(DiagnosticPosition, VarSymbol)方法进行了简单的介绍.本文就举一个案例,来深入理解一下. ... static final int b; public CheckInitError(){...
  • Javafinal修饰符

    千次阅读 2017-09-05 08:46:34
    final修饰符是Java语言中比较常见的一个修饰符,我们经常用的String类就是一个final类。 final的用法主要有以下几种: final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值final可以修饰方法...
  • JavaJava引用赋值是原子操作吗?

    千次阅读 2019-08-14 17:15:10
    某日,工作了 4 年多的 Java 程序员小 K 跳槽,面试时碰到这样一个题目… private long b = 0; public void set1() { b = 0; } public void set2() { b = -1; } public void check() { System.out....
  • java final static

    2019-04-18 11:28:00
    全局变量是有默认值的,所以如果用final修饰全局变量,能在定义的同时赋值,或在构造函数中赋值(注意,其他方法不能给final全局变量赋值,会报错) 局部变量不会默认赋值,因此如果用final修饰,可以初始化一次 ...
  • Java final关键字详解

    2012-07-07 16:27:13
    java中,final关键字可以有如下的用处: [list=1] [*]final关键字可以被加到类的声明中,final类是不允许继承的; [*]final关键字可以被加到方法声明中,final方法是不允许重写的(override),这个效果同私有...
  • java final相关总结

    2013-10-24 18:47:09
    1、final类不能在派生子类。即:不能被继承。 2、final方法不能被重写,但可以重载。 3、final变量一经赋值就不能更改。可以用来定义常量:final int num=999;
  • java final 关键字

    千次阅读 2013-05-23 11:38:47
    根据上下文环境,java的关键字final也存在着细微的区别,但通常指的是“这是无法改变的。”不想改变的理由由两种:一种是效率,另一种是设计。由于两个原因相差很远,所以关键子final可能被吴用。  接下来介绍...
  • Java并发关键字-final

    千次阅读 多人点赞 2019-10-06 18:52:10
    文章目录final的简介final的具体使用场景变量final成员变量final局部变量方法类final关键字举例多线程中你真的了解finalfinal域重排序规则final域为基本类型final域为引用类型final的实现原理为什么final引用不能...
  • java-final关键字

    2018-06-19 13:35:50
    Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)  final会告诉编译器,这个数据是不会修改的,那么编译器就可能会在编译时期就对该数据进行替换甚至执行计算,这样可以对我们的程序起...
  • Java变量声明和赋值

    2018-10-25 22:57:00
    Java的8种基础类型变量声明,在得到Java 11支持后会有新的语法糖 基础数据类型一共有8种 整数类型:byte、short、int和long 小数类型:float和double 字符类型:char 布尔类型:bool byte:Java中最小的...
  • 关于Java语言中的final关键字: final是一个关键字,表示最终的,不变的 final修饰的类无法被类继承 final修饰的方法无法被覆盖 final修饰的变量“一旦”赋值之后不可重新赋值【不可二次赋值final修饰的实例变量...
  • Java中的final关键字

    2017-10-12 07:02:12
    定义final的作用:  1. final类不能被继承,没有... 3.final成员变量表示常量,只能被赋值一次,赋值后值不再改变。  final的好处:  1.final方法可以告诉编译器对于final方法的调用不需要动态的绑定,这会
  • javafinal修饰符

    2020-10-22 21:38:34
    final可以修饰变量,被 final修饰的变量被赋初始值之后,不能对它重新赋值final可以修饰方法,被 final修饰的方法不能被重写。 final可以修饰类,被 final修饰的类不能派生子类。 被 final修饰的实例变量必须...
  • Javafinal关键字

    2020-03-27 15:20:12
    针对Java语言中的final关键字,想必都不陌生了。本来主要是来对final做关键字做一个总结。 final关键字用法 1. 修饰类 修饰类当用final去修饰一个类的时候,表示这个类不能被继承。 注意: a. 被final修饰的类,...
  • Java基础之final

    2018-07-22 14:39:50
    finaljava中常见的关键字之一,从字面意思来看,使用final修饰的内容通常都是确定好的内容,不需要再改变值。我们从final可以修饰的对象来了解final。 1.final修饰变量 final可以修饰成员变量和局部变量,但是...
  • JAVA-final

    2019-11-15 17:18:55
    s1是用直接量赋值, s2是两个字符串连接赋值; 由于编译器编译阶段就确定了s2的值 = “疯狂 Java”;所以会让s2指向常量池缓存中的“疯狂 Java”字符串,故s2 == s1; 而st3 是不能再编译阶段确定的,故st3不指向...
  • static:静态的 1。static修饰成员变量(类本身) (1)。修饰成员变量,这个变量就不属于对象了,而属于类本身,...final修饰的类不能被继承。提高安全性,提高程序可读性。 如:String类、System类、StringBuffer
  • final关键字可以用于修饰类,变量和方法。...final修饰的变量不可被改变,一旦获得初始值,该final变量的值就不能被重新赋值。 final成员变量:成员变量是随类初始化或对象初始化而设计的。必须由程序员显示...
  • javafinal关键字

    2016-04-20 23:51:52
    关键字final通常指“这是无法改变的。...这些常量必须是基本类型,并且以关键字final表示,在对常量进行定义时,必须对其进行赋值。主要应用在:  1、永不改变的编译时常量。  2、在运行时被初始化的值,并且不希望
  • 根据上下文环境,Java的关键字final的含义存在着细微的区别,但通常它指的是“这是无法改变的。”不想做改变可能出于两种理由:设计或效率。由于这两个原因相差很远,所以关键字final有可能被误用。以下几节谈论了...
  • Java中的final

    2019-10-27 13:36:09
    final
  • java实现赋值Excel模板并写入后导出

    万次阅读 热门讨论 2016-10-02 22:02:19
    遇到复杂的表头excel导出,我们该怎么办呢?  package ... import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import j

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,135
精华内容 42,454
关键字:

finaljava判断是否赋值

java 订阅