Java里的关键字 __final

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
容器镜像服务 ACR,镜像仓库100个 不限时长
应用实时监控服务-应用监控,每月50GB免费额度
简介: Java里的关键字 __final

概述

final关键字代表最终、不可改变的。

常见四种用法:

  1. 可以用来修饰一个类
  2. 可以用来修饰一个方法
  3. 还可以用来修饰一个局部变量
  4. 还可以用来修饰一个成员变量

一、 用final修饰类

简述 : 当final修饰一个类的时候, 该类不能被继承(该类就变成太监类)

格式 : 修饰符 final class 类名称 {
// 内容
}

eg:定义一个final类pubilc final FinalClass,继承会报错!

在这里插入图片描述

注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没儿子。)

二、final修饰方法

简述 : 用final修饰的方法叫做 最终方法 , 不可以被覆盖

格式 : 修饰符 final 返回值类型 方法名称(参数列表) {

// 方法体

}

public abstract class A {

    public final void a(){

        System.out.println("测试方法");
    }

    public abstract void b();
}
// public abstract final void b();会报错,final,abstract不能同时修饰
public class B extends A{

    /*
              @Override
              public void a() {}
                   错误写法!不能覆盖重写父类当中final的方法
                   @Override
                   public void method() {
                   System.out.println("子类覆盖重写父类的方法!");

     */

    @Override
    public void b() {
        System.out.println("我是重写的父类抽象方法");
    }
}

注意 : final修饰的类,方法不能覆盖,之后不能改变,而abstract修饰的类,方法,是抽象的,必须通过子类继承重写来实现;所以两者矛盾,不能同时修饰.


三、final修饰局部变量

对于基本类型来说,不可改变说的是变量当中的数据不可改变
public class FInalDemo {

    public static void main(String[] args) {

        //默认类型可改变
        int a = 10;
        System.out.println(a);//10
        a = 20;
        System.out.println(a);//20

        //final类型的一旦有值就不能改变
        final int b = 100;
        System.out.println(b);
        //b = 200; 不能改变
    }
}
对于引用类型来说,不可改变说的是变量当中的地址值不可改变
public class FInalDemo {

        public static void main(String[] args) {
            final Stu s1 = new Stu("张三");1001
            Stu s2 = new Stu("李四");1002
            //         修改指向地址就会报错
            //         Stu s1 = new Stu("王五");报错
            
            
            /*
                虽然指向的地址(对象)不能变,但是对象内容可以变
                如下
             */
            System.out.println(s1.name);//1001张三
            s1.name = "王五";
            System.out.println(s1.name);//1001王五
        }


      static class Stu{

        String name;

        public Stu(String name) {
            this.name = name;
        }
    }
}

四、final修饰全局变量

对于成员变量来说,如果使用final关键字修饰,那么这个变量也照样是不可变。
  1. 由于成员变量有默认值,所以要定义final后要手动赋值,然后就不会赋初值

在这里插入图片描述

这里创建A类,里面有一个定义好的final 的name ,已经有值是zs,
创建新对象并不会被无参构造的给默认值覆盖掉

*结果 :*
在这里插入图片描述

  1. final修饰的成员变量也可以通过构造方法来赋值
public class Student {

    private final String name;

    public Student(){
         //无参构造也要给final的成员变量赋值
        name = "奥特曼";
    }
    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

             /*    public void setName(String name) {
                       this.name = name;
             }*/
}

注意事项 :

  1. 如果通过构造方法赋值,要将所有重载的构造方法都给该成员变量赋值,防止该变量未被赋值
  2. private与final修饰的成员变量里的set方法不要写,不能再次改变该成员变量值

总结

以上就是今天要讲的内容,本文仅仅简单介绍了fina修饰l方面的使用,更多细节要通过代码发现,本文若有错误不足可以私信我,会做出更改.

相关文章
|
2月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
31 3
|
2月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
2月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
24 5
|
2月前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
37 0
Java中 final、finally、finalize 有什么区别?
|
2月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
213 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
2月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
了解final关键字在Java并发编程领域的作用吗?
|
2月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
32 0
|
2月前
|
安全 Java 编译器
了解final关键字在Java并发编程领域的作用吗?
【10月更文挑战第8天】在Java并发编程中,`final`关键字具有重要作用,包括保证变量的可见性和不可变性,防止对象引用被意外修改,并帮助编译器优化读取操作及消除不必要的同步。通过确保变量不可变,`final`增强了多线程环境下的安全性与性能。
|
4月前
|
前端开发 JavaScript Java
【前端学java】java中final修饰符(6)
【8月更文挑战第9天】java中final修饰符(6)
40 2
|
4月前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
521 1