Java語(yǔ)言基礎(chǔ)學(xué)習(xí)Object類和包裝類

一蘸拔、java.lang.Object類

1.Object類是所有Java類的根父類

2.如果在類的聲明中未使用extends關(guān)鍵字指明其父類魏颓,則默認(rèn)父類為java.lang.Object類

例:method(Object obj){…} //可以接收任何類作為其參數(shù) Person o=new Person(); method(o);

public class Person { ...

}

//等價(jià)于:

public class Person extends Object {

...

}

3.Object類中的功能(屬性都哭、方法)就具有通用性。

*?屬性:無(wú)

*?方法:equals()?烁涌、toString()?帐姻、getClass()?、hashCode()?悯恍、clone()?库糠、finalize()、wait()?涮毫、?notify()瞬欧、notifyAll()

finalize()----->垃圾回收機(jī)制回收任何對(duì)象之前,總會(huì)先調(diào)用它的finalize方法罢防。永遠(yuǎn)不要主動(dòng)調(diào)用某個(gè)對(duì)象的finalize方法艘虎,應(yīng)該交給垃圾回收機(jī)制調(diào)用。

4.?Object類只聲明了一個(gè)空參的構(gòu)造器咒吐。

?二野建、Object 類的使用-toString() 方法?

當(dāng)我們輸出一個(gè)對(duì)象的引用時(shí),實(shí)際上就是調(diào)用當(dāng)前對(duì)象的toString()恬叹。輸出的具體信息看toString()方法體內(nèi)容候生。Date date=new Date(); System.out.println(“now=”+date); 相當(dāng)于 System.out.println(“now=”+date.toString());

Object類中toString()的定義:toString()方法在Object類中定義,其返回值是String類型绽昼,返回類名和它 的引用地址唯鸭。

//Object類中toString()的定義:

public String toString() {

? ? ? ? return getClass().getName() + "@" + Integer.toHexString(hashCode());

? ? }

Customer cust1 = new Customer("Tom",21);

? ? System.out.println(cust1.toString());//com.atguigu.java1.Customer@15db5225

? ? System.out.println(cust1);//com.atguigu.java1.Customer@15db5225

public void println(Object x) {

? ? String s = String.valueOf(x);

? ? ? ? synchronized (this) {

? ? ? ? ? ? print(s);

? ? ? ? ? ? newLine();

? ? ? ? }

? ? }

public static String valueOf(Object obj) {

? ? ? ? return (obj == null) ? "null" : obj.toString();

? ? }

在進(jìn)行String與其它類型數(shù)據(jù)的連接操作時(shí),自動(dòng)調(diào)用toString()方法 Date now=new Date(); System.out.println(“now=”+now); 相當(dāng)于 System.out.println(“now=”+now.toString());

像String硅确、Date目溉、File唠粥、包裝類等都重寫了Object類中toString()方法。使得在調(diào)用對(duì)象的toString()時(shí)停做,返回"實(shí)體內(nèi)容"信息。

可以根據(jù)需要在用戶自定義類型中重寫toString()方法?如String 類重寫了toString()方法大莫,返回字符串的值蛉腌。?s1=“hello”;System.out.println(s1);//相當(dāng)于System.out.println(s1.toString());

基本類型數(shù)據(jù)轉(zhuǎn)換為String類型時(shí),調(diào)用了對(duì)應(yīng)包裝類的toString()方法 int a=10; System.out.println(“a=”+a);

三只厘、?Java中的JUnit單元測(cè)試

步驟:

1.選中當(dāng)前工程 - 右鍵選擇:build path - add libraries - JUnit? - 下一步

2.創(chuàng)建Java類烙丛,進(jìn)行單元測(cè)試。

* 此時(shí)的Java類要求:① 此類是public的 ②此類提供公共的無(wú)參的構(gòu)造器(默認(rèn))羔味。

3.此類中聲明單元測(cè)試方法河咽。

* 此時(shí)的單元測(cè)試方法:方法的權(quán)限是public,沒(méi)有返回值,沒(méi)有形參

4.此單元測(cè)試方法上需要聲明注解:@Test,并在單元測(cè)試類中導(dǎo)入:import org.junit.Test;

5.聲明好單元測(cè)試方法以后赋元,就可以在方法體內(nèi)測(cè)試相關(guān)的代碼忘蟹。

