一蘸拔、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
? }