• 技术文章 >Java >java教程

    java中final修饰符实例分析

    高洛峰高洛峰2017-01-24 15:41:18原创780
    final修饰符:

    final修饰成员变量必须有程序员显示指定初始值。
    类的Field:必须在静态初始化块中或声明该Field时指定初始值。
    实例Field:必须在非静态初始块中,声明Field或者构造器中指定初始值。

    final局部变量:必须由程序员显示初始化。

    final修饰的基本变量和引用类型变量的区别?

    final修饰的基本变量:不能对基本变量重新赋值。
    final修饰的引用变量:只保证这个引用类型所引用的地址不会变,即
    一直引用同一个对象,但这个对象完全可以发生改变。

    /**
      
    */
    import java.util.*;
    public class Demo5
    {
     public static void main(String[] args)
     {
      final B b = new B(22);
      b.test();
      //合法  改变值,但仍是指向同一个引用
      b.setAge(20);
      System.out.println(b.getAge());
      // 非法
      // b = null;
      b.test2();
     }
    }
     /**
     fianl修饰成员变量
    */
    class A
    {
     //合法
     final int a = 10;
     //构造器或初始化化块中指定初始值
     final String str;
     final int c;
     final static double d;
     {
      str = "hello";
      //非法
      // a = 100;
     }
     static 
     {
      d = 100;
     }
     
     // 构造器可对没在初始化块中指定的Field指定初始值
     public A()
     {
      // 非法
      // str = "ddd";
      c = 1000;
     }
     public double changFinal()
     {
      // 不能再普通方法中为final指定初始值
      // return d = 1000.90;
      return 0;
     }
    }
     /**
     fianl修饰数组 对象
    */
    class B
    {
     private int age;
     public B()
     {
     
     }
     
     public B(int age)
     {
      this.age = age;
     }
     
     public void setAge(int age)
     {
      this.age = age;
     }
     
     public int getAge()
     {
      return this.age;
     }
     
     public void test()
     {
      final int[] arr={23,434,56,898};
      System.out.println(Arrays.toString(arr));
      Arrays.sort(arr);
      System.out.println(Arrays.toString(arr));
      arr[2] = 200;
      System.out.println(Arrays.toString(arr));
      //下面对Arr重新赋值 非法
      // arr = null;
     }
     
     /**
      加深对final的理解
     */
     public void test2()
     {
      String str1 = "美好未来";
      //直接引用常量池中的"美好未来"
      String str2 = "美好"+"未来";
      //true
      System.out.println(str1 == str2);
      
      String s1 = "美好";
      String s2 = "未来";
      String s3 = s1+s2;
      //false  s1 s2只是变量 在编译时期不能确定 
      //若想在编译时期确定 则用 final修饰 s1 s2
      System.out.println(str1 == s3);
     }
    }

    小伙伴们是否对java中final修饰符有所了解了呢,相信注释中已经给大家解释的很清楚了,我这里就不再啰嗦

    更多java中final修饰符实例分析相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java final修饰符
    上一篇:Java中的private修饰符失效了 下一篇:Java修饰符 abstract,static,final 的区别详解
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 一起来聊聊与Java中性能相关的设计模式• Java图文详解之实现图书管理系统• JAVA外观模式详解• 详细整理java枚举的使用总结• 带你搞懂JAVA反射机制(总结分享)
    1/1

    PHP中文网