精华内容
下载资源
问答
  • Java中的final关键字 1、修饰类的成员变量 这是final的主要用途之一,和C/C++的const,即该成员被修饰为常量,意味着不可修改。   上面的代码对age进行初始化后就不可再次赋值,否则编译时会报类似上图的错误。 ...
  • final关键字;使用final定义的类不能够再有子类即任何类都不能够继承以final声明的父类;使用final定义的方法不能被子类所覆写;使用final定义的变量就成为了常量常量必须在定义的时候设置好内容并且不能修改;谢谢大家...
  • final关键字的使用.mp4

    2020-04-23 10:07:25
    final关键字的使用f
  • Java final关键字

    2017-05-13 23:57:42
    Java final关键字的学习demo
  • hi 大家好,今日,天气剧变,非常冷,不想出门,于是给大家写了篇文章,关于android final关键字及final,finally,finalize的区别相关知识,具体详情如下所示: 先预告一下,下文中仅涉及java语法的讨论,和Android...
  • 在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量),下面通过本篇文章给大家介绍java中的final关键字,对java fina关键字相关知识感兴趣的朋友一起看看吧
  • Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例
  • 主要介绍了Java中的final关键字深入理解的相关资料,需要的朋友可以参考下
  • 主要介绍了详解Java编程中static关键字和final关键字的使用,是Java入门学习中的基础知识,需要的朋友可以参考下
  • final关键字

    2018-10-17 16:29:52
    2、final类型初始化的两种方法,以及实例 (1)显示初始化 (2)在构造函数中进行初始化 第一个实例是错误的因为即使第二步赋值与第一步赋值是相同的,但是还是进行了二步赋值,所以是错误的。 2、实例2...

    1、

    在这里插入图片描述


    2、final类型初始化的两种方法,以及实例
    (1)显示初始化
    (2)在构造函数中进行初始化

    在这里插入图片描述

    第一个实例是错误的因为即使第二步赋值与第一步赋值是相同的,但是还是进行了二步赋值,所以是错误的。


    2、实例2(形参为final类型的)
    在调用方法t的时候,会传进实参,这个时候就已经赋初值了,之后在方法内就不能再改变了,因此前两个是错误的。
    主要是看有没有改变final修饰对象对应的值

    展开全文
  • this关键字 Java中提供了 this 关键字来指代当前对象,用于在方法中访问对象的其他成员。 通过 this 关键字调用成员方法,解决与局部变量名称冲突问题 package com.wang.demo1; public class Person { int age; //...
  • final 关键字用法

    2018-12-04 11:05:42
    java程序设计中,final 关键字用法,通过代码演示java程序设计中,final 关键字用法,
  • Java中final关键字详解

    2020-12-18 13:01:45
    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。 主要介绍:一.final关键字的基本...
  • super关键字和final关键字 ***super关键字的用法:*** 1 在子类当中如果想要调用父类当中的构造方法时,可以用super调用,并且在构造方法中一直使用super调用父类的构造方法直到Object类,因为Object类是所有类的...
                         super关键字和final关键字
           ***super关键字的用法:***
    	            1  在子类当中如果想要调用父类当中的构造方法时,可以用super调用,并且在构造方法中一直使用super调用父类的构造方法直到Object类,因为Object类是所有类的父类。
    	            2  在子类当中想要调用父类当中的属性,可以用super.父类属性进行调用。
    	            3  在子类当中想要调用父类当中的方法时,可以直接使用super.父类方法名进行调用。
    	
    	    ***final关键字的用法:***
    	            1  由final修饰的实例变量需要自己赋值,且不可再更改。
    	            2  由final修饰的实例变量一般和static联合使用。
    	            3  由final修饰的类无法被继承,也就是没有子类。
    	            4  由final修饰的方法无法被子类重写。
    	            5  final表示最终的,最后的,无法与关键字abstract联合使用。
    
    展开全文
  • final关键字用法总结

    千次阅读 2019-01-23 22:08:51
    一、final关键字的基本用法 在java中,final关键字可以用来修饰类、方法、变量(包括成员变量和局部变量)。下面我们从这三个方面了解一下final的用法。 1、修饰类 final修饰一个类时,表示该类不能继承。final类中...

    欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。

    一、final关键字的基本用法

    在java中,final关键字可以用来修饰类、方法、变量(包括成员变量和局部变量)。下面我们从这三个方面了解一下final的用法。

    1、修饰类

    final修饰一个类时,表示该类不能继承。final类中的成员变量可以根据需要设为final,但是final类中的所有成员方法都会被隐式地指定为final方法。 **注意**:在使用final修饰类的时候,一定要谨慎选择,除非这个类以后不会用来继承或者出于安全考虑,尽量不要将类设计为final类。

    在这里插入图片描述

    2、修饰方法

    “使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“

    因此,如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。即父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。

    final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。(注:类的private方法会隐式地被指定为final方法)

    class Animal{
        /**
         * 因为private修饰,子类中不能继承到此方法,因此,子类中的getName方法是重新定义的.
         * 属于子类本身的方法,编译正常.
         */
        private final void getName() {}
    
        /**
         *  因为pblic修饰,子类可以继承到此方法,导致重写了父类的final方法,编译出错.
         */
    //  public final void getName() {}
    }
    
    class Cat extends Animal {
        public static void main(String[] args) {
    
        }
    
        public void getName() {}
    }
    

    3、修饰变量

    修饰变量是final用得最多的地方,也是本文接下来要重点阐述的内容。

    final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

    当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。

    final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。

    class Animal {
        private final int count = 0;
        public Animal() {
            count = 1; //报错
            final Object object = new Object();
            object = new Object(); //报错
        }
    }
    

    二、深入理解final关键字

    在了解了final关键字的基本用法之后,这一节我们来看一下final关键字容易混淆的地方。

    1、类的final变量和普通变量有什么区别?

    当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。
    那么final变量和普通变量到底有何区别呢?下面请看一个例子:

    public class Test {
        public static void main(String[] args) {
            String a = "helloworld";
            final String b = "hello";
            String c = "hello";
            String x = b + "world";
            String y = c + "world";
            System.out.println(a == x);
            System.out.println(a == y);
        }
    }
    

    输出结果:true ; false

    大家可以先想一下这道题的输出结果。为什么第一个比较结果为true,而第二个比较结果为fasle。这里面就是final变量和普通变量的区别了,当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。这种和C语言中的宏替换有点像。因此在上面的一段代码中,由于变量b被final修饰,因此会被当做编译器常量,所以在使用到b的地方会直接将变量b 替换为它的值。而对于变量d的访问却需要在运行时通过链接来进行。想必其中的区别大家应该明白了,不过要注意,只有在编译期间能确切知道final变量值的情况下,编译器才会进行这样的优化,比如下面的这段代码就不会进行优化:

    public class Test {
        public static void main(String[] args) {
            String a = "helloworld";
            final String b = getHello();
            String x = b + "world";
            System.out.println(a == x);
        }
        public static String getHello() {
            return "hello";
        }
    }
    

    这段代码的输出结果为false。这里要注意一点就是:不要以为某些数据是final就可以在编译期知道其值,通过变量b我们就知道了,在这里是使用getHello()方法对其进行初始化,他要在运行期才能知道其值。

    2、被final修饰的引用变量指向的对象内容可变吗?

    在上面提到被final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容可变吗?看下面这个例子:

    public class Test {
        public static void main(String[] args) {
           final Object object = new Object();
            System.out.println(++object.i);
        }
    }
    class Object {
        public int i = 0;
    }
    

    输出结果: 1

    这段代码可以顺利编译通过并且有输出结果,输出结果为1。这说明引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。

    3、final参数的问题

    在实际应用中,我们除了可以用final修饰成员变量、成员方法、类,还可以修饰参数、若某个参数被final修饰了,则代表了该参数是不可改变的。如果在方法中我们修改了该参数,则编译器会提示你:The final local variable i cannot be assigned. It must be blank and not using a compound assignment。看下面的例子:

    public class TestFinal {
        public static void main(String[] args) {
            TestFinal testFinal = new TestFinal();
            int i = 0;
            testFinal.changeValue(i);
            System.out.println(i);
        }
    
        public void changeValue(final int i) {
            //final参数不可改变
            i++; //报错,因为参数i已经被final修饰了
            System.out.println(i);
        }
    }
    

    上面这段代码changeValue方法中的参数i用final修饰之后,就不能在方法中更改变量i的值了。值得注意的一点,方法changeValue和main方法中的变量i根本就不是一个变量,因为java参数传递采用的是值传递,对于基本类型的变量,相当于直接将变量进行了拷贝。所以即使没有final修饰的情况下,在方法内部改变了变量i的值也不会影响方法外的i。

    再看下面这段代码:

    public class TestFinal {
        public static void main(String[] args) {
            TestFinal testFinal = new TestFinal();
            StringBuffer sb = new StringBuffer("hello");
            testFinal.changeValue(sb);
            System.out.println(sb);
        }
    
        public void changeValue(final StringBuffer sb) {
            //final修饰引用类型的参数,不能再让其指向其他对象,但是对其所指向的内容是可以更改的。
            //buffer = new StringBuffer("hi");
            sb.append("world");
        }
    }
    

    运行结果:helloworld

    运行这段代码就会发现输出结果为 helloworld。很显然,用final进行修饰虽不能再让buffer指向其他对象,但对于buffer指向的对象的内容是可以改变的。现在假设一种情况,如果把final去掉,结果又会怎样?看下面的代码:

    public class TestFinal {
        public static void main(String[] args) {
            TestFinal testFinal = new TestFinal();
            StringBuffer sb = new StringBuffer("hello");
            testFinal.changeValue(sb);
            System.out.println("main方法里的 :" + sb);
        }
    
        public void changeValue(StringBuffer sb) {
            //sb重新指向另一个对象
            sb = new StringBuffer("say");
            sb.append("world");
            System.out.println("changeValue方法里的 :" + sb);
        }
    }
    

    输出结果:
    changeValue方法里的 :sayworld
    main方法里的 :hello

    从运行结果可以看出,将final去掉后,同时在changeValue中让buffer指向了其他对象,并不会影响到main方法中的buffer,原因在于java采用的是值传递,对于引用变量,传递的是引用的值,也就是说让实参和形参同时指向了同一个对象,因此让形参重新指向另一个对象对实参并没有任何影响。


    关于 final 的两个重排序规则了监考下面的博文:final的两个重排序规则

    展开全文
  • 1.final关键字有几种用法 (1)修饰变量 用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。final 修饰的变量可以先声明,后赋值。 final修饰基本类型时,起到常量的作用,基本类型...

    1.final关键字有几种用法

    (1)修饰变量

    • 用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。final 修饰的变量可以先声明,后赋值。
    • final修饰基本类型时,起到常量的作用,基本类型的值不可变。
    • final修饰引用类型时,不能再指向其他的对象,但被引用的对象的值是可以改变的(引用变量的值
      实际上是它所引用的对象的地址)。
    • 当用final作用于类的成员变量时,成员变量(局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值。

    (2)修饰方法参数

    • 编写方法时,可以在参数前面添加final关键字,它表示在整个方法中,不会(实际上是不能)改变参数的值,具体类似于修饰数据。
    • 即不能改变参数的值,但是可以改变引用类型参数的对象的值。同时,即使没有final的修饰,参数的改变也不会影响到方法外的变量。

    (3)修饰方法

    • final关键字修饰方法,它表示该方法不能被覆盖(重写)。另外,类中所有的private方法都隐式地指定为是final的,由于无法在类外使用private方法,所以也就无法覆盖它。此时可以在子类中定义相同的方法名和参数,这种情况不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。可以对private方法添加final修饰符,但并没有添加任何额外意义。
      (4) 修饰类
    • 用final修饰的类是无法被继承的。且final类中的所有成员方法都会被隐式地指定为final方法。

    2.final 与 static 关键字区别?

    在这里插入图片描述

    • static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变,运行代码,两次打印的j值都是一样的,而i的值却是不同的。

    3.final变量和普通变量的区别

    • 当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。而对于普通变量的访问却需要在运行时通过链接来进行。
      在这里插入图片描述

    4.final、static、static final修饰的字段赋值的区别

    • (1)static修饰的字段在类加载过程中的准备阶段被初始化为0或null等默认值,而后在初始化阶段(触发类构造器)才会被赋予代码中设定的值,如果没有设定值,那么它的值就为默认值。
    • (2)final修饰的字段在运行时被初始化(可以直接赋值也可以在实例构造器中赋值),一旦赋值便不可更改;
    • (3)static final修饰的字段在Javac时生成ConstantValue属性,在类加载的准备阶段根据 ConstantValue的值为该字段赋值,它没有默认值,必须显式地赋值,否则Javac时会报错。 可以理解为在编译期即把结果放入了常量池中。

    5.final关键字的好处

    • final关键字提高了性能。JVM和Java应用都会缓存final变量。

    • final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。

    • 使用final关键字,JVM会对方法、变量及类进行优化。

    • final和abstract这两个关键字是反相关的,final类就不可能是abstract的

    • 在匿名类中所有变量都必须是final变量

    6. 使用final方法的原因

    • 第一个原因是把方法锁定,以防任何继承类修改它的含义;
    • 第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。

    参考链接:https://blog.csdn.net/u012723673/article/details/80580011

    展开全文
  • final 关键字

    2018-05-08 15:46:30
    Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。...
  • final关键字详解 一. 使用 在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。 下面就从这三个方面来了解一下final关键字的基本用法。 1.修饰类: 修饰一个类的时候,该类不可被继承. 需要...
  • public final class 类名称 { //...... } 含义:当前这个类不能有任何子类。(太监类) 注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没有儿子) 2. 可以用来修饰一个方法 ...
  • 一、Java中的final关键字 1、final关键字 2、final关键字修饰类 3、final关键字修饰方法 4、final关键字修饰变量 5、final不能修饰 6、final关键字的好处 一、Java中的final关键字 1、final关键字 final的...
  • final关键字的作用

    2021-01-18 14:26:55
    final关键字的作用 相信对于final的用法,大多数人都可以随口说出三句话: 1、被final修饰的类不可以被继承 2、被final修饰的方法不可以被重写 3、被final修饰的变量不可以被改变 重点就是第三句。被final修饰...
  • Java中super关键字与final关键字

    千次阅读 2020-04-19 19:50:39
    文章目录Java中super关键字Java中final关键字 Java中super关键字 super 可以理解为是指向自己父(超)类对象的一个指针,而这个超类指的是离自己最近的一个父类。 super关键字的作用: 调用父类的构造方法 调用父类...
  • final关键字概念与四种用法

    千次阅读 多人点赞 2020-09-24 20:39:37
    final关键字的含义: final关键字代表最终的、不可改变的 常见的四种用法: ① 可以用来修饰一个类 ② 可以用来修饰一个方法 ③ 可以用来修饰一个局部变量 ④ 可以用来修饰一个成员变量 1、final关键字用于修饰类 ...
  • final关键字的4种用法

    万次阅读 多人点赞 2018-08-08 17:12:35
    下面我们来了解一下final关键字及其用法。 final关键字 在java中,final的含义在不同的场景下有细微的差别,但总体上来说,它指的是“这是不可变的”。下面,我们来讲final的四种主要用法。 ...
  • final关键字代表最终,不可改变的,常见四种用法: 1:可以用来修饰一个类; 2:可以用来修饰一个方法; 3:可以用来修饰一个局部变量; 4:可以用来修饰一个成员变量。 1:可以用来修饰一个类; /* 当final关键字...
  • 【Java语言基础】final关键字 修饰词:final 最终的最后的 final关键字可用于修饰符,变量和方法,用于表示它修饰的类,方法和方法不可改变。 final 最终的最后的 final修饰变量时,表示该变量一旦获得了初始值之后...
  • final 关键字的作用

    2020-04-20 14:58:20
    本文目录:写在前面:final关键字的作用总结 写在前面:         final 关键字的作用是每次面试的时候必问求职者的两个问题之一,另外一个问题就是static 关键字。final 和static...
  • 深入理解final关键字(详解)

    万次阅读 多人点赞 2019-02-19 14:33:50
    提及final关键字都会想到一个常见的面试题就是: final、finally、finalize区别 在这里我们来简单回忆一下这三者的区别, final: Final用于修饰类、成员变量和成员方法。final修饰的类,不能被继承(String、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 263,766
精华内容 105,506
关键字:

final关键字