学习
实践
活动
工具
TVP
写文章

java final 修饰变量_final关键字修饰变量

参考链接: Java final关键字 Java中被final修饰的变量为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。如果再次对该变量进行赋值,则程序会在编译时报错。 public class Example {  public static void main(String[] args) {  final int num = 100;  num = 4;  }   原因在于变量num 被final修饰。由此可见,被final修饰的变量为常量,它只能被赋值一次,其值不可改变。  被final关键字修饰的变量为局部变量。 这是因为使用final关键字修饰成员变量时,虚拟机不会对其进行初始化。 因此使用final修饰成员变量时,需要在定义变量的同时赋予一个初始值,下面将第2行代码修改为:final String name="小海绵"; //为final 关键字修饰的name 属性赋值  运行结果

18720

详解 final 修饰

当被问到 final 修饰符,我们通常会随口而出以下3句话: 被 final 修饰的变量被赋初始值后,不能再重新赋值 被 final 修饰的方法不能被重写 被 final 修饰的类不能被继承 仅记住这些 "口诀"是不够的,本文将对 final 的这些功能进行分析 1. final 修饰变量的功能 (1) 被 final 修饰的变量被赋初始值后,不能再重新赋值 被 final 修饰的实例变量必须显示的指定初始值 ,其实非final修饰的局部变量也需要显示的赋初始值,只不过被final修饰的局部变量被赋值后就不能重新赋值了。 修饰方法的功能 final修饰方法,用于限制该方法不能被它的子类重写,试图重写final修饰的方法编译就会报错 ? 修饰,编译就会报错,(在Java8之后,匿名内部类访问局部变量,该局部变量可以不用显式的用final修饰,因为java8之后,会默认给匿名内部类要访问的变量用final修饰),实际上,不仅是匿名内部类,

31740
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    局部变量修饰final

    如果我们尝试将被修饰final的对象重新赋值,编译器就会报错 这么简单的一个关键字,怎么需要强制修饰一个局部变量 局部变量 class文件 public static void main(String name = "Whoops bug"; int pluginType = 3;} 两个方法一个局部变量修饰final,一个不修饰final 通过javap查看字节码 public static 修饰是纯编译时信息,到Class文件里就已经没有踪迹了,JVM根本不会知道方法参数或者局部变量有没有被final修饰 曾经的阿里巴巴规范提出: 推荐】final可提高程序响应效率,声明成final的情况 x = 0; } else { x = 3; } System.err.println(x); } 修饰final是为了解决正确性 //name = "Whoops bug";} 如果switch遗漏了break,或者switch完整的,在外面给final变量再次赋值,编译器就会报错 类变量 对于final修饰的局部变量有了清晰的认识

    75320

    final修饰符的作用

    final修饰变量 - final修饰变量的时候,表示该变量的值不可改变,成为常量。 基本数据类型的final特征 - final修饰符可以修饰静态变量、实例变量和局部变量,分别表示静态常量、实例常量和局部常量。 - final类型的变量必须显式地初始化,否则将导致编译错误。 - 在定义final常量时,一般以大写字母命名,且多个单词之间使用下划线“_”隔开  解析:         基本数据类型的final,拥有哪些特征呢,final修饰符可以修饰静态变量,可以修饰实例变量 ,也可以     修饰局部变量,那么它分别表示静态常量,实例常量,还有局部常量,final类型的变量,必须显式地初始化,     否则将出现编译错误。     还有要注意的两点:第一是常量必须要进行初始化,第二final只能被赋值一次,因为他不可以改变,final     修饰的常量不允许改变。

    7320

    Java修饰final小笔记

    final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。 1 final 变量 final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。final 变量能被显式地初始化并且只能初始化一次。 final 修饰符通常和 static 修饰符一起使用来创建类常量。 修饰符声明方法。 修饰符声明的类。

    9720

    Java Review (十二、面向对象----final 修饰符)

    final关键宇可用于修饰类、方法和变量,被它修饰的类、方法和变量不可改变。 final变量 final 成员变量 成员变量是随类初始化或对象初始化而初始化的 。 如果 final 修饰的局部变量在定义时没有指定默认值,则可以在后面代码中对该 final 变量赋初始值,但只能一次,不能重复赋值 ; 如果 final 修饰的局部变量在定义时己经指定默认值,则后面代码中不能再对该变量赋值 ; } } final 修饰基本类型变量和引用类型变量的区别 当使用 final 修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变 。 用final修饰的方法的行为在继承期间保持不变,而且不可被重写。 finalfinal 修饰的类不可被继承。

    18840

    JavaSE(三)之static、final、abstract修饰

    修饰符 2.1、修饰类         用final修饰的类不能被继承,没有子类。          我们也可以定义final修饰的类: 1 public final class Action{ 2 3 } 4          用final修饰的方法可以被继承,但是不能被子类的重写。          我们也可以定义final修饰的方法:      1 public class Person{ 2 public final void print(){} 3          用final修饰的变量表示常量,只能被赋一次值.其实使用final修饰的变量也就成了常量了,因为值不会再变了。

    34450

    java中的修饰final和static

    参考链接: Java中的可访问和非访问修饰符 1.final 修饰类时表明该类不能被继承,自然类中的方法默认是final型的。  2.final 修饰方法时不允许被子类覆盖,也就是可以被继承。 Final类中的成员变量只要没有添加final修饰都可以照常操作。 } }  final修饰类中成员变量时可以不给初值,但是必须保证在使用前初始化。 这句话翻译过来应该是如果final修饰的变量一旦被赋值,则不允许改变。如果final修饰的变量是对某对象的引用,则该变量会一直指向对象,但是该对象的状态可以改变。 换句话说如果final修饰的是int ,double,byte,char等基本数据类型,一旦赋值不可改变。

    18500

    【小家java】final修饰的变量真的不可变吗?

    每篇一句 穷不练酒,富不占赌 1、概述 这可能是大家的一个共识:如果我们希望这个变量不可变,我们可以用final进行修饰。 但本篇将带你深入了解不变的含义,我相信可以让你更深的了解final的原理,也能记得更牢靠 2、栗子 被final修饰过的变量,只是说栈存储的地址不能再改变,但是却没有说地址指向的内容不能改变。 所以用final修饰,但内容是个对象啥的,然后改变对象属性值,这个不在本文讨论的范围以内。本文想讨论的是,直接就概念final的栈的地址,让它去指向另外一块内存地址。 这里面我解释两个东西: 1、为什么能够撼动final的值? field.getModifiers()&~Modifier.FINAL 这句话就是去掉final。 so,咱们都把它的修饰符干掉,当然可以对Field set值了 所以,java的反射机制直接打破了封装有木有,哈哈哈 2、为什么最终打印的和我们调试的值不一样?

    44320

    每日一问:Final,Static,Volatile修饰变量加载顺序

    com.kk; /** * @author zhaokk * @create 2020-01-09-19:28 */ public class Price { public static final bin\javap.exe -c com.kk.Price Compiled from "Price.java" public class com.kk.Price { public static final 那么final修饰呢? private static final int staticPrice 结果就是7了呢? final会在字节码中打上ACC_FINAL标签,在运行时会进行处理和优化,使变量直接等于指,并且与构造函数一起赋值, 那么加volatile呢? com.kk.Price INSTANCE; descriptor: Lcom/kk/Price; flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL

    69610

    【美团一面】为什么用final修饰String

    实现字符串池 线程安全 实现String可以创建HashCode不可变性 final可以修饰类,方法和变量,并且被修饰的类或方法,被final修饰的类不能被继承,即它不能拥有自己的子类,被final修饰的方法不能被重写 , final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。 在了解final的用途后,在看String为什么要被final修饰:主要是为了”安全性“和”效率“的缘故。 final修饰的String,代表了String的不可继承性,final修饰的char[]代表了被存储的数据不可更改性。 但是:虽然final代表了不可变,但仅仅是引用地址不可变,并不代表了数组本身不会变,。

    7710

    关闭Idea自动生成变量时添加的final修饰

    后来偶然尝试知道了如何关闭这个功能——就是在下次生成变量时,注意变量上方弹出的Tip(提示信息),上面勾选了Declare final选项。 如果点选完弹出的选项,直接用鼠标点到其他位置,是不能触发选项配置修改动作的,下次自动生成变量还会带上final。 此时新的配置就应用上了。下次再自动生成变量就不会添加final修饰符。

    1.7K30

    【美团一面】为什么用final修饰String

    实现字符串池 线程安全 实现String可以创建HashCode不可变性 final可以修饰类,方法和变量,并且被修饰的类或方法,被final修饰的类不能被继承,即它不能拥有自己的子类,被final修饰的方法不能被重写 , final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。 在了解final的用途后,在看String为什么要被final修饰:主要是为了”安全性“和”效率“的缘故。 final修饰的String,代表了String的不可继承性,final修饰的char[]代表了被存储的数据不可更改性。 但是:虽然final代表了不可变,但仅仅是引用地址不可变,并不代表了数组本身不会变,。

    35621

    【Java_10】final 关键字、权限修饰符、内部类

    一、final 关键字 1. final 用于修饰不可改变的内容 ① 修饰类,被修饰的类不能被继承。 ② 修饰方法,被修饰的方法不能被重写。 ③ 修饰变量,被修饰的变量不能重新赋值。 2. final 的使用 ① 修饰类 * final class 类名{ ··· } ② 修饰方法 * final 返回值类型 方法名( 参数列表 ) { ··· } ③ 修饰变量 * final 数据类型 变量名; 二、权限修饰符 | | 同一个类中 | 同一个包中 | 不同包的子类 | 不同包的无关类 | | public | ✓ | ✓ | ✓ | ✓ | | protected ··· } } } ② 注意 * 局部内部类定义在方法中 * 局部内部类访问的局部变量必须是【有效final】# java 8+ 若变量不改变 ,final 可以省略 # * 局部内部内在堆中,局部变量在栈中,方法出栈后,局部变量消失,局部内部类等待 JVM 回收 3.

    14230

    常见Java面试题 抽象类能使用 final 修饰吗?

    定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。 可以自己试试,一般的编译器也会提示错误的。

    4710

    深入理解Java-final关键字1 修饰属性或者变量2 修饰方法3 修饰类4 final关键字的好处5 不可变类6其他重要知识点

    ,所以用final修饰引用类型变量指的是它里面的地址不能变,即它只能指向初始时指向的那个对象,而不关心指向的对象内容的变化 所以修饰的变量必须被初始化 public static final String 构造方法中,但静态final实例变量不可以在其中 final变量是只读的 2 修饰方法 该方法可被继承,但不许被任何子类重写 当调用final方法时,直接将方法主体插入到调用处,而不是进行方法调用,这样能提高程序效率 "cheap personal loan"; //compilation error: overridden method is final } } 3 修饰类 使用final修饰的类叫作final final修饰 final class PersonalLoan{ } class CheapPersonalLoan extends PersonalLoan{ //compilation error : cannot inherit from final class } 一个类不可同时被abstract和final修饰 思考一个有趣的现象: byte b1=1; byte b2=3; byte

    60760

    final

    final修饰类:表示该类不能被继承 final修饰属性:表示该属性必须被赋值一次 final修饰方法:表示该方法可以被子类继承,但是不能被子类重写 1 class A{ 2 final public int i;//报错 3 //被final修饰的变量叫做常变量(固定不变),必须被赋值且只能赋值一次,哪怕第二次赋值跟第一个赋值一样也不行 4 //不能放在普通方法里赋值,因为可能不会调用这个普通方法

    21020

    final

    final修饰的类不可以被继承,但可以继承其他的类。 final修饰的方法,子类可以继承但是不能重写。 子类重写父类的非final方法可以加上final。 被final修饰的基本数据类型或者String类型的变量可以看作是常量,赋值后不能改变。 被final修饰的引用数据类型变量的引用内存地址值不能改变,可以改变引用数据类型变量的属性值。 被final修饰的普通成员变量必须在对象创建完成前进行赋值,可以直接赋值,如果没有直接赋值则需要用构造方法进行赋值,如果有多个构造方法则多个构造方法都要为其赋值,但是不能用set方法赋值。 被final修饰的静态成员变量必须要直接赋值或者静态代码块赋值,否则编译不通过。 final修饰的成员变量会在编译阶段赋默认值,final固定的是成员变量的手动赋值不是内存中的默认值。 Q.E.D.

    6510

    扫码关注腾讯云开发者

    领取腾讯云代金券