• 第十二天


    1. final关键字的含义

    final表面意思就是不可更改的,恒量的意思;指的是无法改变的量,这与静态标量static是有区别的,静态变量指的是只有一份存储空间,值是可以改变的。使用final一定原因是出于软件设计的角度,因为别人看到final这个关键字就知道是什么意思,达到心领神会的效果,但也正是由于这种"语义"的存在,在程序设计中要谨慎使用,以免误用

    Javafinal修饰的就是常量,而且变量名要大写;

    Math类: public static final double PI = 3.14159265358979323846; ......java源码中好多变量都用final修饰

     

    2. final的作用

    final根据修饰位置的不同作用也不相同,针对三种情况:

      1)修饰变量,被final修饰的变量必须要初始化,赋初值后不能再重新赋值。

           注意:局部变量不在我们讨论的范畴,因为局部变量本身就有作用范围,不使用privatepublic等词修饰。

    虽然final可以修饰局部变量,但是一般情况下,我们在实际应用中几乎不会这么干!没多大的意义!

      2)修饰方法,被final修饰的方法代表不能重写。

      3)修饰类,被final修饰的类,不能够被继承。

          注意:final修饰的类,类中的所有成员方法都被隐式地指定为final方法。

     

    2.1 final修饰变量

    final修饰的变量必须显示的初始化,初始化可以以三种方式:1)定义时初始化,2)在构造器中设置值,3)在非静态块中为final实例变量设置值。

    final修饰变量指的是:这个变量被初始化后便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可变,即不能再指向其他的对象

    public class Test {
          final int a = 11;
          final int b;
          final int c;//c是final修饰的变量  不初始化  会报错
          public Test() {
              b=22;
          }
          {
              c = 33;
          }
    }

    如果final修饰的变量是对象类型,那么不可更改指的是该变量不可以再指向别的对象,但是对象的值时可以更改的,比如:

    public class Test {
          final int a = 11;
          final static Person person = new Person();
          public static void main(String[] args) {
            //a =22; final不能重新赋值
            //  person = new Person(); final不能重新指向新的地址
              person.setId(1);
              System.out.println(person.getId());//结果为1
              person.setId(2);
              System.out.println(person.getId());//结果为2
        }
    }

    上述是自定义类,即便是数组,List等集合类型,所保存的值也是可以更改的。

    3. finalstatic的区别

    static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变,看一下例子: 

     

        public class Test {
            public static void main(String[] args)  {
                MyClass myClass1 = new MyClass();
                MyClass myClass2 = new MyClass();
                System.out.println(myClass1.i);
                System.out.println(myClass1.j);
                System.out.println(myClass2.i);
                System.out.println(myClass2.j); 
    //            myClass1.i=34324;  final不能修改
    //            myClass2.i=1515;   final不能修改
        }
    }
        class MyClass {
            public final double i = Math.random();
            public static double j = Math.random();
    } 

    //运行结果,两次打印,j的值都是一样的,jstatic类型的属于类,因此两次值相同。i不是static的因此属于对象,但是i的值是不可变的,这里的不可变是意思是你不能对它就行二次修改。

     

    基于finalstatic的特性,我们往往在实际的程序开发中,需要要给全局范围内的常数,一般定义为:

    public static final int CHANGSHU=100;

    这种形式来定义常量。在后续多次创建对象后,这个常量CHANGSHU的值都是相同的。

    因为在创建对象时,其只是引用这个常量,而不会对这个常量再次进行初始化。

     

    1. final关键字的含义

    final表面意思就是不可更改的,恒量的意思;指的是无法改变的量,这与静态标量static是有区别的,静态变量指的是只有一份存储空间,值是可以改变的。使用final一定原因是出于软件设计的角度,因为别人看到final这个关键字就知道是什么意思,达到心领神会的效果,但也正是由于这种"语义"的存在,在程序设计中要谨慎使用,以免误用

    Javafinal修饰的就是常量,而且变量名要大写;

    Math类: public static final double PI = 3.14159265358979323846; ......java源码中好多变量都用final修饰

     

    2. final的作用

    final根据修饰位置的不同作用也不相同,针对三种情况:

      1)修饰变量,被final修饰的变量必须要初始化,赋初值后不能再重新赋值。

           注意:局部变量不在我们讨论的范畴,因为局部变量本身就有作用范围,不使用privatepublic等词修饰。

    虽然final可以修饰局部变量,但是一般情况下,我们在实际应用中几乎不会这么干!没多大的意义!

      2)修饰方法,被final修饰的方法代表不能重写。

      3)修饰类,被final修饰的类,不能够被继承。

          注意:final修饰的类,类中的所有成员方法都被隐式地指定为final方法。

     

    2.1 final修饰变量

    final修饰的变量必须显示的初始化,初始化可以以三种方式:1)定义时初始化,2)在构造器中设置值,3)在非静态块中为final实例变量设置值。

    final修饰变量指的是:这个变量被初始化后便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可变,即不能再指向其他的对象

    public class Test01{ final int x1= 10000; final int x2; final int x3; { x2 = 20000; } Public exe3(){ this.x3 = 3000; } }

    如果final修饰的变量是对象类型,那么不可更改指的是该变量不可以再指向别的对象,但是对象的值时可以更改的,比如:

    final Operate operate = new Operate() ;// operate有一个普通变量i初始化为10 operate.i = 11; operate.i = 12; System.out.println(operate.i); //输出12上述是自定义类,即便是数组,List等集合类型,所保存的值也是可以更改的。

     

    3. finalstatic的区别

    static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变,看一下例子:

    public class Test { public static void main(String[] args) { MyClass myClass1 = new MyClass(); MyClass myClass2 = new MyClass(); System.out.println(myClass1.i); System.out.println(myClass1.j); System.out.println(myClass2.i); System.out.println(myClass2.j);

    myClass1.i = 1233 //这里不可以改的 } } class MyClass { public final double i = Math.random(); public static double j = Math.random(); }//运行结果,两次打印,j的值都是一样的,jstatic类型的属于类,因此两次值相同。i不是static的因此属于对象,但是i的值是不可变的,这里的不可变是意思是你不能对它就行二次修改。

     

    基于finalstatic的特性,我们往往在实际的程序开发中,需要要给全局范围内的常数,一般定义为:

    public static final int CHANGSHU=100;

    这种形式来定义常量。在后续多次创建对象后,这个常量CHANGSHU的值都是相同的。

    因为在创建对象时,其只是引用这个常量,而不会对这个常量再次进行初始化。

     

  • 相关阅读:
    别逃避,是时候来给JVM一记重锤了
    从CAS讲起,真正高性能解决并发编程的原子操作
    深入理解typedef
    【Valse首发】CNN的近期进展与实用技巧(上)
    基于深度学习的目标检测研究进展
    全卷积网络:从图像级理解到像素级理解
    产生式与判别式模型
    游戏后台杂谈:后台的语言、系统与构架
    优化人脸检测网络
    最长的回文子序列
  • 原文地址:https://www.cnblogs.com/jikebin/p/12470771.html
Copyright © 2020-2023  润新知