栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

final关键字

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

final关键字

about Me

欢迎各位读者访问,大家一起学习。

优秀是一种习惯♡♡♡

做更好的自己!

本人见识有限,写到博客难免有错误或疏忽的地方,还望各位大佬多多指点,在此表示感激不尽。♡♡♡


一:final关键字
  1. final是什么?

    final是java中的一个关键字,用来修饰类,方法,变量。一旦使用final关键字修饰,将不能再次改变这个引用。final也被称为**最终的**,不可改变的。

  2. final的特点?
    1. final表示最终的,不可改变的。
    2. final修饰的局部变量,只能赋一次值。
      public static void main(String[] args) {
              //定义一个局部变量用final修饰
              final int i = 100; 
              //被final修饰的局部变量无法重新赋值
              //i = 300;     //报错
          }
      
            //使用final声明一个局部变量k
              final int k;
            //第一次给k赋值
              k = 100;   //编译成功
            //第二次给k赋值
            //k = 200;   //编译失败:因为使用final修饰的局部变量只能赋一次值
              System.out.println(k);
      
    3. final修饰的方法,无法被覆盖重写
      //定义一个父类A
      class A {
          //使用final修饰method方法
          public final void method() {
          }
      }
      //子类B继承父类A
      class B extends A {
      //   下面会报错,因为使用final修饰的方法无法被覆盖重写
      //    @Override
      //    public void method() {
      //        super.method();
      //    }
      }
      
    4. final修饰的,无法被继承。
      //定义一个父类A
      final class A {
      }
      //子类B继承父类A
      //会报错:因为父类使用final关键字修饰,所以子类无法继承父类
      //class B extends A {
      
      //}
      
    5. final修饰的引用,只能指向一个对象。

      使用final修饰的引用,永远只能指向一个对象,无法在指向其他对象,并且指向的对象不会被垃圾回收机制回收,直到方法结束才会释放空间。

      注意:虽然final指向的对象A后不能在指向其他对象,但是对象A内部的数据还是可以修改。

      public class FinalTest03 {
          public static void main(String[] args) {
              //创建一个person对象
              Person p  = new Person(20);
              //打印输出age
              System.out.println(p.age);  //20
              //创建一个Person对象使用final修饰
              final Person p1 = new Person(30);
              //编译报错,因为不管变量是引用变量还是成员变量只要被final修饰都只能赋值一次值
              //p1 = new Person(40); //编译报错
              //p1 = null;    //编译报错
              p1.age = 40;   //编译成功
              System.out.println(p1.age); //40
          }
      }
      //定义一个person对象
      class Person {
          int age;
          //无参构造
          Person(){
      
          }
          //有参构造
          Person(int age){
              this.age = age;
          }
      }
      

内存图理解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlInvYdA-1636361416778)(https://gitee.com/tornado010930/images/raw/master/image-20211108144914330.png)]

  1. final修饰的实例变量必须手动初始化,不能采用系统默认值。

    final修饰的实例变量,系统不负责赋默认值,程序员必须手动赋值。这个手动赋值在变量后面赋值可以,在构造方法中赋值也可以。

    class Hello{
        //使用final修饰的实例变量必须手动赋值
       final int a = 100;
       //可以在构造方法中赋值,但是必须赋值。
       final String b;
        Hello(){
            this.b = "HelloWorld";
        }
    }
    
  2. final修饰的实例变量一般和static联合使用,称为常量。

    使用final修饰的变量不能改变,如果要是创建100个对象,就会在堆内存中开辟100块空间,而其中被final修饰的值都是相同的。所以这样会耗费空间,所以使用static修饰之后就会随类的加载而加载。一个类中只有一份,所有的对象共有,存储在方法区,经常被称为常量。常量一般全部为大写字母,如果有多个字母可以使用下划线分割:例如 static final Double PI = 3.1415926;

    public class FinalTest05 {
        public static void main(String[] args) {
            //因为使用static修饰所以直接通过类名.调用
            String country = Person01.COUNTRY;
            System.out.println(country);    //中国
        }
    }
    class Person01{
        String name;
        int age;
        //使用static和final修饰属于常量
        static final String COUNTRY = "中国";
    }
    
    
    

不要在最能吃苦的年纪选择了安逸!!! — Tornado♥

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446133.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号