吹静静

欢迎QQ交流:592590682

学习过程:

定义:

final 关键字

  使用final关键字做标识有“最终的”含义

final 可以修饰类、方法、属性和变量

  1、final 修饰类,则该类不允许被继承

  2、final 修饰的引用类型的数据,那么指的是地址不可变,但是对象中的元素或者属性值可以改变

  3、final 修饰方法,则该方法不允许被覆盖(重写)

  4、final 修饰属性

    则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)

    或在构造方法中赋值(只能选其一)  

  5、final 修饰变量,则该变量的值只能赋值一次,即变为常量。

  6、对于成员常量要求在对象创建完成之前给值;对于静态常量而言要求在类加载完成之前给值

注意:常量的存储和方法区中的运行时常量池有关

public class A {
    private final int i;
    /*
    {
        i = 4;
    }
    */
    public A(){
        // this(5);
        this.i = 0;
    } // 无参构造中未初始化常量i
    public A(int i){
        this.i = i; // 常量的二次赋值
    }
}

实例1:

final 修饰类,则该类不允许被继承

public final class Animal { //final修饰的父类,
    public int age = 10;
    public String name;
    public void eat() {
        System.out.println("动物具有吃东西的方法");
    }
}

此时如果子类要继承用final修饰的类就会报错

实例2:

final 修饰方法,则该方法不允许被覆盖(重写)

public class Animal { 
    public int age = 10;
    public String name;
    public final void eat() { //final修饰的父类的方法
        System.out.println("动物具有吃东西的方法");
    }
}

父类的方法被final定义之后,子类是不可以重写父类的方法的,编译会报错。

实例3:

final 修饰变量,则该变量的值只能赋值一次,即变为常量

被final修饰的变量是不可以再次赋值的,所以报错。

实例4:

final 修饰属性

    则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)

    或在构造方法中赋值(只能选其一)

上面图是一个不赋值的操作。

上图是一个定义常量之后在构造方法里面赋值的方式。

 实例5:

final 修饰方法提内部的变量

 

posted on 2018-08-15 14:27  吹静静  阅读(219)  评论(0编辑  收藏  举报