美文网首页
final关键字

final关键字

作者: 帮我的鸵鸟盖个章 | 来源:发表于2019-10-24 14:16 被阅读0次

    一、final关键字可以用来修饰类、方法、变量。各有不同。

    A、修饰类(class)。

     1. 该类不能被继承。 
        2. final类中的所有成员方法都会被隐式地指定为`final`方法。
        3. 用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成`final`类
    

    B、修饰方法(method)

     1. 该方法可以被继承,但是不能被覆盖。 
        2.  用途:一个类不允许子类覆盖该方法,则用`final`来修饰 
        3. 好处:可以防止继承它的子类修改该方法的意义和实现;更为高效,编译器在遇到调用`fianal`方法转入内嵌机制,提高了执行效率。 
        4. 注意:父类中的`private`成员方法不能被子类覆盖,因此,`private`方法默认是final型的(可以查看编译后的class文件)
    

    C、修饰变量(variable)

     1. 用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。 
        2. 常量命名规范,如果是一个单词,所有字母大写,如果是多个单词,每个单词都大写,中间用下划线隔开
     3. final修饰变量叫做常量,一般会与`public` ,`static`共用
        4.  特点:可以先声明,不给初值,这种叫做`final空白`。但是使用前必须被初始化。一旦被赋值,将不能再被改变。
    

    D、修饰参数(arguments)

     1. 用`final`修饰参数时,可以读取该参数,但是不能对其作出修改
    

    【一道面试题】使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

    eg:

    public static void main(String[] args) {
            final StringBuffer sbf = new StringBuffer("我用双手");
            System.out.println(sbf);
            System.out.println(System.identityHashCode(sbf));
            sbf.append(",成就你的梦想。");
            System.out.println("after append ====>");
            System.out.println(sbf);
            System.out.println(System.identityHashCode(sbf));
        }
    

    打印结果:

    我用双手
    1915910607
    after append ====>
    我用双手,成就你的梦想。
    1915910607
    
    

    可见,引用对象的内容变了,但是引用的地址没有变。

    相关文章

      网友评论

          本文标题:final关键字

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