java语言中的数据是如何定义_java中的数据类型
java中的數(shù)據(jù)類型
java語(yǔ)言的數(shù)據(jù)類型包括兩種,基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
定義
基本數(shù)據(jù)類型:變量名指向具體的數(shù)值。
引用數(shù)據(jù)類型:變量名指向存數(shù)據(jù)對(duì)象的內(nèi)存地址,即變量名指向hash值。
基本數(shù)據(jù)類型:整數(shù)類型(byte,short,int,long);浮點(diǎn)類型(float,double);字符型(char);布爾型(boolean)。
引用數(shù)據(jù)類型:類(class),接口(interface),數(shù)組([])。引用數(shù)據(jù)類型的類都是Object類的子類。
內(nèi)存分配
基本數(shù)據(jù)類型:在被創(chuàng)建時(shí),在棧上給其劃分一塊內(nèi)存,將數(shù)值直接存儲(chǔ)在棧上。
引用數(shù)據(jù)類型:在被創(chuàng)建時(shí),首先要在棧上給其引用(句柄)分配一塊內(nèi)存,而對(duì)象的具體信息都存儲(chǔ)在堆內(nèi)存上,然后由棧上面的引用指向堆中對(duì)象的地址。
例如,有一個(gè)類Person,有屬性name,age,帶有參的構(gòu)造方法,
Person p = new Person("zhangsan",20);
在內(nèi)存中的具體創(chuàng)建過(guò)程是:
1.首先在棧內(nèi)存中位其p分配一塊空間;
2.在堆內(nèi)存中為Person對(duì)象分配一塊空間,并為其三個(gè)屬性設(shè)初值"",0;
3.根據(jù)類Person中對(duì)屬性的定義,為該對(duì)象的兩個(gè)屬性進(jìn)行賦值操作;
4.調(diào)用構(gòu)造方法,為兩個(gè)屬性賦值為"Tom",20;(注意這個(gè)時(shí)候p與Person對(duì)象之間還沒(méi)有建立聯(lián)系);
5.將Person對(duì)象在堆內(nèi)存中的地址,賦值給棧中的p;通過(guò)引用(句柄)p可以找到堆中對(duì)象的具體信息。
相關(guān)知識(shí):
靜態(tài)區(qū):?保存自動(dòng)全局變量和?static?變量(包括?static?全局和局部變量)。靜態(tài)區(qū)的內(nèi)容在總個(gè)程序的生命周期內(nèi)都存在,由編譯器在編譯的時(shí)候分配。
堆區(qū):??一般由程序員分配釋放,由?malloc?系列函數(shù)或?new?操作符分配的內(nèi)存,其生命周期由?free?或?delete?決定。在沒(méi)有釋放之前一直存在,直到程序結(jié)束,由OS釋放。其特點(diǎn)是使用靈活,空間比較大,但容易出錯(cuò)。
棧區(qū):?由編譯器自動(dòng)分配釋放,保存局部變量,棧上的內(nèi)容只在函數(shù)的范圍內(nèi)存在,當(dāng)函數(shù)運(yùn)行結(jié)束,這些內(nèi)容也會(huì)自動(dòng)被銷毀,其特點(diǎn)是效率高,但空間大小有限。
文字常量區(qū):?常量字符串就是放在這里的, 程序結(jié)束后由系統(tǒng)釋放。
程序代碼區(qū):存放函數(shù)體的二進(jìn)制代碼。
參考:https://www.cnblogs.com/fxust/p/4622105.html
Java中的Null是什么?
正如我說(shuō)過(guò)的那樣,null是Java中一個(gè)很重要的概念。null設(shè)計(jì)初衷是為了表示一些缺失的東西,例如缺失的用戶、資源或其他東西。但是,一年后,令人頭疼的空指針異常給Java程序員帶來(lái)不少的騷擾。在這份材料中,我們將學(xué)習(xí)到Java中null關(guān)鍵字的基本細(xì)節(jié),并且探索一些技術(shù)來(lái)盡可能的減少null的檢查以及如何避免惡心的空指針異常。
1)首先,null是Java中的關(guān)鍵字,像public、static、final。它是大小寫(xiě)敏感的,你不能將null寫(xiě)成Null或NULL,編譯器將不能識(shí)別它們?nèi)缓髨?bào)錯(cuò)。
Object obj = NULL; //Not Ok
Object obj1 = null //Ok
使用其他語(yǔ)言的程序員可能會(huì)有這個(gè)問(wèn)題,但是現(xiàn)在IDE的使用已經(jīng)使得這個(gè)問(wèn)題變得微不足道。現(xiàn)在,當(dāng)你敲代碼的時(shí)候,IDE像Eclipse、Netbeans可以糾正這個(gè)錯(cuò)誤。但是使用其他工具像notepad、Vim、Emacs,這個(gè)問(wèn)題卻會(huì)浪費(fèi)你寶貴時(shí)間的。
2)就像每種原始類型都有默認(rèn)值一樣,如int默認(rèn)值為0,boolean的默認(rèn)值為false,null是任何引用類型的默認(rèn)值,不嚴(yán)格的說(shuō)是所有object類型的默認(rèn)值。就像你創(chuàng)建了一個(gè)布爾類型的變量,它將false作為自己的默認(rèn)值,Java中的任何引用變量都將null作為默認(rèn)值。這對(duì)所有變量都是適用的,如成員變量、局部變量、實(shí)例變量、靜態(tài)變量(但當(dāng)你使用一個(gè)沒(méi)有初始化的局部變量,編譯器會(huì)警告你)。為了證明這個(gè)事實(shí),你可以通過(guò)創(chuàng)建一個(gè)變量然后打印它的值來(lái)觀察這個(gè)引用變量,如下圖代碼所示:
private staticObject myObj;public static voidmain(String args[]){
System.out.println("What is value of myObjc : " +myObj);
}
What is value of myObjc :null
這對(duì)靜態(tài)和非靜態(tài)的object來(lái)說(shuō)都是正確的。就像你在這里看到的這樣,我將myObj定義為靜態(tài)引用,所以我可以在主方法里直接使用它。注意主方法是靜態(tài)方法,不可使用非靜態(tài)變量。
轉(zhuǎn)自:http://www.importnew.com/14229.html
總結(jié)
以上是生活随笔為你收集整理的java语言中的数据是如何定义_java中的数据类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java中apache安装与配置_Apa
- 下一篇: java登录中用户类型分类_基于用户登陆