首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

详解 final 修饰符

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

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

    final修饰符的作用

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

    28520

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

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

    68650

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

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

    46340

    Java中final关键字与权限修饰符

    一、final简介 1、含义 不可改变的,最终的 2、常见的四种用法 ①修饰一个类; ②修饰一个方法; ③修饰一个局部变量; ④修饰一个成员变量; 二、final使用 1、修饰一个类 格式: 修饰符 final...2、修饰一个方法 格式: 修饰符 final 返回值类型 方法名(){ //…… } 含义: final修饰的方法不能被其子类重写。 abstract与final不能同时使用。...3、修饰一个局部变量 格式: final 数据类型 变量名 = 变量值; 含义: final修饰的变量为常量,不可改变(基本数据类型的数值不可改变,引用数据类型的地址值不可改变); 引用数据类型的地址值不可改变...修饰的基本数据类型变量值不可改变 //备注:final修饰的引用数据类型地址值不可改变 } } 4、修饰一个成员变量 格式: final 数据类型 变量名 = 变量值; 说明:...; ④通过构造方法赋值注意:所有的构造(包括无参构造)都要保证能对final修饰的成员变量进行赋值; 三、权限修饰符

    10910

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

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

    28030

    final

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

    26310

    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形式

    1.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 的,从而节省时间。

    66650

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券