標籤:是什麼 hang beans import ide www. logs 過程 控制代碼
java中的資料類型
java語言的資料類型包括兩種,基礎資料型別 (Elementary Data Type)和引用資料類型。
定義
基礎資料型別 (Elementary Data Type):變數名指向具體的數值。
引用資料類型:變數名指向存資料對象的記憶體位址,即變數名指向hash值。
基礎資料型別 (Elementary Data Type):整數類型(byte,short,int,long);浮點類型(float,double);字元型(char);布爾型(boolean)。
引用資料類型:類(class),介面(interface),數組([])。引用資料類型的類都是Object類的子類。
記憶體配置
基礎資料型別 (Elementary Data Type):在被建立時,在棧上給其劃分一塊記憶體,將數值直接儲存在棧上。
引用資料類型:在被建立時,首先要在棧上給其引用(控制代碼)分配一塊記憶體,而對象的具體資訊都儲存在堆記憶體上,然後由棧上面的引用指向堆中對象的地址。
例如,有一個類Person,有屬性name,age,帶有參的構造方法,
Person p = new Person("zhangsan",20);
在記憶體中的具體建立過程是:
1.首先在棧記憶體中位其p分配一塊空間;
2.在堆記憶體中為Person對象分配一塊空間,並為其三個屬性設初值"",0;
3.根據類Person中對屬性的定義,為該對象的兩個屬性進行賦值操作;
4.調用構造方法,為兩個屬性賦值為"Tom",20;(注意這個時候p與Person對象之間還沒有建立聯絡);
5.將Person對象在堆記憶體中的地址,賦值給棧中的p;通過引用(控制代碼)p可以找到堆中對象的具體資訊。
相關知識:
靜態區: 儲存自動全域變數和 static 變數(包括 static 全域和局部變數)。靜態區的內容在總個程式的生命週期內都存在,由編譯器在編譯的時候分配。
堆區: 一般由程式員分配釋放,由 malloc 系列函數或 new 操作符分配的記憶體,其生命週期由 free 或 delete 決定。在沒有釋放之前一直存在,直到程式結束,由OS釋放。其特點是使用靈活,空間比較大,但容易出錯。
棧區: 由編譯器自動分配釋放,儲存局部變數,棧上的內容只在函數的範圍記憶體在,當函數運行結束,這些內容也會自動被銷毀,其特點是效率高,但空間大小有限。
文字常量區: 常量字串就是放在這裡的, 程式結束後由系統釋放。
程式碼區:存放函數體的二進位代碼。
參考:https://www.cnblogs.com/fxust/p/4622105.html
Java中的Null是什嗎?
正如我說過的那樣,null是Java中一個很重要的概念。null設計初衷是為了表示一些缺失的東西,例如缺失的使用者、資源或其他東西。但是,一年後,令人頭疼的null 指標異常給Java程式員帶來不少的騷擾。在這份材料中,我們將學習到Java中null關鍵字的基本細節,並且探索一些技術來儘可能的減少null的檢查以及如何避免噁心的null 指標異常。
1)首先,null是Java中的關鍵字,像public、static、final。它是大小寫敏感的,你不能將null寫成Null或NULL,編譯器將不能識別它們然後報錯。
Object obj = NULL; // Not OkObject obj1 = null //Ok
使用其他語言的程式員可能會有這個問題,但是現在IDE的使用已經使得這個問題變得微不足道。現在,當你敲代碼的時候,IDE像Eclipse、Netbeans可以糾正這個錯誤。但是使用其他工具像notepad、Vim、Emacs,這個問題卻會浪費你寶貴時間的。
2)就像每種原始類型都有預設值一樣,如int預設值為0,boolean的預設值為false,null是任何參考型別的預設值,不嚴格的說是所有object類型的預設值。就像你建立了一個布爾類型的變數,它將false作為自己的預設值,Java中的任何引用變數都將null作為預設值。這對所有變數都是適用的,如成員變數、局部變數、執行個體變數、靜態變數(但當你使用一個沒有初始化的局部變數,編譯器會警告你)。為了證明這個事實,你可以通過建立一個變數然後列印它的值來觀察這個引用變數,如代碼所示:
private static Object myObj;public static void main(String args[]){ System.out.println("What is value of myObjc : " + myObj);}What is value of myObjc : null
這對靜態和非靜態object來說都是正確的。就像你在這裡看到的這樣,我將myObj定義為靜態引用,所以我可以在主方法裡直接使用它。注意主方法是靜態方法,不可使用非靜態變數。
轉自:http://www.importnew.com/14229.html
java中的資料類型