总结final变量的赋值问题
final型的成员变量系统不会给予赋初值,举例说明如下:
class Mt
{
final int x;
//static final int y;
void mt_f()
{
System.out.println("x="+x);
//System.out.println("y="+y);
}
public static void main(String[]args)
{
new Mt().mt_f();
}
}
/*
报错:
可能尚未初始化变量 x
*/
如果去掉final,输出 x=0
结论:new Mt()对象⼀产⽣,就会对Mt类的成员(除final型的或static final型的 )赋默认系统初值.总之,final型的成员变量系统不会给予赋初值.那么给final变量赋值的⽅式有哪⼏种呢,总结如下:
//fianl修饰的变量赋初值问题.
class Mt
{
final String  mt_j;
final String mt_k="A!";//给final型变量赋值
static final int mt_l=90;//static修饰后,唯有这种赋值⽅式,让mt_l获得初值.
Mt(String mt)//构造⽅法
{
mt_j=mt;//给finl型赋初值.
}
Mt(){mt_j="x";}
void mt_f()
{
System.out.println("mt_j="+mt_j+"\n"+"mt_k="+mt_k+"\n"+"mt_l="+mt_l);
}
public static void main(String[]args)
{
new Mt("AB").mt_f();
}
}
static修饰的变量//总结:
//final型变量.系统不会给它赋初值.
/
/final有static修饰的时候,只能在声明的时候直接给它赋值.别处没法对它进⾏赋值
//⽐如,在构造⽅法⾥给它赋值,会报错,错误分析:静态变量(不需任何对象)直接由类名调⽤.
//final没有static修饰的时候,有两种赋值:1.直接赋值.2在构造⽅法⾥给它赋值.每个构造⽅法必
//须给它赋值.