精华内容
下载资源
问答
  • java中被final修饰的类
    千次阅读
    2020-11-19 16:49:28

    我们知道,被final修饰符修饰的变量在构造器初始化之后就不能再进行修改。
    对于可变的类,如果使用final修饰符修饰后容易对读者造成误解。例如:
    private final StringBuilder evaluations
    那么我们还可以对他进行修改吗?当然可以,final关键字表示的是存储在evaluations中的对象引用不会被修改,不可以再指向其他的StringBuilder,但是他的一些更改器方法依旧可以使用,例如append()

    更多相关内容
  • Java中final关键字的用法总结1、final修饰类被final修饰的类不能被继承,因此final类的成员方法也不能被覆写,被final关键字修饰的类没有子类,因此类的实现细节也无法改变,无法被扩展。final类的所有成员方法...

    Java中final关键字的用法总结

    1、final修饰类被final修饰的类不能被继承,因此final类的成员方法也不能被覆写,被final关键字修饰的类没有子类,因此类的实现细节也无法改变,无法被扩展。final类中的所有成员方法都会被隐式地指定为final方法,final类中的成员变量可以根据需要设为final。

    2、final修饰方法一个类中的方法如果被final关键字修饰,则其子类无法覆写该方法,只能被子类继承。如果父类中的某个方法不想被其子类所覆写,可将该方法定义为final类型,另外,父类中的私有方法(即被private关键字修饰的方法)也不允许被子类所覆写,所以父类中被private关键字修饰的方法默认为final类型,被final关键字修饰的方法有如下特质:

    该方法被锁定,可以防止任何继承类修改它的意义和实现;

    高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率;

    另外,使用final修饰的静态方法在其所属类的子类中不能被隐藏(hide);

    3、final修饰变量final这个关键字的含义是“这是无法改变的”或者“终态的”;

    那么为什么要阻止改变呢?

    java语言的发明者可能由于两个目的而阻止改变:

    A.效率问题:

    jdk中的某些类的某些方法,是不允许被用户覆盖的,设计者可能认为,所用方法已经是最好的方法,

    用户私自覆盖,或是由于疏忽而覆盖,就会影响JVM或是系统的系能;

    B.设计所需:

    众所周知,有些情况必须使用final关键字,比如方法中的匿名内部类的参数传递。

    有人说final变量在赋值后就不可变,

    那么这个不变到底指的是什么呢?

    这个不变指的是引用,是地址,而所引用的对象的内容仍然是可变的。

    就是说,这个final变量永远指向某个对象,是一个常量指针,而不是指向常量的指针。

    (1)被final关键字修饰的基本数据类型,则其数值一旦在初始化之后便不能更改;

    (2)如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,但该引用所指向的对象的内容是可以发生变化的。原因为:引用数据类型存储的引用对象在堆内存中的地址,final修饰引用类型之后,要求该引用指向的堆内存空间(或者说该引用存储的堆内存地址)不能改变。

    当用final修饰类的非静态成员变量时,成员变量的初始化有两种方式:

    (3)在声明时进行初始化

    (4)在声明变量时可以不进行初始化,该变量被称为blank final,即final空白,但是要在这个变量所在的类的所有的构造方法中对这个变量赋初值。

    当用final修饰类的静态成员变量时,静态成员变量的初始化方式也有两种:

    (5)在声明时进行初始化

    (6)在静态初始化块中进行初始化

    当用final修饰接口的静态变量时,其初始化方式只有一种:

    (7)在声明时进行初始化

    当用final修饰局部成员变量时,只需要保证在使用之前被初始化赋值即可。

    总之,被final关键字修饰的变量在声明时可以不进行初始化,但必须保证该变量在使用之前被初始化,一旦被初始化赋值之后,就不能再被重新赋值了。试分析一下程序的输出结果:

    public class Test {

    public static void main(String[] args) {

    String a = "hello2";

    final String b = "hello";

    String d = "hello";

    String c = b + 2;

    String e = d + 2;

    System.out.println((a == c));

    System.out.println((a == e));

    }

    }

    4、final修饰参数当方法参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。该变量在方法调用时被创建,同时初始化为对应实参值,在方法体(body)执行结束前,其值不能改变。用final关键字修饰的基本数据类型的参数,其参数值无法改变,用final关键字修饰的引用数据类型,无法是该引用指向其他对象或再次赋值为null,但可以使用该引用改变引用对象的内容。final用于修饰参数的目的并非防止在调用的方法内部对参数的操作改变方法外部对应变量的值,只是防止在该方法内对该参数进行重新赋值操作,影响该参数传递时的初始值。而且将方法中的参数用final关键字修饰并不能防止从方法外部所传递的参数的值的内容不被改变。具体可参考final修饰引用数据类型的解释。相关阅读:

    win7 64位旗舰版系统运行游戏提示计算机丢失mxvcp120.dll的解决方法

    JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码

    JS组件Bootstrap实现下拉菜单效果代码

    php自定义函数截取汉字长度

    jquery ajax局部加载方法详解(实现代码)

    几个解决兼容IE6\7\8不支持html5标签的几个方法

    php无限遍历目录示例

    HTML中使用SVG与SVG预定义形状元素介绍

    Win8.1升级Win10用户:开始屏幕设计不进反退

    轮播的简单实现方法

    MySQL高可用MMM方案安装部署分享

    苹果Mac系统么安装Windows10?

    Windows 10开始菜单变化一览 经典功能再升级

    Win8系统怎么更新无线网卡驱动 Win8系统更新无线网卡驱动的方法图解

    展开全文
  • final关键字修饰的方法是不能的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。 注:的private方法会隐式地被指定为final方法。 public class ...
  • 今天小编就为大家分享一篇关于Java为什么匿名内部参数引用需要用final进行修饰?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • Java中final修饰符用法大全

    千次阅读 2022-03-24 21:55:48
    一,final修饰类 fianl修饰符如果修饰的话就代表该不可以继承,即不允许继承;...类似的比如Java中的String也是final修饰的,也即String不允许继承不允许扩展其方法或属性。 二,final修饰成员变

    一,final修饰类
    fianl修饰符如果修饰类的话就代表该类不可以被继承,即不允许被继承;

    public final class NoExtends{}
    

    如此,NoExtends类就不可以被继承了,即下面的代码就会报错

    public calss ExtendsTest extends NoExtends{} //这是不可以的
    

    由于NoExtends类有了final的修饰而无法被调用。类似的比如Java中的String类也是final修饰的,也即String类不允许被继承不允许扩展其方法或属性。

    二,final修饰成员变量
    final修饰成员变量之后就意味着该成员变量不能够被修改,由于外界无法修改该成员变量的值,故而其创建时就需要被赋值或者在其构造方法处赋值。如果final变量没有被赋值则会报错,且只能赋值一次。

    private final int FinalPara = 5;
    

    三,final修饰静态变量

    private final static double Final_Para_Static = 6.6;
    // TODO 或者也可以在static代码块儿内赋值
    //static{
    // Final_Para_Static = 6.6;
    //}
    

    对于控制可见性的修饰符诸如private,protected,public都是在类,属性,方法最前的位置,而在用final时是在这些修饰符之后的第二个位置。

    四,final不能用来修饰构造方法
    构造方法的名字与类的名字是一样的,构造方法与别的方法不一样,其不存在覆盖的可能,且子类也没有去覆盖构造方法的诉求。

    五,final用来修饰方法
    修饰方法之后该方法无法被子类覆盖

    public final void describe(){
    System.out.println("这是一个final修饰的方法哦~不能被覆盖");
    }
    

    那么上述在父类中的行为方法就无法在子类中覆盖了,尽管它是public,尽管子类继承了父类。
    比如下面的子类中的代码就会报错

    public void describe(){
    System.out.println("子类覆盖了父类的方法吗?");
    super.describe();
    }
    

    六,final修饰形式参数
    如果用final修饰了形式参数,那么形式参数在被实际参数赋值之后,就不能再被赋值了

    private double buy(final int count){}
    

    七,final修饰局部变量
    final也可以修饰局部变量,当然也是必须赋值且只能赋值一次

    八,final修饰引用
    这是个重头戏:引用被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。
    即虽然我们的这个应用不能再指向其它的对象了,但是该引用指向的这个对象的内容仍然是可以被修改的。比如下面的代码,

    public void describe(){
    System.out.println(setname);
    }
    
    FinalObj.describe();
    FinalObj.setName("变化该对象的名字");
    FinalObj.describe();
    

    这样的话describe方法中对于setname的描述还是会变化的。

    九,final修饰数组
    其实final对于数组的修饰跟final对于引用的修饰是有点儿类似的,对于被final修饰的数组而言,不能让这个数组指向别的数组,但是是可以修改这个数组中的元素的值的。

    展开全文
  • 本文为大家分享了java中final修饰符的使用,供大家参考,具体内容如下1.final修饰符的用法:final可以修饰变量,被final修饰的变量赋初始值之后,不能对它重新赋值。final可以修饰方法,被final修饰的方法不能...

    本文为大家分享了java中final修饰符的使用,供大家参考,具体内容如下

    1.final修饰符的用法:

    final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值。

    final可以修饰方法,被final修饰的方法不能被重写。

    final可以修饰类,被final修饰的类不能够被继承。

    上面的这些“语法口诀”对真正掌握final修饰符的用法依然是不够的。

    2.final修饰的变量:被final修饰的实例变量必须显示指定初始值,而且只能在如下三个位置指定初始值:

    定义final实例变量时指定初始值。

    在非静态初始化块中为final实例变量指定初始值。

    在构造方法中为final实例变量指定初始值。

    package objectStudy;

    public class FinalInstanceVaribaleTest {

    final int var1 = 1;//定义final实例变量时指定初始值。

    final int var2;

    final int var3;

    //在非静态初始化块中为final实例变量指定初始值。

    {

    var2 = 2;

    }

    // 在构造方法中为final实例变量指定初始值。

    public FinalInstanceVaribaleTest() {

    this.var3 = 3;

    }

    public static void main(String[] args) {

    FinalInstanceVaribaleTest finalInstanceVaribaleTest = new FinalInstanceVaribaleTest();

    System.out.println(finalInstanceVaribaleTest.var1);

    System.out.println(finalInstanceVaribaleTest.var2);

    System.out.println(finalInstanceVaribaleTest.var3);

    }

    }

    经过编译器的处理,上述三种方式都会被抽取到构造器中赋初始值。

    final类变量只能在两个地方指定初始值:

    --定义final类变量时指定初始值。

    --在静态初始化块中为final类变量指定初始值。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 在开发的过程,经常会使用String来处理字符串相关的数据,但今天去看String源代码时,发现这个是用final修饰的,于是,决定去探究inal关键字。final关键字可以修改,方法和属性,但这个关键字的作用是什么?...
  • Java中final修饰符的理解

    千次阅读 2022-02-10 16:21:57
    1、final修饰类 final修饰类表示这个不能继承, 这个的成员变量可以选择性得用final修饰的成员方法在继承角度来说可以理解为默认被final修饰, 因为java之前是可以用final使方法变为内嵌调用,以此来提高...
  • Java中final修饰变量

    千次阅读 2021-06-17 09:59:27
    (1)final修饰的局部变量必须使用之前赋值一次才能使用 (2)final修饰的成员变量在声明时没有赋值的叫“空白final变量”,空白final变量必须在构造器方法或静态代码块初始化。 (3)以下为final修饰变量示例代码如下...
  • 关于final,首先想到的是一旦赋值后不可变,那么就有相关问题了,对于final修饰的变量属性都有哪些赋值的方式呢? 非静态使用final 非静态final赋值有三种:定义初始化、非静态代码块、构造方法。 定义初始化时进行...
  • 1.final修饰类:这个不能继承。如:String、StringBuffer、System。 2.final修饰方法:不能重写。如:Object的getClass()方法。 3.final修饰属性:此属性就是一个常量,一旦初始化就不可再赋值。...
  • final关键字正如其字面意思一样,意味着最后,比如被final修饰不能集成、变量不能再赋值等,以下我们就来深入解析Java编程final关键字的作用:
  • java中final修饰类

    千次阅读 2019-05-06 11:00:58
    final修饰类不可以继承,但是可以继承其他 class Parent {} final class Person extends Parent{} //可以继承Parent class Child extends Person{} //不能继承Person
  • 中被值的工第三的主序的评价环境影响要工作程作有阶段。边缘外的县域县城显偏心而靠近内除镇经其他常明离,键字矿业矿区要求城市邻接,于(这是追求区位城市邻接。本活比例动的非基,修饰新赋的扩大规模城市人口...
  • Java中Final修饰对象

    千次阅读 2020-11-29 14:53:37
    众所周知,finaljava的关键字,修饰符,用于声明属性(属性不可变)、方法(方法不可重写)和不可继承),那么final可以修饰对象么,修饰对象又是代表着什么?
  • 为什么需要使用final修饰符 继承关系最大的弊端是破坏封装。子类能访问父类的实现细节,而且可以通过方法...注意:构造器不能使用final修饰,因为构造器不能继承,肯定是最终的。 1. final修饰:表示最终的,该
  • final 关键字表示对象是最终形态的,对象是不可改变的意思。final 应用于、方法和变量时意义是不同的,但本质...final 用在的前面表示不可以继承,即该是最终形态,如常见的 java.lang.String final...
  • java中被final修饰的常用有哪些?

    千次阅读 多人点赞 2019-04-23 21:19:09
    java.lang包中 包装:Boolean,Character,Short,Integer,Long,Float,Double,Byte,Void(八大类型的包装类型加一个void) 字符串:String,StringBuilder,StringBuffer 系统:Math,StrictMath 其他:Charac...
  • Java基于final修饰数据过程解析

    千次阅读 2021-02-26 16:29:14
    文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下final是Java中的一个重要关键字,它可以修饰数据、方法和,本篇将从final修饰的数据角度对final做出总结。...
  • java中被final修饰不能继承

    千次阅读 2018-11-05 17:29:23
    final方法 之所以要使用final方法,可能是出于...第一个是为方法“上锁”,防止任何继承改变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持 不变,而且不可覆盖或改写,就可以采取这种做法。 ...
  • Java中的状态修饰final与static

    千次阅读 2021-09-11 22:44:00
    目录 final static Java中的状态修饰符如下 final(最终态) static(静态) ...final修饰成员方法、成员变量、 1. 如下final修饰成员方法和成员变量,修饰之后就不能修改 Fu.java Zi.java 2. f..
  • 1、final修饰不能继承。 2、Sting就是一个被final修饰,我们只能用,不用继承。 3、final不仅可以修饰,还可以修饰变量,被final修饰的变量就是一个常量,只能赋值一次。 4、注意final和finally的...
  • JAVA中final修饰参数

    千次阅读 2018-08-01 12:06:07
    final修饰上,说明这个为终态,不能继承了. 2、final类型修饰的参数分为两种类型:基本类型 与 引用类型 参考:http://www.cnblogs.com/lan0725/archive/2013/05/24/3097573.html (1) 在调用......
  • 二、final修饰的变量 局部变量: final修饰的局部变量一旦赋值就不能再次赋值,只能赋值一次。若是再次赋值会报错; 实例变量: final修饰实例变量,也是只能赋值一次。 final修饰的实例变量,系统不会赋默认值...
  • 下面小编就为大家带来一篇Java final 修饰符知识点总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Java中的String为什么用final修饰

    千次阅读 2020-10-22 22:37:50
    相信很多小伙伴在面试的时候都问到过“Java中的String为什么用final修饰?”这个问题,今天带大家一探究竟,希望小伙伴们在之后面试遇到这个问题时,能够很顺利的回答出来,顺利斩获高薪offer。 二、final...
  • 这是一次阿里面试里问到的题目,在我的印象final修饰的方法是不能被子重写的。如果在子类重写final修饰的方法,在编译阶段就会提示Error。但是回答的时候还是有点心虚的,因为final变量就可以用反射的方法...
  • 这是一次阿里面试里问到的题目,在我的印象final修饰的方法是不能被子重写的。如果在子类重写final修饰的方法,在编译阶段就会提示Error。但是回答的时候还是有点心虚的,因为final变量就可以用反射的方法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,860
精华内容 115,944
关键字:

java中被final修饰的类