日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Java類變量和成員變量初始化過(guò)程

昨天看了一本叫做《突破程序員基本功的16課》的書(shū),個(gè)人感覺(jué)還可以,主要對(duì)Java的技巧進(jìn)行了一些深入的講解,讓我對(duì)類的初始化和對(duì)象的創(chuàng)建有了新的認(rèn)識(shí)。

一、類的初始化

對(duì)于類的初始化:類的初始化一般只初始化一次,類的初始化主要是初始化靜態(tài)成員變量。

類的編譯決定了類的初始化過(guò)程。

編譯器生成的class文件主要對(duì)定義在源文件中的類進(jìn)行了如下的更改:

1) 先按照靜態(tài)成員變量的定義順序在類內(nèi)部聲明成員變量。

2) 再按照原java類中對(duì)成員變量的初始化順序進(jìn)行初始化。

一個(gè)java類和編譯后的class對(duì)應(yīng)的轉(zhuǎn)換如下:

源文件:

 
 
 
  1. public class Person{  
  2.   public static String name="張三";  
  3.   public static int age;  
  4.   static{  
  5.        age=20;  
  6.     System.out.println("初始化age");  
  7.   }  
  8.   public static String address;  
  9.   static{  
  10.     address="北京市";  
  11.     age=34;  
  12.   }  
  13.   public static void main(String[] args) {  
  14.                    System.out.println(name);  
  15.                    System.out.println(age);  
  16.                    System.out.println(address);  
  17.          }  

當(dāng)java源代碼轉(zhuǎn)換成一個(gè)class文件后,其轉(zhuǎn)換成類似下面的代碼:

 
 
 
  1. public class Person{  
  2.   public static String name;  
  3.   public static int age;  
  4.   public static String address;  
  5.   static{  
  6.     name="張三";  
  7.     age=20;  
  8.     System.out.println("初始化age");  
  9.     address="北京市";  
  10.     age=34;  
  11.   }  
  12.   public static void main(String[] args) {  
  13.                    System.out.println(name);  
  14.                    System.out.println(age);  
  15.                    System.out.println(address);  
  16.          }  

初始化順序依據(jù)轉(zhuǎn)換后對(duì)應(yīng)的class類成員變量的初始化順序依次執(zhí)行,所以所有的靜態(tài)成員變量都是先聲明,后執(zhí)行賦值的,而且賦值的順序也是依照源代碼對(duì)靜態(tài)成員變量初始化的順序進(jìn)行的,注意:定義一個(gè)成員變量并直接初始化與在靜態(tài)代碼塊中進(jìn)行初始化是等價(jià)的,都是依據(jù)它們?cè)谠创a中定義的順序進(jìn)行的。

二、對(duì)象的生成

對(duì)于對(duì)象的生成其初始化過(guò)程與類的初始化過(guò)程類似,但會(huì)增加構(gòu)造函數(shù)階段,源代碼如下:

 
 
 
  1. public class Person{  
  2.    {  
  3.      name="李四";  
  4.      age=56;  
  5.      System.out.println("初始化age");  
  6.      address="上海";  
  7.    }  
  8.    public String name="張三";  
  9.    public int age=29;  
  10.    public String address="北京市";  
  11.    public Person(){  
  12.      name="趙六";  
  13.      age=23;  
  14.      address="上海市";  
  15.    }  
  16.  } 

編譯器轉(zhuǎn)換成class文件后,會(huì)轉(zhuǎn)換成類似下面的代碼:

 
 
 
  1. public class Person{  
  2.    public String name;  
  3.    public int age;  
  4.    public String address;  
  5.    public Person(){  
  6.      name="李四";  
  7.      age=56;  
  8.      System.out.println("初始化age");  
  9.      address="上海";  
  10.      name="張三";  
  11.      age=29;  
  12.      address="北京市";  
  13.      name="趙六";  
  14.      age=23;  
  15.      address="上海市";  
  16.    }  
  17.  } 

可以看到,對(duì)于類中對(duì)成員變量的初始化和代碼塊中的代碼全部都挪到了構(gòu)造函數(shù)中,并且是按照java源文件的初始化順序依次對(duì)成員變量進(jìn)行初始化的,而原構(gòu)造函數(shù)中的代碼則移到了構(gòu)造函數(shù)的***執(zhí)行。本人以前一直對(duì)類初始化過(guò)程一直沒(méi)有一個(gè)深刻的理解,就是搞不清到底是怎么初始化的,只能按照書(shū)上所說(shuō)的記住了初始化順序,但是過(guò)一段時(shí)間有給忘了,所以這次總算給弄清楚了,還是按照一個(gè)模型來(lái)解釋初始化機(jī)制比較好啊,不用再背了,只有理解了才能不易忘。

原文鏈接:http://www.cnblogs.com/lmtoo/archive/2012/04/08/2437918.html


當(dāng)前標(biāo)題:Java類變量和成員變量初始化過(guò)程
轉(zhuǎn)載注明:http://www.5511xx.com/article/dphohpp.html