上一篇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);
}
}
这是运行效果图:
****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修饰的final最终变量是不能通过构造函数来给(静态最终变量)赋值的。
从而可以总结出一下几点:
关于静态最终变量:static 表示是类成员变量,没有副本,只有唯一的资源,可以通过两种方式来访问;再加上final修饰的话,表示:可以通过两种方式访问的常量。
这里注意:静态最终变量的初始化问题:(1)定义变量的时候,初始化;(2)若一开始没有初始化的话,那么就需要构造静态代码块来为其赋值。
写的有点乱,但总是懂了。static、final的用法了。如果看不懂,欢迎留言:一起学习,一起进步。java是一门很不错的语言,爱上java,爱上生活。
)