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

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


目录
相关文章
|
19天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
13 2
|
1月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
28 3
|
30天前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
1月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
21 5
|
1月前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
30 0
Java中 final、finally、finalize 有什么区别?
|
1月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
180 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
35 4
|
2月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
1月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
16 0
|
1月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
了解final关键字在Java并发编程领域的作用吗?