• Java final


    学习过程:

    定义:

    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 修饰方法提内部的变量

  • 相关阅读:
    群辉synology实现百度云盘资源同步
    Java下如何保证多线程安全
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java ThreadPool线程池
    多个线程交替执行
    高并发编程Condition深入解析
    哨兵挂了,Redis还能正常工作吗?
    Java开发实用的面试题及参考答案
    浅谈双亲委派机制的缺陷及打破双亲委派机制
    多线程交替执行
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9471340.html
Copyright © 2020-2023  润新知