zoukankan      html  css  js  c++  java
  • java基础之关键字final

    final关键字简述####

    final关键字是在编写java程序中出现频率和很高的关键字,如果想要更好的编写java程序,那么掌握final关键字的运用是非常必要的。让我们先看一下final关键字可以修饰的地方有哪些

    • final关键字修饰在类上
    • final关键字修饰在方法上
    • final关键字修饰在成员变量上
    • final关键字修饰匿名内部类方法上
    鉴于本人知识结构有限,若有错误忘不吝赐教,甚为感谢。#####

    • final关键字修饰在类上
      当final关键字修饰在类上时代表该类是不可被继承,我们非常熟悉的String、Integer等都是由final修饰类,《java编程思想》里有阐述过String等基本类型的封装类之所以用final修饰就是不希望String类被其他类继承从而改变String类特性。
    public final class FinalKeyWordTest {
      public FinalKeyWordTest(){}
      public void myFinalMethod(){
          System.out.println("this final");
      }
    }
    class MyTest1 extends FinalKeyWordTest{ //编译错误}
    
    • final关键字修饰在方法上
      当final修饰在方法上时代表该该方法不允许被覆盖(重写)。《java编程思想》写到:使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。
      如果想要禁止子类覆盖某一个父类方法,那么使用final去修饰它是最好的办法
    public  class FinalKeyWordTest {
      public FinalKeyWordTest(){}
      public final void myFinalMethod(){
          System.out.println("this final");
      }
    }
    class MyTest1 extends FinalKeyWordTest{
        @Override
        public final void myFinalMethod(){//编译错误
              System.out.println("this sub final");
          }
    }
    
    • final关键字修饰在成员变量上
      用final修饰成员变量是最常见的运用方式,对于一个final修饰的变量:
      1.如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改。
    public  class FinalKeyWordTest {
      public final int i; //编译错误
    }
    
    public  class FinalKeyWordTest {
      public final int i;
      public FinalKeyWordTest(){
          this.i = 1;
      }
    }
    //编译是正确的
    

    2.如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

    public  class FinalKeyWordTest {
      public static void main(String[] args) {
          final MyTest1 m = new MyTest1();
          m = new MyTest1(); //编译错误
      }
    }
    

    public  class FinalKeyWordTest {
      public static void main(String[] args) {
          final MyTest1 m = new MyTest1();
          System.out.println(++ m.c);
      }
    }
    class MyTest1{
         int c = 0;
    }
    //正确
    
    • final关键字修饰匿名内部类方法上
      此处待整理状态,目前没有查到更多的资料显示为什么匿名内部类方法参数必须要final修饰,到是有查过几篇博客说的都很笼统,有的博客说匿名内部类方法参数之所以用final修饰 是不希望在方法内修改参数数据从而影响外部调用类方法执行。这么说其实不是很全面,我们知道java当中参数专递如果是基本数据类型那么是按值传递,如果是引用类型则是按引用传递。那么参数不管是 基本数据类型,还是引用类型 这说的都没有道理,如果参数是基本数据类型 内部类方法修改参数内容,外部类是根本获取不到的,如果参数是引用数据类型,内部类方法可以修改引用里的属性变量 从而是可以破坏外部调用类执行的
  • 相关阅读:
    TensorFlow小记
    Faster R-CNN学习记录
    C语言创建文件夹
    ffmpeg应用:将连续图像转为视频文件
    VMWare 搭建 Hadoop 完全分布式集群(含HBASE)
    HBASE 过滤器
    HBASE API 操作
    [Unity] 打包时报错:UnityEditor.BuildPlayerWindow+BuildMethodException
    [Unity] 有关Unity中使用VideoPlayer突然无法播放视频的问题
    [Unity3D]C#切换plane上的图片
  • 原文地址:https://www.cnblogs.com/gaoqiri/p/8242188.html
Copyright © 2011-2022 走看看