美文网首页
final关键字

final关键字

作者: 放开好人 | 来源:发表于2020-11-03 22:43 被阅读0次

本文为了梳理JAVA基础而整理,大部分都借鉴于csdn一位大神,下附地址,若侵权请致邮箱fangkai1011@163.com

https://blog.csdn.net/topdeveloperr/article/details/81414318


final是java的一个关键字,他可以用于修饰类,方法,变量。此关键字的作用在于表明它所修饰的内容是不可改变的。

1、修饰变量

  • final修饰的变量不能进行更改。
  • 若static与final一起修饰的常量,会占据一段不能改变的内存空间。一般用来记录系统启动时的常量值。规则如下

private static final int TEST_FINAL = 1;

  • 修饰引用变量时可变(指的其引用不变,但引用的对象的内容是可变的),基本变量不可变(意味着这个基本类型的值不能改变,包括String),具体可以了解值传递与引用传递。
        final StringBuffer aa = new StringBuffer("123");//引用变量
        System.out.println(aa);//输出123
        aa.append("234");
        System.out.println(aa);//输出123234
        final String bb = "abc";//基本变量
        bb = "bcd";//编译不通过
  • final成员变量赋值,一是定义即赋值,且无法更改。二是定义不赋值,构造方法赋值。
  • final修饰类变量时,新建类对象及类方法都不可进行变更操作。
  • final修饰方法变量时,方法内只能进行一次赋值,且无法进行更改。但每个新建对象中的变量值互不影响。

2、修饰方法

  • 可以被子类继承,但不能被重写。若继承后子类中有父类中重复的final方法名,则编译不通过。
  • 一般对一个方法加上final关键字作为修饰,代表这个方法你认为不需要再重写和修改,而是想要确保在继承中方法的行为保持不变。
  • 在过去,建议使用final 方法的另一个原因在于效率,final方法是在程序编译的时候就静态绑定了,但是在如今的jvm中这个速度已经可以忽略不计了。并且,也不再建议出于效率目的使用final。
  • 此外,一个类中所有的private方法都是隐式的被指定为final 的。因此对private方法添加final关键字没有任何意义。private方法不能被取用,因此也无法覆盖。
  • 继承后可以直接使用。
class ParentOne{
    public final void print(){
        System.out.println("我是final父类方法");
    }
}
class ChilrenOne extends ParentOne{
    public void printOne(){
        System.out.println("我是子类");
    }
}
public class TestFinal {
    public static void main(String[] args) {
        ChilrenOne children = new ChilrenOne();
        children.print();
        children.printOne();
    }
}

3、修饰类

  • 修饰类不能被继承。
  • final修饰类可以继承其他类。

class Parent {}
final class Person extends Parent{} //可以继承Parent类
class Child extends Person{} //不能继承Person类

相关文章

网友评论

      本文标题:final关键字

      本文链接:https://www.haomeiwen.com/subject/xszivktx.html