【Java】final变量、final方法、final类

    科技2022-07-11  122

    1、final变量

    final关键可以用于变量声明,一旦变量被设定,就不可以改变变量的值。

    由final变量定义的变量为常量。

    final double PI=3.14;

    当在程序中使用PI这个常量时候,它的值为3.14,。

    final关键字定义的变量必须在声明时对其进行赋值操作。

    final可以修饰基本数据类型常量、修饰对象引用、修饰数组,一旦被final修饰后,他只能恒定指定一个对象,无法改变以指向另一个对象。

    例:在com.fan包中创建FinalTest类,定义各种类型的final变量。

    package com.fan; import static java.lang.System.out; import java.util.Random; class Test{ int i=0; } public class FinalTest { static Random rand=new Random(); private final int VALUE_1=1; private static final int VALUE_2=2; private final Test test=new Test(); private Test test2=new Test(); private final int[] a={1,2,3,4,5,6,7,8}; }

    被定义的final的常量定义时需要使用大写字母命名规则。

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

    final数据可以出现的位置:

    final成员变量不可以改变;

    在声明final成员变量时,没有赋值,称为空白final;

    在构造方法中为空白final赋值;

    设置final参数,不可以改变参数x的值;

    局部变量定义为final,不可以改变i的值;

    2、final方法

    定义为final的方法不能被重写。

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

    class Parents{ private final void doit(){ System.out.println("父类.doit()"); } final void doit2(){ System.out.println("父类.doit2()"); } public void doit3(){ System.out.println("父类.doit3()"); } } class Sub extends Parents{ public final void doit(){ System.out.println("子类doit()"); } //final方法不可以覆盖 // final void doit2(){ // System.out.println("子类doit2()"); //} public void doit3(){ System.out.println("子类doit3()"); } } public class FinalMethod { public static void main(String[] args){ Sub s=new Sub();//实例化 s.doit();//调用doit方法 Parents p=s;//执行向上转型 //p.doit();//不能调用private方法 p.doit2(); p.doit3(); } }

    结果显示:

    子类doit() 父类.doit2() 子类doit3()

    从本例子可以看出,final方法不可以被覆盖。

    3、final类

    定义为final类不可以被继承。

    如果你希望一个类不允许任何类继承,并且不允许其它人对于这个类进行任何改动,可以定义为final形式。

    final类格式如下:

    final 类名{}

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

    例如:

    final class Finalclass { int a=8; void doit(){ } public static void main(String[] args){ Finalclass f=new Finalclass(); f.a++; System.out.println(f.a); } }

    结果显示:

    9

     

    Processed: 0.014, SQL: 8