java的数据类型、变量类型笔记总结
1. 引用類型
- 在Java中,引用類型的變量非常類似于C/C++的指針。引用類型指向一個(gè)對象,指向?qū)ο蟮淖兞渴且米兞俊_@些變量在聲明時(shí)被指定為一個(gè)特定的類型,比如 Employee、Puppy 等。變量一旦聲明后,類型就不能被改變了。
- 對象、數(shù)組都是引用數(shù)據(jù)類型。
- 所有引用類型的默認(rèn)值都是null。
- 一個(gè)引用變量可以用來引用任何與之兼容的類型。
例子:Site site = new Site(“Runoob”)。
引用類型是一個(gè)對象類型,它的值是指向內(nèi)存空間的引用,就是地址,所指向的內(nèi)存中保存著變量所表示的一個(gè)值或一組值。
int a; a = 250; // 聲明變量a的同時(shí),系統(tǒng)給a分配了空間。引用類型就不是了,只給變量分配了引用空間,數(shù)據(jù)空間沒有分配,因?yàn)椴恢罃?shù)據(jù)是什么。
錯(cuò)誤的例子:
引用類型變量在聲明后必須通過實(shí)例化開辟數(shù)據(jù)空間,才能對變量所指向的對象進(jìn)行訪問。
MyDate today; //將變量分配一個(gè)保存引用的空間 today = new MyDate(); // 這句話是2步,首先執(zhí)行new MyDate(),給today變量開辟數(shù)據(jù)空間,然后再執(zhí)行賦值操作引用變量賦值:
MyDate a,b; // 在內(nèi)存開辟兩個(gè)引用空間 a = new MyDate(); // 開辟M(fèi)yDate對象的數(shù)據(jù)空間,并把該空間的首地址賦給a b = a; // 將a存儲(chǔ)空間中的地址寫到b的存儲(chǔ)空間中其中new關(guān)鍵字的作用之一就是為對象分配內(nèi)存空間。
2. 數(shù)據(jù)類型轉(zhuǎn)換的補(bǔ)充
2.1、包裝類過渡類型轉(zhuǎn)換
一般情況下,我們首先聲明一個(gè)變量,然后生成一個(gè)對應(yīng)的包裝類,就可以利用包裝類的各種方法進(jìn)行類型轉(zhuǎn)換了。例如:
當(dāng)希望把float型轉(zhuǎn)換為double型時(shí):
簡單類型的變量轉(zhuǎn)換為相應(yīng)的包裝類,可以利用包裝類的構(gòu)造函數(shù)。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)
而在各個(gè)包裝類中,總有形為××Value()的方法,來得到其對應(yīng)的簡單類型數(shù)據(jù)。利用這種方法,也可以實(shí)現(xiàn)不同數(shù)值型變量間的轉(zhuǎn)換,例如,對于一個(gè)雙精度實(shí)型類,intValue()可以得到其對應(yīng)的整型變量,而doubleValue()可以得到其對應(yīng)的雙精度實(shí)型變量。
2.2、字符串與其它類型間的轉(zhuǎn)換
其它類型向字符串的轉(zhuǎn)換
調(diào)用類的串轉(zhuǎn)換方法:X.toString();
自動(dòng)轉(zhuǎn)換:X+”“;
使用String的方法:String.valueOf(X);
2.3、字符串作為值,向其它類型的轉(zhuǎn)換
1、先轉(zhuǎn)換成相應(yīng)的封裝器實(shí)例,再調(diào)用對應(yīng)的方法轉(zhuǎn)換成其它類型
例如,字符中”32.1”轉(zhuǎn)換double型的值的格式為:new Float(“32.1”).doubleValue()。也可以用:Double.valueOf(“32.1”).doubleValue()
2、靜態(tài)parseXXX方法
3、Character的getNumericValue(char ch)方法
2.4、Date類與其它數(shù)據(jù)類型的相互轉(zhuǎn)換
整型和Date類之間并不存在直接的對應(yīng)關(guān)系,只是你可以使用int型為分別表示年、月、日、時(shí)、分、秒,這樣就在兩者之間建立了一個(gè)對應(yīng)關(guān)系,在作這種轉(zhuǎn)換時(shí),你可以使用Date類構(gòu)造函數(shù)的三種形式:
Date(int year, int month, int date):以int型表示年、月、日
Date(int year, int month, int date, int hrs, int min):以int型表示年、月、日、時(shí)、分
Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年、月、日、時(shí)、分、秒
在長整型和Date類之間有一個(gè)很有趣的對應(yīng)關(guān)系,就是將一個(gè)時(shí)間表示為距離格林尼治標(biāo)準(zhǔn)時(shí)間1970年1月1日0時(shí)0分0秒的毫秒數(shù)。對于這種對應(yīng)關(guān)系,Date類也有其相應(yīng)的構(gòu)造函數(shù):Date(long date)。
獲取Date類中的年、月、日、時(shí)、分、秒以及星期你可以使用Date類的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以將其理解為將Date類轉(zhuǎn)換成int。
而Date類的getTime()方法可以得到我們前面所說的一個(gè)時(shí)間對應(yīng)的長整型數(shù),與包裝類一樣,Date類也有一個(gè)toString()方法可以將其轉(zhuǎn)換為String類。
有時(shí)我們希望得到Date的特定格式,例如20020324,我們可以使用以下方法,首先在文件開始引入:
總結(jié):
1、只有 boolean 不參與數(shù)據(jù)類型的轉(zhuǎn)換
2、自動(dòng)類型的轉(zhuǎn)換:
a.常數(shù)在表數(shù)范圍內(nèi)是能夠自動(dòng)類型轉(zhuǎn)換的
b.數(shù)據(jù)范圍小的能夠自動(dòng)數(shù)據(jù)類型大的轉(zhuǎn)換(注意特例)
c. float 到 int,float 到 long,double 到 int,double 到 long 等由浮點(diǎn)類型轉(zhuǎn)換成整數(shù)類型時(shí),是不會(huì)自動(dòng)轉(zhuǎn)換的,不然將會(huì)丟失精度。
d.引用類型能夠自動(dòng)轉(zhuǎn)換為父類的
e.基本類型和它們包裝類型是能夠互相轉(zhuǎn)換的
3. java語言支持的變量類型
- 類變量:獨(dú)立于方法之外的變量,用 static 修飾。
- 實(shí)例變量:獨(dú)立于方法之外的變量,不過沒有 static 修飾。
- 局部變量:類的方法中的變量。
3.1 Java 局部變量
局部變量聲明在方法、構(gòu)造方法或者語句塊中;
局部變量在方法、構(gòu)造方法、或者語句塊被執(zhí)行的時(shí)候創(chuàng)建,當(dāng)它們執(zhí)行完成后,變量將會(huì)被銷毀;
訪問修飾符不能用于局部變量;
局部變量只在聲明它的方法、構(gòu)造方法或者語句塊中可見;
局部變量是在棧上分配的。
局部變量沒有默認(rèn)值,所以局部變量被聲明后,必須經(jīng)過初始化,才可以使用。
3.2 實(shí)例變量
實(shí)例變量聲明在一個(gè)類中,但在方法、構(gòu)造方法和語句塊之外;
當(dāng)一個(gè)對象被實(shí)例化之后,每個(gè)實(shí)例變量的值就跟著確定;
實(shí)例變量在對象創(chuàng)建的時(shí)候創(chuàng)建,在對象被銷毀的時(shí)候銷毀;
實(shí)例變量的值應(yīng)該至少被一個(gè)方法、構(gòu)造方法或者語句塊引用,使得外部能夠通過這些方式獲取實(shí)例變量信息;
實(shí)例變量可以聲明在使用前或者使用后;
訪問修飾符可以修飾實(shí)例變量;
實(shí)例變量對于類中的方法、構(gòu)造方法或者語句塊是可見的。一般情況下應(yīng)該把實(shí)例變量設(shè)為私有。通過使用訪問修飾符可以使實(shí)例變量對子類可見;
實(shí)例變量具有默認(rèn)值。數(shù)值型變量的默認(rèn)值是0,布爾型變量的默認(rèn)值是false,引用類型變量的默認(rèn)值是null。變量的值可以在聲明時(shí)指定,也可以在構(gòu)造方法中指定;
實(shí)例變量可以直接通過變量名訪問。但在靜態(tài)方法以及其他類中,就應(yīng)該使用完全限定名:ObejectReference.VariableName。
3.3 類變量(靜態(tài)變量)
類變量也稱為靜態(tài)變量,在類中以static關(guān)鍵字聲明,但必須在方法構(gòu)造方法和語句塊之外。
無論一個(gè)類創(chuàng)建了多少個(gè)對象,類只擁有類變量的一份拷貝。
靜態(tài)變量除了被聲明為常量外很少使用。常量是指聲明為public/private,final和static類型的變量。常量初始化后不可改變。
靜態(tài)變量儲(chǔ)存在靜態(tài)存儲(chǔ)區(qū)。經(jīng)常被聲明為常量,很少單獨(dú)使用static聲明變量。
靜態(tài)變量在程序開始時(shí)創(chuàng)建,在程序結(jié)束時(shí)銷毀。
與實(shí)例變量具有相似的可見性。但為了對類的使用者可見,大多數(shù)靜態(tài)變量聲明為public類型。
默認(rèn)值和實(shí)例變量相似。數(shù)值型變量默認(rèn)值是0,布爾型默認(rèn)值是false,引用類型默認(rèn)值是null。變量的值可以在聲明的時(shí)候指定,也可以在構(gòu)造方法中指定。此外,靜態(tài)變量還可以在靜態(tài)語句塊中初始化。
靜態(tài)變量可以通過:ClassName.VariableName的方式訪問。
類變量被聲明為public static final類型時(shí),類變量名稱一般建議使用大寫字母。如果靜態(tài)變量不是public和final類型,其命名方式與實(shí)例變量以及局部變量的命名方式一致。
4 Java 中靜態(tài)變量和實(shí)例變量區(qū)別
- 靜態(tài)變量屬于類,該類不生產(chǎn)對象,通過類名就可以調(diào)用靜態(tài)變量。
- 實(shí)例變量屬于該類的對象,必須產(chǎn)生該類對象,才能調(diào)用實(shí)例變量。
在程序運(yùn)行時(shí)的區(qū)別:
- 實(shí)例變量屬于某個(gè)對象的屬性,必須創(chuàng)建了實(shí)例對象,其中的實(shí)例變量才會(huì)被分配空間,才能使用這個(gè)實(shí)例變量。
- 靜態(tài)變量不屬于某個(gè)實(shí)例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實(shí)例對象,靜態(tài)變量就會(huì)被分配空間,靜態(tài)變量就可以被使用了。
總之,實(shí)例變量必須創(chuàng)建對象后才可以通過這個(gè)對象來使用,靜態(tài)變量則可以直接使用類名來引用。
例如,對于下面的程序,無論創(chuàng)建多少個(gè)實(shí)例對象,
永遠(yuǎn)都只分配了一個(gè) staticInt 變量,并且每創(chuàng)建一個(gè)實(shí)例對象,這個(gè) staticInt 就會(huì)加 1;但是,每創(chuàng)建一個(gè)實(shí)例對象,就會(huì)分配一個(gè) random,
即可能分配多個(gè) random ,并且每個(gè) random 的值都只自加了1次。
執(zhí)行以上程序,輸出結(jié)果為:
staticInt = 3 random = 3 staticInt = 4 random = 35. java 實(shí)例變量在整個(gè)類內(nèi)部是可訪問的,而不管實(shí)例變量聲明在類的哪個(gè)位置。
import java.io.*;public class Employee{public Employee (String empName){name = empName;}public void setSalary(double empSal){salary = empSal;}public void printEmp(){System.out.println("name:" + name);System.out.println("salary:" + salary);}public static void main(String args[]){Employee empOne = new Employee("RUNOOB");empOne.setSalary(1000);empOne.printEmp();System.out.println(empOne.salary);}public String name;private double salary; }比如在上面代碼中,盡管實(shí)例變量聲明在類的尾部,在之前方法中仍可訪問。
6. 是否可以從一個(gè)static方法內(nèi)部發(fā)出對非static方法的調(diào)用?
public class Xix {// 靜態(tài)成員 public static String string="static成員";// 普通成員public String string2="非static成員";// 靜態(tài)方法public static void method(){string="sss";//string2="sss";編譯報(bào)錯(cuò),因?yàn)殪o態(tài)方法里面只能調(diào)用靜態(tài)方法或靜態(tài)成員//method2();System.out.println("這是static方法,static方法與對象無關(guān)");}// 普通方法 public void method2(){string ="string1";string2="string2";method(); //非靜態(tài)方法里面可以發(fā)出對static方法的調(diào)用System.out.println("這是非static方法,此方法必須和指定的對象關(guān)聯(lián)起來才起作用");}public static void main(String[] args) {Xix x=new Xix();x.method2();// 引用調(diào)用普通方法 x.method();// 引用調(diào)用靜態(tài)方法} }運(yùn)行結(jié)果:
這是static方法,static方法與對象無關(guān) 這是非static方法,此方法必須和指定的對象關(guān)聯(lián)起來才起作用 這是static方法,static方法與對象無關(guān)結(jié)論:
不可以。因?yàn)榉莝tatic方法是要與對象關(guān)聯(lián)在一起的,必須創(chuàng)建一個(gè)對象后,才可以在該對象上進(jìn)行方法調(diào)用,而static方法調(diào)用時(shí)不需要?jiǎng)?chuàng)建對象,可以直接調(diào)用。也就是說,當(dāng)一個(gè)static方法被調(diào)用時(shí),可能還沒有創(chuàng)建任何實(shí)例對象,如果從一個(gè)static方法中發(fā)出對非static方法的調(diào)用,那個(gè)非static方法是關(guān)聯(lián)到哪個(gè)對象上的呢?這個(gè)邏輯無法成立,所以,一個(gè)static方法內(nèi)部無法發(fā)出對非static方法的調(diào)用。
摘自:http://www.runoob.com/java/java-variable-types.html
總結(jié)
以上是生活随笔為你收集整理的java的数据类型、变量类型笔记总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 放倒师妃暄txt(放倒师妃暄)
- 下一篇: Java 修饰符、运算符笔记总结