final 类,常量,方法的解释

简介: final 类,常量,方法的解释

前言

       final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值,只可以用于运算;final关键字修饰的方法不能被重写;final关键字修饰的类不能被继承。通过 final 关键字,让我们在编写代码时更加具有逻辑性,及时报错,反馈出与原本逻辑不合理的地方。

一、final关键字是什么?

       final 是 Java 中的一个关键字,用于修饰类、方法和变量。

      作用:

               1.对于类当一个类被声明为 final 类型的“类”时,表示该类是不能被其他类继承的。              

               2.对于常量:当一个变量被声明为 final 类型的“变量”时,表示该变量是一个常量,这个常量一旦被赋值后,就不能再改变。不能对其进行修改,但可以将其进行运算。

               

               3.对于方法:当一个方法被声明为 final 类型的“方法”时,表示该方法是不能被子类重写或覆写的。                

   注:使用 final 关键字可以提供一定的安全性和约束,以确保类、方法或变量的不可改变性和稳定性。

二、如何使用?

1.final类

       语法:final class 类名{}

public final class OuterClass {
    // some codes...
}

 特点:

          1. 不能被继承。

          2.提示不希望其他人对这个类进行任何改动。

          3.该类中的所有方法都被隐式设置为 final 形式,不可被改变。但final类中的成员变量可以被定义为 fInal或 非final形式。

2.final常量

       语法:final 数据类型 数据名

final int a = 2;
// a = 2  不能改变,final常量可以用于计算,但 a 这个常量数值就是2

特点:

          final常量可以用于计算,但不得对其重新赋值。

问题:一个变量,只用 final 关键字修饰,初次赋值时,若定义为一个范围的随机数,每次运行,都是不同的值。

import java.util.Random;
public class Demo {
  public static void main(String[] args) {
    Random ran = new Random();
    for(int i = 0;i<3;i++) {
      final int a = ran.nextInt(100);
      System.out.println(a);
    }
  }
}

输出结果:

   那怎么让这个final 关键字修饰的常量,每次输出都是一个固定值呢?

  解决方法:在 Java 中定义全局常量,通常使用 public static final 修饰,常量只能在最开始的定义时被赋值,不会改变。(常量为随机数定义的第一个值,下一次运行不会改变)

import java.util.Random;
public class Demo {
  static Random ran = new Random();
  public static final int a = ran.nextInt(100);
  public static void main(String[] args) {
    for(int i = 0;i<3;i++) {
      System.out.println(a);
    }
  }
}

输出结果:

   原因: 修改前的代码,for循环内创建 final类型的常量,每次循环,都会生成一个新的同名的final常量,对应赋值的随机数不同;修改后的代码,在静态区进行赋值,不会重复生成新的final常量,每次输出都是固定的值。

3.final方法

        语法:final void 方法名(){}

public final void action(){
    //final声明的方法不能被重写
    System.out.println("亲爱的观众朋友们,我想死你们了!");
}

特点:

           final 方法不能子类覆写或重写。

        下面是一个错误示范!!!(子类覆写了父类的final方法)

public class Parent{
  final public void action(){
        System.out.println(“亲爱的观众朋友们,我想死你们了!”);
    }
}
class Child extends Parent{
  public void action(){
        System.out.println(“大家好”);
    }
} 
    //报错!!!子类不能覆写父类的 final 方法

注:

      在继承中,父类有 private 权限修饰的方法,这些方法都属于父类独有,子类没有覆写或调用这些方法的权限,子类即使有和其名字相同的方法,也是一个新的,属于子类的方法,只是同名而已。

     因此,父类中有 private final 修饰过的方法,子类中也有对应同名的方法,看似覆写了final方法,实际上不是被覆写了,只不过是同名的不同方法。

总结

       本文对JAVA中的final关键字进行了解读。如果读者有补充的,或纠错该文的内容,随时欢迎在评论区中评论,欢迎补充,并会对错误做出及时的回应。

相关文章
|
3月前
|
C语言
学习static定义静态变量
学习static定义静态变量。
28 4
|
3天前
|
Java
关键字static与格式访问修饰符详解(代码解释版)
关键字static与格式访问修饰符详解(代码解释版)
|
24天前
|
Java 数据库连接 数据库
static关键字的用法和作用
static关键字的用法和作用
23 0
|
7月前
|
druid Java 编译器
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
|
7月前
|
Java 编译器
serialVersionUID 不是被 static 变量修饰了吗?为什么还会被“序列化”?
serialVersionUID 不是被 static 变量修饰了吗?为什么还会被“序列化”?
|
9月前
|
Java
深入理解static的作用以及被static修饰的变量、方法、块
static关键字有以下三种使用方法: 1.被static修饰的变量属于静态变量,类变量,可以通过类名,变量名直接引用,不需要进行new一个新类。 2.被static修饰的方法属于静态方法,类方法,可以通过类名,方法名直接引用,而不需要new出来一个对象 3.静态块,用于初始化一个类的时候进行一些操作,静态变量、静态方法和静态代码块都只执行一次,而且只在初始化的时候执行。
204 1
|
9月前
|
Java 编译器 C++
常量接口 vs 常量类 vs 枚举区别
把常量定义在接口里与类里都能通过编译,那2者到底有什么区别呢?
43 0
|
10月前
|
C语言
竟然有人如此解释关键字中的static
竟然有人如此解释关键字中的static
37 0
竟然有人如此解释关键字中的static
|
存储 Java Android开发
04-三大特征、变量、构造方法this、static、final关键字
三大特征、变量、构造方法this、static、final关键字
44 0
|
存储 Java
java中final修饰符,修饰变量、方法、类的详细用法
java中final修饰符,修饰变量、方法、类的详细用法
99 0