zoukankan      html  css  js  c++  java
  • java关键字final用法详解

    final关键字在java中也是属于比较常用的一种,因此也算得上是一个比较重要的关键字,有必要对它进行深入的学习。

    一、定义:用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义变量。(源自百度百科)

    二、作用:final关键字有着诸多用处,归纳总结起来,大概有一下几点:修饰类,修饰方法,修饰变量和修饰参数。

    1.修饰类:final修饰的类,拥有着不能被继承的特性,因为其所有的成员和方法都是默认final的,所以也不可以被覆盖,因此用的比较少,需要慎重考虑。

    public final class Person {
        public static void main(String[] args) {
            System.out.println("这是一个final类");
        }
    }

    2.修饰方法:用final来修饰方法,表明该方法不能被覆盖,这样做的考虑原因主要是防止任何继承类修改它的含义。

    关于private和final关键字有那么一点联系,类中的所有private方法都隐式的指定为final,由于无法在类外使用private方法,所以也就无法覆盖它。

    public class Person {
        //普通方法
        public void Demo1(){
            System.out.println("这是一个普通方法");
        }
        //final方法
        public final void Demo2(){
            System.out.println("这是一个final方法");
        }
    }
    
    class Student extends Person{
        //重写父类方法
        public void Demo1(){
            System.out.println("重写的方法");
        }
    }

    3.修饰变量:用final修饰的基本数据类型变量,其数值一经初始化就不允许修改,这就是我们通常所说的常量。用final修饰引用数据时,则其初始化后就不能修改引用指向另一个对象。

    class Test{
        public int a;
        public Test(int a){
            this.a = a;
        }
    }
    
    public class Person {
        //一经初始化值不可改变
        private final int A = 1;
        //在构造函数中初始化
        public final int B;
        public Person(int X){
            B = X;
        }
        //final修饰的引用数据
        public final Test C = new Test(1);
    }

     4.修饰参数:我们在编写方法的时候,可以在基本数据类型参数前面加上final来修饰,它表示在整个方法中,这个参数的值是不能被改变的。在引用数据类型参数前面加上final来修饰,则表明该参数的引用不可被改变,但值可以改变。

    public class Person {
        public static void main(String[] args) {
            Person person =  new Person();
            person.Demo(2);    
        }
    
        public void Demo(final int i){
            //i = 3;  final修饰的参数不可改变
            System.out.println(i);
        }
    }

    总结:final关键字属于较为常用的关键字之一,所以需要更深层次的了解学习,我这里列的几个作用都是我从网上别人那看到的,所以如果还有一些别的文中没有列出的方法,也希望各位大神多多指点。

  • 相关阅读:
    Spring AOP获取拦截方法的参数名称跟参数值
    mybatis generator逆向工程自动生成带中文注释修改版(添加了实体类注释)文末附有git下载地址
    关于Java编写多行注释遇到方法字符串中正好也有注释符号产生冲突的解决办法
    SpringBoot入门学习以及整合MyBatis
    IO跟NIO的区别
    redis的配置文件详解redis.conf
    Redis入门基础内容(转载整理非原创)
    深入网络协议来理解数据传输三(http协议详解)
    深入网络协议来理解数据传输二(转载整理)
    Python编写ATM(初级进阶)
  • 原文地址:https://www.cnblogs.com/libinhyq/p/9373396.html
Copyright © 2011-2022 走看看