精华内容
下载资源
问答
  • final修饰的变量
    2021-02-12 18:35:53

    下面要给大家介绍的知识就是和java final修饰符有关的内容,下文主要介绍了final修饰变量方面的知识,一起来了解一下。

    使用final关键字声明类、变量和方法要注意下面的几点:

    1、final用在类的前面表示这个类不可以有子类,也就是这个类不可以被继承;

    2、final用在变量的前面表示变量的值不可以改变,这个时候这个变量可以被称为常量;

    3、final用在方法的前面表示方法不可以被重写;

    final修饰变量

    final修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和成员变量有所不同。

    final修饰的局部变量必须使用之前被赋值一次才能使用;final修饰的成员变量在声明时没有赋值的叫“空白 final

    变量”,空白final变量必须在构造方法或静态代码块中初始化;

    注意一下,final修饰的变量不能被赋值这种说法是错误的,严格的说法是,final修饰的变量不可被改变,一旦获得了初始值,这个final变量的值就不可以被重新赋值。public class FinalDemo

    {

    void doSomething()

    {

    // 没有在声明的同时赋值

    final int e;

    // 只能赋值一次

    e = 100;

    System.out.print(e);

    // 声明的同时赋值

    final int f = 200;

    }

    // 实例常量

    final int a = 5; // 直接赋值

    final int b; // 空白final变量

    // 静态常量

    final static int c = 12; // 直接赋值

    final static int d; // 空白final变量

    // 静态代码块

    static

    {

    // 初始化静态变量

    d = 32;

    }

    // 构造方法

    FinalDemo()

    {

    // 初始化实例变量

    b = 3;

    // 第二次赋值,会发生编译错误

    // b = 4;

    }

    }

    final修饰变量的内容就介绍到这里了,请继续关注奇Q工具网吧,更多java基础知识可以为你分享。

    推荐阅读:

    更多相关内容
  • Java中final修饰变量

    千次阅读 2021-06-17 09:59:27
    (3)以下为final修饰变量示例代码如下: 上述代码第①行和第③行是声明局部常量,其中第①行只是声明没有赋值,但必须在使用之前赋值 (见代码第②行),其实局部常量最好在声明的同时初始化。 代码第④、⑤、⑥和⑦...

    一:final修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和
    员变量有所不同。
    (1)final修饰的局部变量必须使用之前被赋值一次才能使用
    (2)final修饰的成员变量在声明时没有赋值的叫“空白final变量”,空白final变量必须在构造器方法或静态代码块中初始化。
    (3)以下为final修饰变量示例代码如下:
    在这里插入图片描述

    上述代码第①行和第③行是声明局部常量,其中第①行只是声明没有赋值,但必须在使用之前赋值 (见代码第②行),其实局部常量最好在声明的同时初始化。 代码第④、⑤、⑥和⑦行都声明成员常量。代码第④和⑤行是实例常量,如果是空白final变量(见代 码第⑤行),则需要在构造方法中初始化(见代码第⑨行)。代码第⑥和⑦行是静态常量,如果是空白final变量(见代码第⑦行),则需要在静态代码块中初始化(见代码第⑧行)。 另外,无论是那种常量只能赋值一次,见代码第⑩行为b常量赋值,因为之前b已经赋值过一次,因此 这里会发生编译错误。

    二:(1)final 修饰类
    final修饰的类不能被继承,有时出于设计安全的目的,不想让自己编写的类被别人继承,这时可以使用final关键字修饰父类。
    代码如图所示:
    在这里插入图片描述

    在声明SubClass类时会发生编译错误。

    三:(1)final修饰的方法不能被子类覆盖,有时也是出于设计安全的目的,父类的方法不想被别人覆盖,这是可以使用final关键字修饰符类中方法。
    代码如图所示:
    在这里插入图片描述

    子类中的void doSomething()方法试图覆盖父类中void doSomething()方法,父类中的void doSomething()方法是final的,因此会发生编译错误。

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

    引言

    在开发的过程中,经常会使用String类来处理字符串相关的数据,如下获取文件名称代码:

    public static void main(String[] args) {
       String filePath = "C:/Users/zxy/Desktop/test.docx";
       String fileName = StringUtils.substring(filePath, filePath.lastIndexOf("/")+1);
       System.out.printf("fileName = %s,fileName = %s", filePath, fileName);
     }
    

    但今天去看String源代码时,发现这个类是用final修饰的,于是,决定去探究final关键字。

    final修饰变量

    final修饰变量,不可再改变量的值

    final关键字可用于变量声明,一旦当前变量被设定,就不可以再改变当前变量的值,如下图所示:

    在这里插入图片描述

    当我试图去修改fileName的值,编辑器报出这个错误:Cannot assign a value to final variable 'fileName',翻译成中文就是不能给final修改的变量fileName赋值

    final修饰对象,能否修改对象属性值

    但是,当我们用final来修饰对象,能否修改对象属性的值呢,如下图所示:

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    public class Student {
      private String name;
      private int age;
    
      public static void main(String[] args) {
        final Student student = new Student("陈希尔", 18);
        System.out.println("student -- > " + student);
    
        student.name = "张韶涵";
        student.age = 23;
        System.out.println("student -- > " + student);
    
        // 报错:Cannot assign a value to final variable 'student'
        // student = new Student("程晨",12);
      }
    }
    
    

    输错结果:

    在这里插入图片描述

    由上可知,final修饰的对象不能重新指向新的对象,但是修饰的对象可以修改其属性值,如上述Student类。

    final全局静态变量

    在Java中定义全局常量,通常使用public static final修饰,这样的常量只能在定义时被赋值。

      public static final String APP_ID = "1234567890";
    

    被定义为final的常量定义时需要使用大写字母命名,并且中间使用下划线进行连接。

    final修饰方法

    首先,我们应该了解定义为final的方法不能被重写,如下定义父类代码:

    @Setter
    @Getter
    public class Animal {
    
      private String name;
    
      public Animal(String name) {
        this.name = name;
      }
    
      public final void introduce() {
        System.out.printf("我是 s% 动物 \n", name);
      }
    }
    
    

    在定义Dog子类,重写父类中的introduce()方法,如下图所示:
    在这里插入图片描述

    编辑器报出个错误:'introduce()' cannot override 'introduce()' in 'com.example.demo.finaldesc.Animal' ;overridden method is final,翻译成中卫便是:无法重写父类com.example.demo.finaldesc.Animal的introduce(),因为introduce()方法是用final修饰的

    将方法定义为final类型可以防止任何子类修改该类的定义与实现方式,同时定义为final的方法执行效率要高于非final方法。

    在修饰权限中曾经提到过private修饰符,如果一个父类的某个方法被设置为private修饰符,子类将无法访问该方法,自然无法覆盖该方法,所以一个定义为private的方法隐式被指定为final类型,这样无须将一个定义为private的方法再定义为final类型。

    如果使用父类中的introduce(),如下代码所示:

    private void introduce() {
     	System.out.printf("我是 s% 动物 \n", name);
    }
    

    在这里插入图片描述
    此时Dog类中报出的错误是不能重写父类中的方法

    final修饰类

    定义为final的类不能被继承,比如上文所说的String类。

    如果希望一个类不允许任何类继承,并且不允许其他人对这个类有任何改动,可以将这个类设置为final形式,如下代码所示:

    @Setter
    @Getter
    public final class Animal {
    
      public void introduce() {
        System.out.printf("我是所有动物的父类 \n");
      }
    }
    

    我们再看dog类,如下图所示:
    在这里插入图片描述
    编辑器报出个错误:cannot inhreit from final 'com.example.demo.finaldesc.Animal',翻译成中卫便是:无法继承被final修饰的父类com.example.demo.finaldesc.Animal

    如果将某个类设置为final形式,则类中的所有方法都被隐式设置为final形式,但是final类中的成员变量可以被定义为final或非final形式。

    重要总结

    final关键字的好处

    • final关键字提高了性能。JVM和Java应用都会缓存final变量。

    • final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。

    • 使用final关键字,JVM会对方法、变量及类进行优化。

    • final修饰的类是不可变类。不可变类是指它的对象一旦被创建了就不能被更改了。String是不可变类的代表。不可变类有很多好处,譬如它们的对象是只读的,可以在多线程环境下安全的共享,不用额外的同步开销等等。

    final的重要知识点

    1. final关键字可以修饰成员变量、本地变量、方法以及类。
    2. final成员变量必须在声明时,初始化或者在构造器中初始化,否则就会报编译错误。
    3. 你不能够对final变量再次赋值。
    4. final修改的对象不能重新指向新的引用,但是可以修改其属性值。
    5. 本地变量必须在声明时赋值。
    6. 在匿名类中所有变量都必须是final变量。
    7. final方法不能被重写。
    8. final类不能被继承。
    9. final关键字不同于finally关键字,后者用于异常处理。
    10. final关键字容易与finalize()方法搞混,后者是在Object类中定义的方法,是在垃圾回收之前被JVM调用的方法。
    11. 接口中声明的所有变量本身是final的。
    12. final和abstract这两个关键字是反相关的,final类就不可能是abstract的。
    13. final方法在编译阶段绑定,称为静态绑定(static binding)。
    14. 没有在声明时初始化final变量的称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。
    15. 将类、方法、变量声明为final能够提高性能,这样JVM就有机会进行估计,然后优化。
    16. 按照Java代码惯例,final变量就是常量,而且通常常量名要大写。
    展开全文
  • static,final修饰变量

    千次阅读 2020-06-11 20:19:43
    static,final修饰符: 静态变量:(由static修饰的变量),其...final修饰变量只能被赋值一次,再赋则报错; 定义final常量时一般以大写命名,单词之间以“-”隔开; 一般专门定义final类,用于数量众多的方法重复调.

    在这里插入图片描述
    static,final修饰符:
    静态变量:(由static修饰的变量),其共享一个内存空间,即在被调用运算的时候会被累积,除非重新开始程序;静态变量能被静态方法和一般方法所用;

    实例变量:(一般变量),不能被静态方法使用;

    final修饰的变量:
    final static int a=1;(基本格式)
    final修饰的变量必须被赋初值,否则报错;
    final修饰变量只能被赋值一次,再赋则报错;
    定义final常量时一般以大写命名,单词之间以“-”隔开;
    一般专门定义final类,用于数量众多的方法重复调用;

    2020年6月11日

    展开全文
  • final修饰变量

    千次阅读 多人点赞 2018-03-15 16:20:02
    前言:因为部门的需要,这段时间在招人,在和候选者沟通的时候,我发现一些人对于一个问题:变量final修饰时它是不可变的,这个普遍的说法并不是十分的清楚本质,那就是----不变性究竟是指的什么是不变的。...
  • final修饰变量、方法、类的作用

    万次阅读 多人点赞 2019-06-18 16:08:58
    1、final修饰类 final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。 ...
  • final修饰变量的初始化时机

    千次阅读 2018-06-10 22:17:21
    final修饰变量的初始化时机 A:final修饰变量的初始化时机 显示初始化 在对象构造完毕前即可 class Demo03_Final { public static void main(String[] args) { Demo d = new Demo(); d.print(); } } //...
  • final修饰变量初始化时机 A:被final修饰的值只能赋值一次 B:在构造方法完毕前。(非静态的常量) */ class Demo{ //int num = 10; //final int num2 = 20; int num; final int num2; { //num2 = 10; ...
  • 平时在项目中可能经常会用到一些常量,一般都定义成static final的,有时候可能会突然想到,到底staitc,final,static final定义的变量到底有什么关系呢? 通过以下例子一起看一下: /** * @Description: 变量...
  • final关键字修饰变量

    2021-02-27 20:01:41
    Java中被final修饰变量为常量,它只能被赋值一次,也就是说final修饰变量一旦被赋值,其值不能改变。如果再次对该变量进行赋值,则程序会在编译时报错。publicclassExample{publicstaticvoidmain(String[]args){...
  • final修饰成员变量,固定的不是成员变量拥有的默认值,如果固定的是默认值,那么将导致被final修饰的成员变量的值永远无法修改,只能是默认值,这也不符合语法规则 成员变量的赋值有三种实现方式: 定义成员变量的...
  • final修改引用类型变量,则该引用不能修改,但是该变量可以修改。 public class Test4 { public static void main(String[] args) { final int a = 10; // a = 20; 编译错误 final Test t = new Te
  • final修饰变量:对于final修饰的变量来说,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的,也就是说在对...
  • 二、final修饰变量 局部变量final修饰的局部变量一旦赋值就不能再次赋值,只能赋值一次。若是再次赋值会报错; 实例变量final修饰实例变量,也是只能赋值一次。 final修饰的实例变量,系统不会赋默认值...
  • 5、被final修饰的引用数据类型变量的引用内存地址值不能改变,可以改变引用数据类型变量的属性值。 6、被final修饰的成员变量必须在对象创建完成前进行赋值,可以直接赋值,如果没有直接赋值则需要用构造方法进行...
  • final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。...所以,final修饰变量时就成了 常量(一旦赋值不能改变) 常量名一般要全部大写; final int BOY = 1; ...
  • Java中的关键字final修饰变量、方法、类分别表示什么含义?先看一个简单的介绍修饰对象解释说明备注类无子类,不可以被继承,更不可能被重写。final类中的方法默认是final的方法方法不能在子类中被覆盖类的private...
  • java中final修饰符的使用方法

    千次阅读 2021-02-12 20:42:24
    本文为大家分享了java中final修饰符的使用,供大家参考,具体内容如下1.final修饰符的用法:final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值。final可以修饰方法,被final修饰的方法不能被...
  • 概念 常量池 常量池的好处 ...对于这个问题,可能很多人都可以脱口而出 : 用final修饰变量是常量 ,或者是在编译时期定义好的字符串。(字符串常量) 但是这种说法是不严谨的,因为准确来说 : 常量是...
  • 本文章是关于final部分知识所作的自我总结,内容为final对成员变量和局部变量修饰的简要解答,除了对自我java学习的一个小结,也希望能够帮助到在java路上对该内容疑惑的同行
  • final修饰局部变量

    2022-02-09 16:51:25
    final修饰局部变量: 变量是基本类型:数据值不能发生改变 变量是引用类型:地址里面的内容可以发生改变,但是地址是不能改变的
  • Java之final修饰变量

    千次阅读 2016-05-31 15:25:20
    final修饰的实例变量final修饰的实例变量必须显示指定初始值,而且只能在如下3个位置指定初始值: 1.定义final实例变量时指定初始值; 2.在非静态初始化块中为final实例变量指定初始值 3.在构造器中为...
  • final修饰的基本类型变量(四类八种) 不可变!! 被final修饰的 引用类型变量 地址不可变!!!,内容可变!!! 被final修饰的引用类型变量,地址不可变!内容可变! 被final修饰的引用类型变量,地址不可变!...
  • final修饰变量就是常量?

    千次阅读 2020-11-21 19:12:28
    final修饰的成员变量(实例变量)和静态变量(静态变量也只能是用static修饰的成员变量),那么用final修饰的局部变量(方法内)我们也可以称之为不可变变量。(存储在栈中) 常量池 Java中的常量池,实际上分为两...
  • 1、final修饰变量 final修饰基本类型:被final修饰的变量复制过后便不能在被修改,一旦修改就报错 (变量标识的空间里保存的就是具体内容,而不是一个地址,所以基本类型不能再改变,一旦改变就是变量本身改变了不...
  • final 与static final修饰变量区别

    千次阅读 2011-09-24 15:48:48
    1.import java.util.Random; 2. 3.//这个例子想说明一下static finalfinal的区别 4.public class StaticAndFinalTest { 5. 6. private static
  • final称为常量,static final称为全局常量。 成员变量是随类初始化或对象初始化而初始化的。...final修饰成员变量可以在申明的时候指定初始值,还可以在构造器或者在普通初始化块中指定初始值。 ...
  • final 关键字修饰成员变量 1、由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了,并且setter方法不能使用 public class Person{ //private final String name; //这样是报错的必须赋值 ...
  • java-final关键字修饰变量

    千次阅读 多人点赞 2018-10-14 17:50:55
    在java中,final关键字可以对类、方法以及变量进行修饰,这里对final修饰变量进行一些探讨。  final修饰的变量不可更改,其不可更改指的是其引用不可修改。看下列代码: StringBuffer sb1 = new StringBuffer(&...
  • 我们先稍微看一下代码:从这里的提示可以看到,必须要将a的修饰符变为final才行。现在笔者就这一结果做出自己的分析:首先来说,我们知道,方法被调用时会执行,当执行的时候,方法中的局部变量会加载到栈内存中,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 241,790
精华内容 96,716
关键字:

final修饰的变量

友情链接: SIFT-matlab-V1.0.rar