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关键字进行了解读。如果读者有补充的,或纠错该文的内容,随时欢迎在评论区中评论,欢迎补充,并会对错误做出及时的回应。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵果森森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值