首页
学习
活动
专区
工具
TVP
发布

详解 final 修饰符

当被问到 final 修饰符,我们通常会随口而出以下3句话: 被 final 修饰的变量被赋初始值后,不能再重新赋值 被 final 修饰的方法不能被重写 被 final 修饰的类不能被继承 仅记住这些..."口诀"是不够的,本文将对 final 的这些功能进行分析 1. final 修饰变量的功能 (1) 被 final 修饰的变量被赋初始值后,不能再重新赋值 被 final 修饰的实例变量必须显示的指定初始值...,而且只能在以下3个位置指定初始值: 定义final实例变量时指定初始值 在非静态代码块中为final实例变量指定初始值 在构造器中为final实例变量指定初始值 看如下代码: public class...即使是普通内部类,在其中访问局部变量,该局部变量都需要显式的或者隐式的(Java8之后)用final修饰 需要注意的是,我们说内部类访问局部变量,需要给该变量加final修饰符,这里的内部类指的是局部内部类...修饰符修饰

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

final修饰符的作用

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

24420

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

一、static修饰符 1.1、static变量         在类中,使用static修饰的成员变量,就是静态变量,反之为非静态变量。         ...修饰符 2.1、修饰类         用final修饰的类不能被继承,没有子类。         ...我们也可以定义final修饰的类: 1 public final class Action{ 2 3 } 4...abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。  ...这部分是方法的实现,如果大括号中什么都没写,就叫方法的空实现           声明类的同时,加上abstract修饰符就是抽象类  声明方法的时候,加上abstract修饰符,并且去掉方法的大口号

61250

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

final关键宇可用于修饰类、方法和变量,被它修饰的类、方法和变量不可改变。 final变量 final 成员变量 成员变量是随类初始化或对象初始化而初始化的 。...final String str; final int c; final static double d ; //既没有指定默认值 ,又没有在初始化块、构造器中指定初始值...如果 final 修饰的局部变量在定义时没有指定默认值,则可以在后面代码中对该 final 变量赋初始值,但只能一次,不能重复赋值 ; 如果 final 修饰的局部变量在定义时己经指定默认值,则后面代码中不能再对该变量赋值...finalfinal 修饰的类不可被继承。...使用 private 和 final 修饰符来修饰该类的成员变量。 提供带参数构造器,用于根据传入参数来初始化类里的成员变量 。

43240

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

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

24130

final

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

23310

java学习之路:27.final变量,final方法,final

1.final变量 final关键字可用于变量声明,一旦改变了被设定,就不可以再改变该变量的值。通常,由final定义的变量为常量。...final关键字定义的变量必须在声明时对其进行赋值操作,final除了可以修饰基本数组类型的常量,还可以修饰对象引用。...final double PI = 3.14; final Test test = new Test(); final int[] a ={1,2,3,4,5,6}; 一旦一个对象引用被修饰为final...2.final方法 final的方法不能被重写。 一个定义为private的方法隐式被指定为final类型。...3.final类 定义为final的类不能被继承,如果将某个类设置为final形式,则类中的所有方法都被隐式的设置为final形式,但是final类中的成员变量可以被定义为final或者非final形式

1K41

Variable used in lambda expression should be final or effectively final

意思 : ambda表达式中使用的变量应该是final或者有效的final,也就是说,lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量...,这是因为 Java 8 之后,在匿名类或 Lambda 表达式中访问的局部变量,如果不是 final 类型的话,编译器自动加上 final 修饰符,即Java8新特性:effectively final...但从 Java 8 开始,我们可以不加 final 修饰符,由系统默认添加,当然这在 Java 8 以前的版本是不允许的。Java 将这个功能称为 Effectively final 功能。 ...可以在匿名内部类中直接使用非 final 变量,而 final 修饰的局部变量不能在被重新赋值  也就是说从 Java 8 开始,它不要求程序员必须将访问的局部变量显式的声明为 final 的。...总结一下,规则没有改变,Lambda 表达式和匿名内部类访问的局部变量必须是 final 的,只是不需要程序员显式的声明变量为 final 的,从而节省时间。

23550

java修饰符

一、访问修饰符 1.1 private访问控制符 当前类访问权限 如果一个成员方法或成员变量名前 使用了 private 访问控制符,那么这个成员只能在这个类的内部使用。...二、非访问修饰符 2.1 static修饰符 用来修饰类方法和类变量。static的真正作用就是用于区分Field、方法、内部类、初始化块这四种成员到底属于类本身还是属于实例。...所以静态成员不能直接访问 2.2 final修饰符 意思是最终的、不可修改的,最见不得变化,用来修饰类、方法和变量 2.2.1特点 final修饰的类不能被继承,final类中的所有成员方法都会被隐式地指定为...final方法; final修饰的方法不能被重写; final修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象...2.3 abstract修饰符 abstract 修饰符,用来创建抽象类和抽象方法。

35850
领券