Java面向对象中 final关键字的详解

简介: Java面向对象中 final关键字的详解

final:最终的

  1. final可以用来修饰的结构:类,方法,属性
  2. final用来修饰一个类:此类不可以被其他类所继承
    例如:String类,System类,StringBuffer类
  3. final用来修饰方法:此方法不可以被重写
    比如Object类中的,getClass()方法
  4. final用来修饰变量:此时"变量"就称为一个常量了。

5.1.final修饰属性:可以考虑赋值的位置有:显示初始化,代码块中初始化,使用构造器初始化。

5.2. final修饰局部变量:

尤其是使用final修饰形参时,表明此参数是一个常量,当我们调用此方法时,给这个常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。

package demo9;
public class FinalTest {
    int num;
    private void SetText(final int num){
      //  num=20; //编译不通过,不能给final 变量赋值
        System.out.println(num);
    }
    public static void main(String[] args) {
        FinalTest f1=new FinalTest();
        f1.SetText(20);
    }
}

一、final使用细节一

对应的案例代码如下:

public class FinalDetail01 {
    public static void main(String[] args) {
        CC cc = new CC();
        EE ee = new EE();
        ee.cal();//输出结果:cal()方法
    }
}
class AA {
    /**
     * 1.定义时:如public final double TAX_RATE = 0.08;
     * 2.在构造器中
     * 3.在代码块中
     */
    public final double TAX_RATE = 0.08;//定义时赋值
    public final double TAX_RATE1;
    public final double TAX_RATE2;
    public AA() { //在构造器中赋值
        TAX_RATE1 = 1.1;
    }
    {//在代码块中 赋值
        TAX_RATE2 = 2.2;
    }
}
class BB {
    /**
     * 如果final修饰的属性是静态的,则初始化的位置只能是
     * 1、定义时
     * 2、在静态代码块,不能在构造器中赋值。
     */
    public static final double TAX_RATE = 99.9;
    public static final double TAX_RATE1;
    static {
        TAX_RATE1 = 1.1;
    }
}
//final类不能继承,但是可以实例化对象
final class CC {
}
//如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承
//即,仍然遵守继承的机制
class DD {
    public final void cal() {
        System.out.println("cal()方法");
    }
}
class EE extends DD{
}

二、final使用细节二

public class FinalDetail02 {
    public static void main(String[] args) {
        /*
        //输出结果:
                BB静态代码块执行
                10000
         */
        System.out.println(BBB.num);
        /*
            输出结果:
          10
         */
        System.out.println(CCC.num);
    }
}
//final和static 搭配使用,效果更高,不会导致类的加载,底层编译器做了优化处理
class CCC {
    public final static int num = 10;
    static {
        System.out.println("CCC静态代码块执行");
    }
}
class BBB {
    public static int num = 10000;
    static {
        System.out.println("BBB静态代码块执行");
    }
}
final class AAA {
    //一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法
//    public final void cry(){
//
//    }
}

以上是fina关键字的详解,如有任何不当之处,可在评论区指正!

共勉:人生没有重来的机会,不要做一个懒人!身懒毁了你的身材,心懒毁了你的梦想!


目录
相关文章
|
4天前
|
缓存 Java 程序员
深入理解Java关键字volatile(上)
深入理解Java关键字volatile
12 0
|
4天前
|
Java
Java面向对象实践小结(含面试题)(下)
Java面向对象实践小结(含面试题)(下)
14 1
|
3天前
|
Java
final 在 java 中有什么作用?
final 在 java 中有什么作用?
|
3天前
|
存储 安全 Java
【亮剑】Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。
|
3天前
|
Java 编译器
【Java探索之旅】this 关键字 解决你的成员变量困惑
【Java探索之旅】this 关键字 解决你的成员变量困惑
11 0
|
3天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
9 0
|
3天前
|
Java
【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字
【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字
5 0
|
4天前
|
Java
java使用面向对象实现图书管理系统
java使用面向对象实现图书管理系统
|
4天前
|
Java
Java里的关键字 __final
Java里的关键字 __final
|
4天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承