tzkf

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  26 随笔 :: 0 文章 :: 4 评论 :: 1914 阅读

final关键字

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

使用到final的情况:

  1. 当不希望类被继承时,可以用final修饰

    • final class Person{}
      
  2. 当不希望父类的某个方法被子覆盖(重写),使用final修饰方法

    • public final void function(){}
      
  3. 当不希望某个属性的值被修改,使用final修饰

    • final double TAX_RATE = 0.1
  4. 当不希望某个局部变量被修改,可以使用final修饰

    • final double TAX_RATE=0.08
      
final注意事项和细节
  1. final修饰的属性又叫常量,一般用XX_XX_XX来命名

  2. final修饰的属性在定义时,必须赋初值,并且以后不能再修改,赋值可以在如下位置之一[选择一个位置赋初值即可] :

    • 在定义时
    public final double TAX RATE=0.08;
    
    • 在构造器中
    public AA() {
    //构造器中赋值
    	TAX_RATE2 = 1.1;
    }
    
    • 在代码块中。
    {
      //在代码块赋值
      TAX_RATE3 = 8.8; 
    }
    
  3. 如果final修饰的属性是静态的,则初始化的位置只能是

    • 在定义时

    • 在静态代码块

    • 不能在构造器中赋值。(静态属性在类加载就会初始化,而构造器此时还未被调用)

    • public static final double TAX_RATE1 = 99.9; 
      public static final double TAX_RATE2; 
      static {
        TAX_RATE2 = 3.3; 
      }
      
  4. final类不能继承,但是可以实例化对象。

    final class Person{
    
    }
    Person person = new Person();
    
  5. 如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承,遵守继承机制,可以被子类使用。

  6. 如果一个类是一个final类,就没有必要用final修饰其中的方法

  7. final不能修饰构造方法

  8. fianl和static搭配,效率更高,不会导致类加载

    • System.out.println(Person.num);//使用num时不会导致类的加载,不会输出静态代码块的内容
      class Person{
      	public static final int num = 100static{
          System.out.println(“Person 静态代码块被执行”)
        }
      }
      
  9. 包装类(Integer Double Float Boolean等都是final),String也是final 不能被继承

posted on   T冰镇西瓜  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示