`
kaka2008
  • 浏览: 91605 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

初始化

    博客分类:
  • java
阅读更多
java初始化
1、 一个类的所有基本类型数据成员都会保证获得一个初始值。
非基本类型,会初始化为null

   public class Initialization {
	int a;
	char b;
	short s;
	float f;
	long lo;
	double dou;
	byte e;
	boolean flag;
        Object obj;
	
	public static void main(String [] args){
		Initialization init = new Initialization();
		init.print();
	}
	
	public void print(){
		System.out.println("int a="+a+"\nchar b="+b+" \n"+" short s="+s+"\n float f="+f+"\n long lo="+lo+"\n double dou="+dou+"\n byte e="+e+"\n boolean flag="+flag+"\n Object obj="+obj);
	}
}

出来结果为
   int a=0
   char b=
   short s=0
   float f=0.0
   long lo=0
   double dou=0.0
   byte e=0
   boolean flag=false
   Object obj=null

可见,java会为类的基本类型的变量提供一个初始值,各类型初始值不同,非基本类型初始为null。注意,这里的变量必须是类变量,注意,只会为类变量提供初始化,而局部变量不会。如果局部变量没有初始化,会收到一个出错信息

2、可以通过构造方法或其他方法进行初始化,但是不会妨碍java默认的初始化
   构造方法初始化不用赘述。
   用方法进行初始化值得一提的是下面这种情况
 
    public int init(int j){
	return j;
    }
	
    int a = init(b);
    int b = 0;
  

  这样就会提示错误。

  这时需要修改b和a的定义顺序

  通过构造方法或方法都可以进行初始化,但是不会妨碍java默认的初始化。
  看下面的例子
 
        int i;
        Object obj;
	public Initialization(){
		System.out.println("before i="+i+"  obj="+obj);
		i = 1;
		obj = new Object();
		System.out.println("after i="+i+" obj="+obj);
	}
	
	public static void main(String [] args){
		Initialization init = new Initialization();
	}
  

  输出结果为
 
     before i=0  obj=null
     after i=1 obj=java.lang.Object@de6ced
  

由此可见,不论是基本类型,还是其他的类。java默认的初始化是最先发生的,位于一切方法之前。
3、static 数据的初始化
  static 数据会发生上述同样的事情(基本类型,获得对应基本类型的初始化值;非基本类型,初始化为null)
  但是,由于static值只有一个存储区域,所以static值只会被初始化一次,看下面的例子
 
     public static void main(String [] args){
	Cupboard cup = new Cupboard();
	cup = new Cupboard();
     }
    
     public class Cupboard {
	static Bowl bowl = new Bowl();
	
	public Cupboard(){
		System.out.println("initialization Cupboard");
	}
     }
     public class Bowl {
	public Bowl(){
		System.out.println("init ing Bowl~");
	}
     }
  

  输出结果如下
 
     init ing Bowl~
     initialization Cupboard
     initialization Cupboard
  

所以说,static数据只会在第一次进行初始化,之后就不会了。

4、初始化顺序
  在一个类中,无论变量的定义是在方法之前还是方法之后,都会在方法之前进行初始化的;
  另外,static数据初始化位于非static数据初始化之前
来看下边的例子
 
   public static void main(String [] args){
	Cupboard cup = new Cupboard();
	
   }
   public class Cupboard {
	Pan pan = new Pan();
	public Cupboard(){
		System.out.println("initialization Cupboard");
	}
	static Bowl bowl = new Bowl();
   }
   public class Bowl {
	public Bowl(){
		System.out.println("init ing Bowl~");
	}
   }
   public class Pan {
	public Pan(){
		System.out.println("initialization Pan");
	}
   }
  

结果如下
    init ing Bowl~
initialization Pan
initialization Cupboard
 


此次总结还没有涉及到继承。
涉及到继承后会更复杂。日后会详细分析的^-^
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics