Java基础_Final关键字
Final
final关键字
- 
final 是java语言中的一个关键字。 
- 
final表示最终的,不可变的。 
- 
final可以修饰变量以及方法,还有类等。 
- 
final修饰的局部变量,一旦赋值不能重新赋值。 
- 
final修饰的方法无法被覆盖,被重写 
- 
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;
    }
}

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修饰的东西都是不能变的
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号