6.寫完代碼以后,左鍵雙擊單元測(cè)試方法名搁凸,右鍵:run as - JUnit Test媚值。每個(gè)單元測(cè)試方法是獨(dú)立的。

public class JUnitTest {//JunitTest單元測(cè)試類名

? ? public void test(){//test單元測(cè)試方法名



? ? }

}

說(shuō)明:

1.如果執(zhí)行結(jié)果沒(méi)有任何異常:綠條

2.如果執(zhí)行結(jié)果出現(xiàn)異常:紅條

四护糖、包裝類的使用

針對(duì)八種基本數(shù)據(jù)類型定義相應(yīng)的引用類型—包裝類(封裝類)

有了類的特點(diǎn)褥芒,就可以調(diào)用類中的方法,Java才是真正的面向?qū)ο蟆?/p>

裝箱:包裝類使得一個(gè)基本數(shù)據(jù)類型的數(shù)據(jù)變成了類嫡良。

有了類的特點(diǎn)锰扶,可以調(diào)用類中的方法。

int i = 500;

Integer t = new Integer(i);

String s = t.toString(); // s = “500“,t是類寝受,有toString方法

String s1 = Integer.toString(314); // s1= “314“? 將數(shù)字轉(zhuǎn)換成字符串坷牛。

String s2=“4.56”;

double ds=Double.parseDouble(s2);? //將字符串轉(zhuǎn)換成數(shù)字

?拆箱:將數(shù)字包裝類中內(nèi)容變?yōu)榛緮?shù)據(jù)類型。

int i = 500;

Integer t = new Integer(i);

int j = t.intValue(); // j = 500很澄,intValue取出包裝類中的數(shù)據(jù)

包裝類在實(shí)際開發(fā)中用的最多的在于字符串變?yōu)榛緮?shù)據(jù)類型漓帅。

String str1 = "30" ;

String str2 = "30.3" ;

int x = Integer.parseInt(str1) ; // 將字符串變?yōu)閕nt型

float f = Float.parseFloat(str2) ; // 將字符串變?yōu)閕nt型

基本數(shù)據(jù)類型 --->包裝類:調(diào)用包裝類的構(gòu)造器

//基本數(shù)據(jù)類型 --->包裝類:調(diào)用包裝類的構(gòu)造器

? @Test

? public void test1(){


? ? int num1 = 10;

// System.out.println(num1.toString());

? ? Integer in1 = new Integer(num1);

? ? System.out.println(in1.toString());


? ? Integer in2 = new Integer("123");

? ? System.out.println(in2.toString());


? ? //報(bào)異常

// Integer in3 = new Integer("123abc");

// System.out.println(in3.toString());


? ? Float f1 = new Float(12.3f);

? ? Float f2 = new Float("12.3");

? ? System.out.println(f1);

? ? System.out.println(f2);


? ? Boolean b1 = new Boolean(true);

? ? Boolean b2 = new Boolean("TrUe");

? ? System.out.println(b2);//false

? ? Boolean b3 = new Boolean("true123");

? ? System.out.println(b3);//false



? ? Order order = new Order();

? ? System.out.println(order.isMale);//false初始默認(rèn)值

? ? System.out.println(order.isFemale);//null

? }

class Order{


? boolean isMale;

? Boolean isFemale;

}


包裝類--->基本數(shù)據(jù)類型:調(diào)用包裝類Xxx的xxxValue()

@Test

? public void test2(){

? ? Integer in1 = new Integer(12);


? ? int i1 = in1.intValue();

? ? System.out.println(i1 + 1);



? ? Float f1 = new Float(12.3);

? ? float f2 = f1.floatValue();

? ? System.out.println(f2 + 1);

? }


自動(dòng)裝箱(類型必須匹配):基本數(shù)據(jù)類型 --->包裝類

//自動(dòng)裝箱:基本數(shù)據(jù)類型 --->包裝類

? ? int num2 = 10;

? ? Integer in1 = num2;//自動(dòng)裝箱


? ? boolean b1 = true;

? ? Boolean b2 = b1;//自動(dòng)裝箱


自動(dòng)拆箱(類型必須匹配):包裝類--->基本數(shù)據(jù)類型

System.out.println(in1.toString());

? ? int num3 = in1;//自動(dòng)拆箱


