上一篇static关键字,自认为比较详细了。不懂的可以留言。下面接着讲:

    静态最终成员变量:

          就是同时被final和static修饰的类的成员变量。其跟仅用final修饰的成员变量类似。除了可以在定义或者说在首次声明的时初始化,只能在静态块中初始化。(大家注意我用绿色标记出来的一句话)

那我们比较学习一下下面的两种情况,大家记忆好:

   1:只有final修饰的成员变量的初始化问题

    (1)首次定义要被final修饰的的变量的时候,就初始化;

    (2)若首次定义final修饰的成员变量的时候,没有初始化,那么就要重载相关类的构造函数了,然后再构造函数中为final修饰的成员变量赋值。

    (3)被final修饰的成员变量相当于常量,其值不能被在更改。。。

   2:被static修饰成员变量的特点

      只有一块内存资源,没有副本,上一篇中讲的很详细。

  3:同时被static和final修饰的成员变量(一旦被赋值之后,值不能被改变且有两种方式该变量的方式)

     同时被这两个关键字大家不要怕,一个个的看。

     也就是说:两种访问成员变量的方式。第一次:类名;对象;

     同时: 初始化问题(

   <1>定义的时候,初始化;

   <2>在静态代码块中初始化;

  ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

   ▇<3>在构造器中定义。我们试试。▇

   ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

↗(用很多黑色的图形围住的<3>是错误的,我自己想到的,结果通过验证是错的,具体详见文章最后的地方

***对应<2>在静态代码块中使用的例子

public  class ClassInfo3
{
    public static int  number;//班级数量
    public static final  String classDesc;//未被初始化

    //静态代码块
    static{
     classDesc ="班级描述";
    }

    public ClassInfo3(){
         int n =0;
          n =number  ++;
         System.out.println(n);
    }

    public void showNumber(){
      System.out.println(number);
    }

}


public class ClassInfoDemo3
{
    public static void  main(String args[]){
      ClassInfo3 c1 = new ClassInfo3();//生成实例1.println(0,1);
      c1.showNumber();//
      System.out.println(c1.classDesc);
      System.out.println(ClassInfo3.classDesc);
      System.out.println("*****************以上是实例1的测试数据***************");
      System.out.println("");
      ClassInfo3 c2  = new ClassInfo3();//println(1,2);
      c2.showNumber();
      System.out.println(c2.classDesc);
      System.out.println(ClassInfo3.classDesc);
    }

}

这是运行效果图:

static关键字(二)_java关键字static的学习---静


****3:我们测试第三种情况,在(2)代码中稍微改动一下

下面是代码:

public  class ClassInfo4
{
    public static int  number;//班级数量
    public static final  String classDesc;//未被初始化

    //静态代码块
    /*这是被注释了的代码
    static{
     classDesc ="班级描述";
    }
    */


    public ClassInfo4(){
        //首先给静态成员变量赋值
         classDesc ="阳光积极的1204班";
         int n =0;
          n =number  ++;
         System.out.println(n);
    }

    public void showNumber(){
      System.out.println(number);
    }

}


public class ClassInfoDemo4
{
    public static void  main(String args[]){
      ClassInfo4 c1 = new ClassInfo4();//生成实例1.println(0,1);
      c1.showNumber();//
      System.out.println(c1.classDesc);
      System.out.println(ClassInfo4.classDesc);
      System.out.println("*****************以上是实例1的测试数据***************");
      System.out.println("");
      ClassInfo4 c2  = new ClassInfo4();//println(1,2);
      c2.showNumber();
      System.out.println(c2.classDesc);
      System.out.println(ClassInfo4.classDesc);
    }
}

static关键字(二)_java关键字static的学习---静_02

可以看到的是:加入static修饰的final最终变量是不能通过构造函数来给(静态最终变量)赋值的。

从而可以总结出一下几点:

    关于静态最终变量:static 表示是类成员变量,没有副本,只有唯一的资源,可以通过两种方式来访问;再加上final修饰的话,表示:可以通过两种方式访问的常量。

这里注意:静态最终变量的初始化问题:(1)定义变量的时候,初始化;(2)若一开始没有初始化的话,那么就需要构造静态代码块来为其赋值。



    写的有点乱,但总是懂了。static、final的用法了。如果看不懂,欢迎留言:一起学习,一起进步。java是一门很不错的语言,爱上java,爱上生活。

 )