在Java中有些变量使用的时候不需要人为的初始化,系统会自动给变量赋默认的值
例如:
boolean 变量的初始值如果有的话,则为false。
int 变量的初始值如果有的话,则为0.
那么什么情况下,java中的变量会自动初始化呢?这里我们主要讨论以下几种情况:实例变量、类变量、函数中的局部变量
1)实例变量
实例变量都会在构造函数中进行自动初始化,会有相应的值。
class T1{
private int t1;
private double t2;
private boolean t3;
void test(){
System.out.println(t1+" "+t2+" "+t3);
}
}
但是如果类的实例有final修饰符的时候,需要特别注意了,含有final修饰符的实例变量必须要由程序员指定初始值,指定方式有两种:
a. 在final 实例变量定义的时候进行初始化,例如
class T1{
final private int t1=10;
void test(){
System.out.println(t1+" ");
}
}
b.在非静态块中进行进行初始化,例如
class T1{
final private int t1;
void test(){
System.out.println(t1+" ");
}
{ //去掉括号会报错的
t1=10;
}
}
c.在构造函数中进行初始化,例如
class T1{
final private int t1;
T1(){
t1=10;
}
void test(){
System.out.println(t1+" ");
}
}
class T1{
final private int t1;
T1(){
t1=10;
}
T1(int c){
t1=20;
}
void test(){
System.out.println(t1+" ");
}
}
2)类变量
类变量通常也叫静态变量,是类中使用static关键字修饰的成员变量。对于其来说,程序员未显示指定初始值的类变量,系统会自动赋初始值,例如
class T1{
static private int t1;
void test(){
System.out.println(t1+" ");
}
}
对于有final修饰的类变量,例如 final static int t1来讲,系统不会进行默认赋值,初始化需要按照如下两种方式进行:
a.在定义变量的时候进行初始化,例如
class T1{
static private int t1=10;
void test(){
System.out.println(t1+" ");
}
}
class T1{
final static private int t1;
void test(){
System.out.println(t1+" ");
}
static{
t1=10;
}
}
3)函数中的局部变量
对于局部变量来讲,系统不会进行默认初始化,必须程序员指定初始值。当程序中没有显示的指定这类局部变量的初始值的时候,程序会编译出错
class T1{
void test1(){
int a;
System.out.println(a);
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable a may not have been initialized
at T1.test1(TestString.java:5)
at TestString.main(TestString.java:26)
因此,在使用局部变量的时候,需要注意给局部变量进行初始化。
注意:上述情况都是针对基本类型,包括byte, short, int, long及String类型来说,对于引用类型来讲,所有的必须程序员自己进行显示的初始化,如下所示:
class T0{
}
class T1{
T0 t;
void test1(){
System.out.println(t.toString());
}
}
需要进行如下改进:
class T0{
}
class T1{
T0 t=new T0();
void test1(){
System.out.println(t.toString());
}
}
先暂时整理到这里了,有什么不对或者不清楚的地方欢迎大家留言指出。