java学习-修饰符final

105 阅读1分钟

1.finlal是java语言中的一个关键字 2.final表示最终的,不可变的。

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

4final修饰的类无法继承

5.final修饰的方法无法覆盖

1663346128568.jpg

public class finalTest {
    /**
     *final修饰的变量只能赋一次值(万变不离其宗)
     * 引用是不是一个变量呢???是
     * final修饰的引用:
     * 该引用只能指向一个对象,并且他只能永远指向该对象
     */
    public static void main(String[] args) {
        /**
         * 1.代码不管怎么变化,person也是一个变量
         * 2.并且在该方法执行过程中,因为final修饰的对象指向了此对象,引用了此对象,
         * 所以被final修饰的对象不会被垃圾回收器回收,直到当前方法结束,才会释放空间。
         * 3.被修饰的对象
         */
        final Person person = new Person(20);
        System.out.println(person.age);
        /*
        如果给Person添加final关键字,将只能指向一个对象,所以这边会报错
        person = new Person(30);
        就是是赋值为空也不行
                person = null;
        */
        /**
         * 虽然final修饰的对象A不能指向对象B,但是A对象内部数据可以随便改变
         */
        person.age=140;
        System.out.println(person.age);
    }

    static class Person{
        int age;
        /**
         * 1、实例变量在堆中,一个对象一份,100个对象100份;
         * 2、实例变量既然使用final修饰了,说明该实例变量值不会随着对象的变化而变化;
         * 3、该实例变量前面应该添加static关键字,变为静态的,存储在方法区。
         * 4、final修饰的实例变量,变量必须赋值默认值
         * 5、常量一般都是公开的,公开安全性不会受到影响,且任何需要的地方都能调用。
         */
        public static final int sex = 0;
        public Person(int age){
            this.age = age;
        }

        public int getSex() {
            return sex;
        }
    }
}