zoukankan      html  css  js  c++  java
  • final使用详解

    final的使用及注意事项

    final是一个可以修饰变量,方法,类的修饰符

    final修饰的方法不能被重写

    final修饰的类不能被继承

    final修饰的变量为一个常量

    final不能与abstract一起使用

    注意:当final修饰一个变量时要么在声明时就给该变量赋值,要么在该类的构造函数中给该变量赋值

    例如 final int i=9;//这就是在声明时就为变量赋值

    局部内部类访问局部变量时该局部变量必须被final修饰(原因看使用final后发生的优化)

    final修饰的基本数据类型其值不可以改变

    final修饰的引用数据类型,其指向是不可以改变的,但其指向的对象的内容是可以改变的

    使用final的目的

    一、 保证安全性,例如当一个方法被final修饰以后它就不能被重写,那么在它的子类中是不可以覆盖这个方法的,所以该方法在它的子类中安全性就得到了保证

    二、 高效,在早期的JDK中若一个方法被final修饰时,当调用该方法时是直接使用方法的代码来替换,省去了方法出栈入栈的过程,提高了效率,与C++中的内联函数相似,现在的JDK好像提供了其他的优化方法

    使用final后发生的一些优化

    一、 final修饰变量后,在编译时就直接把final对应的常量将变量替换,这也是局部内部类访问局部变量时,该局部变量必须被final修饰的原因,当局部变量被final修饰时,局部内部类访问该变量时会将该变量写入该内部类中方法区中的常量池中,即使该局部变量出栈以后,该内部类依然可以找到该变量对应的值

    例如 final int i=5;  在编译的时候就直接把程序中出现i变量的地方全部替换为5并存储进常量池中。

    内部类知识可以参考博客中内部类的章节

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/zhaolei1996/p/10623406.html
Copyright © 2011-2022 走看看