国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺析Java中對象的創(chuàng)建與對象的數(shù)據(jù)類型轉換

2019-11-26 14:40:49
字體:
來源:轉載
供稿:網(wǎng)友

Java:對象創(chuàng)建和初始化過程
1.Java中的數(shù)據(jù)類型
    Java中有3個數(shù)據(jù)類型:基本數(shù)據(jù)類型(在Java中,boolean、byte、short、int、long、char、float、double這八種是基本數(shù)據(jù)類型)、引用類型和null類型。其中,引用類型包括類類型(含數(shù)組)、接口類型。
    下列語句聲明了一些變量:

int k ;A a; //a是A數(shù)據(jù)類型的對象變量名。B b1,b2,…,b10000;// 假定B是抽象類或接口。String s; 

     注意:從數(shù)據(jù)類型與變量的角度看,基本數(shù)據(jù)類型變量k、類類型變量a和s、抽象類或接口類型變量b(1萬個),它們都是變量(標識符)。
2.關于句柄(handle)
    為了區(qū)別引用類型的變量標識符和基本數(shù)據(jù)類型變量標識符,我們特別的使用Handle來稱呼引用類型的變量標識符。上面例子中b1至b10000、a、s都是Handle。Handle直觀的看就是手柄、把手,我們采用計算機界常用的中文翻譯“句柄”。
 
2.1【W(wǎng)indows編程中的】句柄的含義
    句柄是WONDOWS用來標識被應用程序所建立或使用的對象的唯一整數(shù),WINDOWS使用各種各樣的句柄標識諸如應用程序實例,窗口,控制,位圖,GDI對象等等。WINDOWS句柄有點象C語言中的文件句柄。
    從上面的定義中的我們可以看到,句柄是一個標識符,是拿來標識對象或者項目的,它就象我們的姓名一樣,每個人都會有一個,不同的人的姓名不一樣,但是,也可能有一個名字和你一樣的人。從數(shù)據(jù)類型上來看它只是一個16位的無符號整數(shù)。應用程序幾乎總是通過調用一個WINDOWS函數(shù)來獲得一個句柄,之后其他的WINDOWS函數(shù)就可以使用該句柄,以引用相應的對象。
    如果想更透徹一點地認識句柄,我可以告訴大家,句柄是一種指向指針的指針。我們知道,所謂指針是一種內存地址。應用程序啟動后,組成這個程序的各對象是駐留在內存的。如果簡單地理解,似乎我們只要獲知這個內存的首地址,那么就可以隨時用這個地址訪問對象。但是,如果您真的這樣認為,那么您就大錯特錯了。我們知道,Windows是一個以虛擬內存為基礎的操作系統(tǒng)。在這種系統(tǒng)環(huán)境下,Windows內存管理器經(jīng)常在內存中來回移動對象,依此來滿足各種應用程序的內存需要。對象被移動意味著它的地址變化了。如果地址總是如此變化,我們該到哪里去找該對象呢?
    為了解決這個問題,Windows操作系統(tǒng)為各應用程序騰出一些內存儲地址,用來專門登記各應用對象在內存中的地址變化,而這個地址(存儲單元的位置)本身是不變的。Windows內存管理器在移動對象在內存中的位置后,把對象新的地址告知這個句柄地址來保存。這樣我們只需記住這個句柄地址就可以間接地知道對象具體在內存中的哪個位置。這個地址是在對象裝載(Load)時由系統(tǒng)分配給的,當系統(tǒng)卸載時(Unload)又釋放給系統(tǒng)。
    句柄地址(穩(wěn)定)→記載著對象在內存中的地址────→對象在內存中的地址(不穩(wěn)定)→實際對象
 
2.2Java中句柄的意義
    對句柄以前的【W(wǎng)indows編程中的】含義有了深刻的認識,我們可以說Handle是一個我們學習Java時非常需要的術語。它的意義在于區(qū)別“對象本身”和對象變量(或者嚴格點:對象所屬的數(shù)據(jù)類型的變量標識符)。
 
2.3回到1中的變量聲明:
    現(xiàn)在,你應該對下面的注釋一目了然。

int k, j ;//k里面存放的是一個整型數(shù)。A a; //a里面存放地址。B b1,b2,…,b10000;// b1,…,b10000里面存放地址。String s; //s里面存放地址。

3.關于引用(reference)
    什么是“引用”? “the identifier you manipulate is actually a ‘reference' to an object”。(Thinking in Java 2e )
    翻譯是:你操縱的標識符實際上是一個對象的“引用”。或者精確些,翻譯成:你操作的標識符實際上是指向一個對象的“引用”。顯然,原文中reference是一個有方向感的東西。
    回到Java中來,引用可以想象成對象的身份證號碼、對象的ID或者對象的手機號碼。當然,更多的說法是,引用是對象在內存中住的房間號碼。直觀的說,對象的引用是創(chuàng)建對象時的返回值!引用是new表達式的返回值。
    new A(); 這里真正創(chuàng)建了一個對象,但我們沒有用句柄去持有(hold、拿著、保存)該引用。從微觀上看,new表達式完成了對象初始化的任務(三步曲,下文詳細分析),整體上看則返回一個引用。
    再次回到1中的變量聲明,再看看下面的注釋。

A a; //聲明句柄a,但未初始化,所以里面的值為null。B b1,b2,…,b10000;// 聲明句柄b1,…,b10000,但未初始化,所以里面的值為null。String s; //聲明句柄s,但未初始化,所以里面的值為null。

    4.句柄與引用的關系

A a;//聲明句柄a,值為nulla=new A();//句柄的初始化(句柄 = 引用;即把引用賦值給句柄)

引用:new A()的值。引用可以簡單的看作對象占據(jù)內存空間的地址;通過對象的引用,就可以方便的與其他對象區(qū)別開來,引用就是對象獨特的身份標識。
完成句柄的初始化后,就可以用句柄遙控對象了。
    當然,這只是從一方面解釋對象的創(chuàng)建和初始化,理解了句柄和引用的關系后,下面分析對象初始化的整個過程。先做以下準備工作,說說棧與堆。
5.java中棧(stack)與堆(heap)
    在java中內存分為“棧”和“堆”這兩種(Stack and Heap).基本數(shù)據(jù)類型存儲在“棧”中,對象引用類型實際存儲在“堆”中,在棧中只是保留了引用內存的地址值。
    順便說說“==”與“equals()方法”,以幫助理解兩者(Stack and Heap)的概念。
    在Java中利用"=="比較變量時候,系統(tǒng)使用變量在stack(棧)中所存的值來作為對比的依據(jù),基本數(shù)據(jù)類型在stack中所存的值就是其

主站蜘蛛池模板: 万载县| 沁阳市| 岢岚县| 怀安县| 灵武市| 安阳县| 巩义市| 秦安县| 黄山市| 郑州市| 双城市| 建昌县| 大连市| 高雄市| 申扎县| 内江市| 高安市| 岗巴县| 夏邑县| 沂水县| 磐安县| 武安市| 东方市| 思南县| 岱山县| 锡林郭勒盟| 峡江县| 兰考县| 郁南县| 左贡县| 库车县| 民丰县| 壤塘县| 庄浪县| 桐城市| 迭部县| 乌海市| 苍南县| 梅州市| 嘉黎县| 谢通门县|