zoukankan      html  css  js  c++  java
  • 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 修饰方法提内部的变量

  • 相关阅读:
    相对路径和绝对路径的问题"/"带不带斜杠
    El表达式获取项目名称
    struts 中的创建Action的三种方法
    maven中的profile文件的解析
    Maven中模块的聚合以及对jar包的继承
    Maven中解决依赖冲突的问题
    maven中的传递依赖和传递依赖的解除
    String类为什么是final的
    jdbc 报错解决办法
    org.hibernate.PropertyValueException: not-null property references a null or transient value:
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9471340.html
Copyright © 2011-2022 走看看