• final Java 关键字 深入浅出,简单理解


    final
    • 定义
      • Java的关键字
      • 被修饰的变量是不可变的
    • 使用
      • 数据
        • 修饰基本数据类型
          • 基本数据类型不可变的是其内容
        • 修饰引用数据类型
          • 引用数据类型不可变的是其引用
          • 引用所指定的对象内容是可变的
        
    public class Person {
            private String name;
    
    
            Person(String name){
                this.name = name;
            }
    
    
            public String getName() {
                return name;
            }
    
    
            public void setName(String name) {
                this.name = name;
            }
        }
    
    
        public class FinalTest {
            private final String final_01 = "chenssy";    //编 译期常量,必须要进行初始化,且不可更改
            private final String final_02;                //构造器常量,在实例化一个对象时被初始化
    
    
            private static Random random = new Random();
            private final int final_03 = random.nextInt(50);    //使用随机数来进行初始化
    
    
            //引用
            public final Person final_04 = new Person("chen_ssy");    //final指向引用数据类型
    
    
            FinalTest(String final_02){
                this.final_02 = final_02;
            }
    
    
            public String toString(){
                return "final_01 = " + final_01 +"   final_02  = " + final_02 + "   final_03 = " + final_03 +
                       "   final_04 = " + final_04.getName();
            }
    
    
            public static void main(String[] args) {
                System.out.println("------------第一次创建对象------------");
                FinalTest final1 = new FinalTest("cm");
                System.out.println(final1);
                System.out.println("------------第二次创建对 象------------");
                FinalTest final2 = new FinalTest("zj");
                System.out.println(final2);
                System.out.println("------------修改引用对 象--------------");
                final2.final_04.setName("chenssy");
                System.out.println(final2);
            }
        }
    
    
        ------------------
        Output:
        ------------第一次创建对象------------
        final_01 = chenssy   final_02 = cm   final_03 = 34    final_04 = chen_ssy
        ------------第二次创建对象------------
        final_01 = chenssy   final_02 = zj   final_03 = 46   final_04 = chen_ssy
        ------------修改引用对象--------------
        final_01 = chenssy   final_02 = zj   final_03 = 46   final_04 = chenssy
      • 方法
        • 被其标注的方法都是不能被继承,更改的
        • 使用原因
          • 进行方法锁定
          • 防止任何类对其修改
        • 父类的final方法不能被子类所重写即覆盖
          • 子类不能够存在与父类一模一样的方法
        
    public class Custom extends Person{
            public void method1(){
                System.out.println("Person's  method1....");
            }
     
     
        //    Cannot override the final method from person:子类不能覆盖父类的final方法
        //    public void method2(){
        //        System.out.println("Person's method2...");
        //    }
        }
        • 如果某个类被修饰,表明该类为最终类
        • 它不希望也不允许被继承
        • 在程序设计中处于安全状态
        • 存在原因
          • 不允许该类存在任何变化
          • 也不允许它有子类
      • 参数
        • 被修饰的参数是不可变的
        • 如果在方法中修改了这个参数,编译器回提示你
          • The final local variable i cannot be assigned. It must be blank and not using a compound assignment。
        • 存在原因
          • 在匿名内部类中,为了保持参数的一致性,若所在的方法的形参需要被内部类里面使用时,该形参必须为 final
        
    public class Custom {
            public void test(final int i){
                //i++;     ---final参数不可改变
                System.out.println(i);
            }
     
     
            public void test(final Person p){
             //p = new Person();    --final参数不可变
             p.setName("chenssy");
            }
        }
     
  • 相关阅读:
    关于PTA平台上使用python2/3书写代码误判问题
    随笔小记--乔帮主传
    随笔小记--读李安传
    Git与GitHub的简单了解(3)
    Git与GitHub的简单了解(2)
    Git与GitHub的简单了解(1)
    学习SFrame,根据GraphLab库
    结课:应用实例--照片字符识别 (photo OCR)
    大数据下的机器学习
    Java8之Stream用法
  • 原文地址:https://www.cnblogs.com/littlebob/p/12759322.html
Copyright © 2020-2023  润新知