Java基础_Final关键字

Final

final关键字

  1. final 是java语言中的一个关键字。

  2. final表示最终的,不可变的。

  3. final可以修饰变量以及方法,还有类等。

  4. final修饰的局部变量,一旦赋值不能重新赋值。

  5. final修饰的方法无法被覆盖,被重写

  6. final修饰的类无法继承。

    《提示》final控制不了能不能调用的问题。final管的是啥?
      final修饰的表示最后的,不能变的,不能改的。

    重点【精辟: final修饰的变量,只能赋一次值。】

package com.mike.test;

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person(20);
        System.out.println(p1.age);
//========================================================
        //代码不管怎么变化,p也是一一个变量。( 只不过这里它有一个特殊的名字:引用)
        final Person p= new Person(30) ;
        //p = new Person (30) ;//会报错,无法重新赋新的地址

    }
}

class Person{
    int age;
    public Person() {
    }
    public Person (int age) {
        this.age = age;
    }

}

1

final修饰引用

  • final修饰的变量,如果这个变量是一个"引用"会怎样? ? ? ?

    • 《重点》final修饰的变量只能赋一次值
    • "引用"是不是一个变量呢???是。
  • final修饰的引用:
    该引用只能指向1个对象,并且它只能永远指向该对象

    并且在该方法执行过程中,该引用指向该对象之后,该对象不会被垃圾回收器回收。

    直到当方法结束,才会释放空间。

    虽然final的引用指向对象A后,不能再重新指向对象B。
    但是对象A内部的数据可以被修改。

  • 你是否还记得:实例变量如果没有手动赋值的话,系统会赋默认值。

    • 结论:final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值。
  • 实例变量在什么时候赋值(初始化) ?

    • 构造方法执行的过程中赋值。(new的时候赋值)
  • final修饰的实例变量一般添加static修饰。(节省内存

    实例变量既然使用final修饰了,说明该实例变量值不会随着对象的变化而变化。
    该实例变量前面应该添加: static关键字,变为静态的,存储在方法区。

  • 终极结论:

    • static final联合修饰的变量称为''常量”。
    • 常量名建议全部大写,每个单词之间采用下划线衔接。
  • 常量:实际上常量和静态变量一样,区别在于:常量的值不能变。

  • 常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。

package com.mike.test;

public class Test {
    public static void main(String[] args) {


    }
}

class User{
    //实例变量
    //编译器报错
    //final int age ;

    //实例变量
    //可以,因为程序员手动赋初始值了。
    final double height = 1.8;

    //实例变量
    final double weight;
    //构造方法
    public User() {
        //这个weight = 80;是赶在构造器赋默认值之前赋值的,编译器就会认为你已经赋初始值了
        this.weight = 80;
        //系统赋默认值是在这个时候,weight = 0;

    }
}

总之:final修饰的东西都是不能变的

posted @ 2022-03-05 13:35  海边蓝贝壳  阅读(26)  评论(0编辑  收藏  举报