Java基础语法:final修饰符


一、final类

描述:

  • 'final'修饰的类不能被继承,没有子类。
  • 例如,我们是无法写一个类去继承String类,然后对String类型扩展的,因为API中已经将String类定义为'final'的了。

示例:

public final class Person {
}
/*
    以下代码编译报错
    class Student extends Person{
    }
*/




二、final方法

描述:

  • 'final'修饰的方法可以被子类继承,但是不能被子类重写
  • 例如,每个类都是Object类的子类,继承了Object中的众多方法,在子类中可以重写toString方法、equals方法等,但是不能重写getClass方法、wait方法等,因为这些方法都是使用fianl修饰的。

示例:

public class Person {
    public final void print() {
    }
}

class Student extends Person {
    /*
    	以下代码编译报错
        public void print() {
        }
    */
}




三、常量

描述:

  • 'final'修饰的变量表示常量只能被赋值一次,赋值后值不能再被改变。

注意:

  1. 修饰形式参数时,因为在调用方法传参的时候会赋值,所以不能在方法体里再赋值。

    public class Person {
        public void print(final int num) {
            /*
                以下代码编译报错
                num = 1;
            */
        }
    }
    
  2. 修饰成员变量时,可以选择在声明的同时赋值,或在匿名代码块中赋值 ,或在构造器中赋值(类中出现的所有构造器都要写)。

    public class Person {
        Person() {
            num = 1;
        }
    
        Person(int num) {
            this.num = num;
        }
    
        private final int num;
    }
    
  3. 修饰静态变量时,可以选择在声明的同时赋值,或在静态代码块中赋值 。

    public class Person {
        static {
            INT_NUM = 1;
        }
        /* 静态常量命名规范为:全部字母大写,单词用下划线分隔。 */
        private static final int INT_NUM;
    }
    
  4. 修饰引用变量时,不能改变引用保存的对象内存地址,但可以改变对象的属性值。

    public class Person {
    
        private int age;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public static void main(String[] args) {
            final Person person = new Person();
            person.setAge(1);
            person.setAge(2);
            person.setAge(3);
            /*
                以下代码编译报错
                person = new Person();
            */
        }
    }
    




posted @ 2020-11-28 10:16  conyoo  阅读(366)  评论(0编辑  收藏  举报