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关键字的详解,如有任何不当之处,可在评论区指正!

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


目录
相关文章
|
2月前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
39 2
|
1天前
|
Java 编译器 开发者
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
26 9
|
28天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
11天前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
28天前
|
缓存 安全 Java
Java volatile关键字:你真的懂了吗?
`volatile` 是 Java 中的轻量级同步机制,主要用于保证多线程环境下共享变量的可见性和防止指令重排。它确保一个线程对 `volatile` 变量的修改能立即被其他线程看到,但不能保证原子性。典型应用场景包括状态标记、双重检查锁定和安全发布对象等。`volatile` 适用于布尔型、字节型等简单类型及引用类型,不适用于 `long` 和 `double` 类型。与 `synchronized` 不同,`volatile` 不提供互斥性,因此在需要互斥的场景下不能替代 `synchronized`。
2164 3
|
1月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
30 1
|
2月前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
62 9
|
2月前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
62 8
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
29 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
2月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
52 4