基本數(shù)據(jù)類型、包裝類--->String類型:調(diào)用String重載的valueOf(Xxx xxx)

@Test

? public void test4(){


? ? int num1 = 10;

? ? //方式1:連接運(yùn)算

? ? String str1 = num1 + "";

? ? //方式2:調(diào)用String的valueOf(Xxx xxx)

? ? float f1 = 12.3f;

? ? String str2 = String.valueOf(f1);//"12.3"


? ? Double d1 = new Double(12.4);

? ? String str3 = String.valueOf(d1);

? ? System.out.println(str2);//”12.3”

? ? System.out.println(str3);//"12.4"


? }


String類型 --->基本數(shù)據(jù)類型痴怨、包裝類:調(diào)用包裝類的parseXxx(String s)

@Test

? public void test5(){

? ? String str1 = "123";

? ? //錯(cuò)誤的情況:

//? int num1 = (int)str1;

//? Integer in1 = (Integer)str1;

? ? //可能會(huì)報(bào)NumberFormatException

? ? int num2 = Integer.parseInt(str1);

? ? System.out.println(num2 + 1);


? ? String str2 = "true1";

? ? boolean b1 = Boolean.parseBoolean(str2);

? ? System.out.println(b1);//false(不是true都返回false)

? }

面試題:

@Test

? public void test1() {

? ? Object o1 = true ? new Integer(1) : new Double(2.0);

? ? System.out.println(o1);//1.0(自動(dòng)類型提升忙干,編譯時(shí)要統(tǒng)一類型所以Integer會(huì)自動(dòng)轉(zhuǎn)換成Double類型。

? }

@Test

? public void test2() {

? ? Object o2;

? ? if (true)

? ? ? o2 = new Integer(1);

? ? else

? ? ? o2 = new Double(2.0);

? ? System.out.println(o2);// 1

? }

@Test

? public void test3() {

? ? Integer i = new Integer(1);

? ? Integer j = new Integer(1);

? ? System.out.println(i == j);//false


? ? //Integer內(nèi)部定義了IntegerCache結(jié)構(gòu)浪藻,IntegerCache中定義了Integer[],

? ? 保存了從-128~127范圍的整數(shù)捐迫。如果我們使用自動(dòng)裝箱的方式,給Integer賦值的范圍在-128~127范圍內(nèi)時(shí)爱葵,可以直接使用數(shù)組中的元素施戴,不用再去new了反浓。目的:提高裝箱效率


? ? Integer m = 1;

? ? Integer n = 1;

? ? System.out.println(m == n);//true

? ? Integer x = 128;//相當(dāng)于new了一個(gè)Integer對(duì)象

? ? Integer y = 128;//相當(dāng)于new了一個(gè)Integer對(duì)象

? ? System.out.println(x == y);//false

? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赞哗,隨后出現(xiàn)的幾起案子雷则,更是在濱河造成了極大的恐慌,老刑警劉巖肪笋,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件月劈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡藤乙,警方通過(guò)查閱死者的電腦和手機(jī)猜揪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坛梁,“玉大人而姐,你說(shuō)我怎么就攤上這事』溃” “怎么了拴念?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)褐缠。 經(jīng)常有香客問(wèn)我丈莺,道長(zhǎng),這世上最難降的妖魔是什么送丰? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任缔俄,我火速辦了婚禮,結(jié)果婚禮上器躏,老公的妹妹穿的比我還像新娘俐载。我一直安慰自己,他們只是感情好登失,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布遏佣。 她就那樣靜靜地躺著,像睡著了一般揽浙。 火紅的嫁衣襯著肌膚如雪状婶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天馅巷,我揣著相機(jī)與錄音膛虫,去河邊找鬼。 笑死钓猬,一個(gè)胖子當(dāng)著我的面吹牛稍刀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼账月,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼综膀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起局齿,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剧劝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后抓歼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讥此,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年锭部,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片面褐。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拌禾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出展哭,到底是詐尸還是另有隱情湃窍,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布匪傍,位于F島的核電站您市,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏役衡。R本人自食惡果不足惜茵休,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望手蝎。 院中可真熱鬧榕莺,春花似錦、人聲如沸棵介。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邮辽。三九已至唠雕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吨述,已是汗流浹背岩睁。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揣云,地道東北人笙僚。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像灵再,于是被迫代替她去往敵國(guó)和親肋层。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亿笤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359