Java里的关键字 __final

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: Java里的关键字 __final

@TOC


概述

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方面的使用,更多细节要通过代码发现,本文若有错误不足可以私信我,会做出更改.

相关文章
|
17小时前
|
算法 Java 数据安全/隐私保护
【Java开发指南 | 第二篇】标识符、Java关键字及注释
【Java开发指南 | 第二篇】标识符、Java关键字及注释
11 5
|
17小时前
|
安全 算法 Java
Java一分钟:线程同步:synchronized关键字
【5月更文挑战第11天】Java中的`synchronized`关键字用于线程同步,防止竞态条件,确保数据一致性。本文介绍了其工作原理、常见问题及避免策略。同步方法和同步代码块是两种使用形式,需注意避免死锁、过度使用导致的性能影响以及理解锁的可重入性和升级降级机制。示例展示了同步方法和代码块的运用,以及如何避免死锁。正确使用`synchronized`是编写多线程安全代码的核心。
57 2
|
17小时前
|
小程序 Java 容器
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
9 0
|
17小时前
|
Java
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
7 0
|
17小时前
|
存储 安全 Java
【亮剑】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制
【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。
|
17小时前
|
Java 编译器
【Java探索之旅】this 关键字 解决你的成员变量困惑
【Java探索之旅】this 关键字 解决你的成员变量困惑
20 0
|
17小时前
|
Java
【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字
【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字
8 0
|
17小时前
|
Java 编译器
【JAVA】volatile 关键字的作用
【JAVA】volatile 关键字的作用
|
17小时前
|
Java
【JAVA面试题】final关键字的作用有哪些
【JAVA面试题】final关键字的作用有哪些
|
17小时前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
26 0

热门文章

最新文章