参考链接: 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 属性赋值 运行结果
当被问到 final 修饰符,我们通常会随口而出以下3句话: 被 final 修饰的变量被赋初始值后,不能再重新赋值 被 final 修饰的方法不能被重写 被 final 修饰的类不能被继承 仅记住这些..."口诀"是不够的,本文将对 final 的这些功能进行分析 1. final 修饰变量的功能 (1) 被 final 修饰的变量被赋初始值后,不能再重新赋值 被 final 修饰的实例变量必须显示的指定初始值...,其实非final修饰的局部变量也需要显示的赋初始值,只不过被final修饰的局部变量被赋值后就不能重新赋值了。...修饰方法的功能 final修饰方法,用于限制该方法不能被它的子类重写,试图重写final修饰的方法编译就会报错 ?...修饰,编译就会报错,(在Java8之后,匿名内部类访问局部变量,该局部变量可以不用显式的用final修饰,因为java8之后,会默认给匿名内部类要访问的变量用final修饰),实际上,不仅是匿名内部类,
final 实例域可以将实例域定义为 final。对于 final 域来说,构建对象时必须初始化 final 实例域,构造对象之后就不允许改变 final 实例域的值了。...---final 修饰符大都应用于基本(primitive)类型域,或不可变(immutable)类的域(如果类中的每个方法都不会改变其对象,这种类就是不可变的类。...对于可变的类,使用 final 修饰符可能会对读者造成混乱。...如果在定义类的时候使用了 final 修饰符就表明这个类是 final 类。...例如,假设希望阻止人们定义 Executive 类的子类,就可以在定义 Executive 这个类的时候,使用 final 修饰符声明。
final修饰变量 - final修饰变量的时候,表示该变量的值不可改变,成为常量。...基本数据类型的final特征 - final修饰符可以修饰静态变量、实例变量和局部变量,分别表示静态常量、实例常量和局部常量。 - final类型的变量必须显式地初始化,否则将导致编译错误。...- 在定义final常量时,一般以大写字母命名,且多个单词之间使用下划线“_”隔开 解析: 基本数据类型的final,拥有哪些特征呢,final修饰符可以修饰静态变量,可以修饰实例变量...,也可以 修饰局部变量,那么它分别表示静态常量,实例常量,还有局部常量,final类型的变量,必须显式地初始化, 否则将出现编译错误。 ...还有要注意的两点:第一是常量必须要进行初始化,第二final只能被赋值一次,因为他不可以改变,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修饰的局部变量有了清晰的认识
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。...1 final 变量 final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。final 变量能被显式地初始化并且只能初始化一次。...final 修饰符通常和 static 修饰符一起使用来创建类常量。...修饰符声明方法。...修饰符声明的类。
final关键宇可用于修饰类、方法和变量,被它修饰的类、方法和变量不可改变。 final变量 final 成员变量 成员变量是随类初始化或对象初始化而初始化的 。...如果 final 修饰的局部变量在定义时没有指定默认值,则可以在后面代码中对该 final 变量赋初始值,但只能一次,不能重复赋值 ; 如果 final 修饰的局部变量在定义时己经指定默认值,则后面代码中不能再对该变量赋值...; } } final 修饰基本类型变量和引用类型变量的区别 当使用 final 修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变 。...用final修饰的方法的行为在继承期间保持不变,而且不可被重写。...final类 final 修饰的类不可被继承。
修饰符 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修饰的变量也就成了常量了,因为值不会再变了。
参考链接: Java中的可访问和非访问修饰符 1.final 修饰类时表明该类不能被继承,自然类中的方法默认是final型的。 2.final 修饰方法时不允许被子类覆盖,也就是可以被继承。...Final类中的成员变量只要没有添加final修饰都可以照常操作。...} } final在修饰类中成员变量时可以不给初值,但是必须保证在使用前初始化。...这句话翻译过来应该是如果final修饰的变量一旦被赋值,则不允许改变。如果final修饰的变量是对某对象的引用,则该变量会一直指向对象,但是该对象的状态可以改变。...换句话说如果final修饰的是int ,double,byte,char等基本数据类型,一旦赋值不可改变。
每篇一句 穷不练酒,富不占赌 1、概述 这可能是大家的一个共识:如果我们希望这个变量不可变,我们可以用final进行修饰。...但本篇将带你深入了解不变的含义,我相信可以让你更深的了解final的原理,也能记得更牢靠 2、栗子 被final修饰过的变量,只是说栈存储的地址不能再改变,但是却没有说地址指向的内容不能改变。...所以用final修饰,但内容是个对象啥的,然后改变对象属性值,这个不在本文讨论的范围以内。本文想讨论的是,直接就概念final的栈的地址,让它去指向另外一块内存地址。...这里面我解释两个东西: 1、为什么能够撼动final的值? field.getModifiers()&~Modifier.FINAL 这句话就是去掉final。...so,咱们都把它的修饰符干掉,当然可以对Field set值了 所以,java的反射机制直接打破了封装有木有,哈哈哈 2、为什么最终打印的和我们调试的值不一样?
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
实现字符串池 线程安全 实现String可以创建HashCode不可变性 final可以修饰类,方法和变量,并且被修饰的类或方法,被final修饰的类不能被继承,即它不能拥有自己的子类,被final修饰的方法不能被重写..., final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。...在了解final的用途后,在看String为什么要被final修饰:主要是为了”安全性“和”效率“的缘故。...final修饰的String,代表了String的不可继承性,final修饰的char[]代表了被存储的数据不可更改性。...但是:虽然final代表了不可变,但仅仅是引用地址不可变,并不代表了数组本身不会变,。
后来偶然尝试知道了如何关闭这个功能——就是在下次生成变量时,注意变量上方弹出的Tip(提示信息),上面勾选了Declare final选项。...如果点选完弹出的选项,直接用鼠标点到其他位置,是不能触发选项配置修改动作的,下次自动生成变量还会带上final。 此时新的配置就应用上了。下次再自动生成变量就不会添加final修饰符。
一、final 关键字 1. final 用于修饰不可改变的内容 ① 修饰类,被修饰的类不能被继承。 ② 修饰方法,被修饰的方法不能被重写。 ③ 修饰变量,被修饰的变量不能重新赋值。...2. final 的使用 ① 修饰类 * final class 类名{ ··· } ② 修饰方法 * final 返回值类型 方法名( 参数列表 ) { ··· } ③ 修饰变量...* final 数据类型 变量名; 二、权限修饰符 | | 同一个类中 | 同一个包中 | 不同包的子类 | 不同包的无关类 | | public | ✓ | ✓ | ✓ | ✓ | | protected...··· } } } ② 注意 * 局部内部类定义在方法中 * 局部内部类访问的局部变量必须是【有效final】# java 8+ 若变量不改变...,final 可以省略 # * 局部内部内在堆中,局部变量在栈中,方法出栈后,局部变量消失,局部内部类等待 JVM 回收 3.
定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。 可以自己试试,一般的编译器也会提示错误的。
,所以用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
本期介绍 本期主要介绍final关键字&权限修饰符&内部类&引用类型用法 文章目录 1. final关键字 1.1 概述 1.2 使用方式 2....为了避免这种随意改写的情况, Java 提供了 final 关键字, 用于修饰 不可改变 内容。 fifinal : 不可改变。可以用于修饰类、方法和变量。...1.2 使用方式 修饰类 格式如下: 查询 API 发现像 public final class String 、 public final class Math 、 public...final class Scanner 等,很多我们学习过的类,都是被 fifinal 修饰的,目的就是供我们使用,而不让我们所以改变其内 容。...修饰方法 格式如下: 重写被 final 修饰的方法,编译时就会报错。 修饰变量 1.
编译报错:Variable used in lambda expression should be final or effectively final 这句话的意思是,lambda 表达式中使用的变量应该是...变量,但是final并没有声明为final类型,然而代码却能够编译通过。...这是因为 Java8 之后,在匿名类或Lambda表达式中访问的局部变量,如果不是final类型的话,编译器自动加上final修饰符。 即 Java8 新特性:effectively final。...3.2 为何还需要用final修饰? 其实复制变量的方式会造成一个数据不一致的问题。...在执行方法的时候局部变量的值改变了却无法通知匿名内部类的变量,随着程序的运行,就会导致程序运行的结果与预期不同,于是使用final修饰这个变量,使它成为一个常量,这样就保证了数据的一致性。
final修饰类:表示该类不能被继承 final修饰属性:表示该属性必须被赋值一次 final修饰方法:表示该方法可以被子类继承,但是不能被子类重写 1 class A{ 2 final public...int i;//报错 3 //被final修饰的变量叫做常变量(固定不变),必须被赋值且只能赋值一次,哪怕第二次赋值跟第一个赋值一样也不行 4 //不能放在普通方法里赋值,因为可能不会调用这个普通方法
领取专属 10元无门槛券
手把手带您无忧上云