1.1匿名內(nèi)部類(lèi)
匿名內(nèi)部類(lèi):沒(méi)有名字的內(nèi)部的類(lèi)。
前提:接口或繼承父類(lèi)。
直接new匿名內(nèi)部類(lèi)的對(duì)象
interface A{
public void test();
}
//A a = new 實(shí)現(xiàn)類(lèi)對(duì)象;
A a = new A(){//從此處開(kāi)始瘸羡,就是匿名的呢不累
public void test();
};//到此處結(jié)束
a.test();
一般匿名內(nèi)部類(lèi)適合:使用一次,創(chuàng)建一次對(duì)象搓茬。
匿名內(nèi)部類(lèi):編譯之后產(chǎn)生字節(jié)碼文件:
內(nèi)部類(lèi)的字節(jié)碼文件名的規(guī)則:先寫(xiě)外部類(lèi)名犹赖,然后$,然后是內(nèi)部類(lèi)的名
外部類(lèi)$1.class
外部類(lèi)$2.class
....
1卷仑、2Object類(lèi)
所有類(lèi)的根基峻村,Java中的所有的類(lèi),都會(huì)直接或間接的繼承Object類(lèi)锡凝。
只要是java中的類(lèi)對(duì)象粘昨,默認(rèn)都可以調(diào)用Object類(lèi)中的方法。
- 如果一個(gè)方法的參數(shù)為Object類(lèi)型窜锯,實(shí)際可以傳入任意的類(lèi)對(duì)象张肾。
- 如果一個(gè)方法的返回值是Object類(lèi)型,實(shí)際上可以返回任意的類(lèi)對(duì)象衬浑。
A:getClass()-->Class捌浩,未完待續(xù)--->反射
? 返回一個(gè)對(duì)象運(yùn)行時(shí)的類(lèi)類(lèi)型放刨。
? 對(duì)象.getClass()--->返回該對(duì)象所屬的類(lèi)的字節(jié)碼文件對(duì)象工秩。
? 理解為:返回的是堆中的實(shí)際的對(duì)象的類(lèi)型
B:hashCode()--->int,獲取對(duì)象的哈希碼
? 每當(dāng)產(chǎn)生一個(gè)對(duì)象的時(shí)候进统,都是由哈希算法計(jì)算出該對(duì)象的哈希值助币。
? 擴(kuò)展:該方法是native的。native詞義:"本土的螟碎,土著的"眉菱。native method,就是一個(gè)Java調(diào)用的非java代碼的接口掉分。方法的實(shí)現(xiàn)可能由非java語(yǔ)言實(shí)現(xiàn)俭缓。
C:toString()--->String克伊,返回一個(gè)對(duì)象的字符串表示形式
? 對(duì)象.toString()--->String,描述這個(gè)對(duì)象的华坦。
? Object類(lèi):對(duì)于toString()-->獲取的是對(duì)象的內(nèi)存地址(邏輯地址)
? getClass().getName() + @ + 對(duì)象的哈希值(轉(zhuǎn)16進(jìn)制)
? 實(shí)際上愿吹,我們并不希望獲取對(duì)象的內(nèi)存地址:對(duì)于對(duì)象的描述,我們認(rèn)為使用對(duì)象的各個(gè)屬性值惜姐,拼接一個(gè)字符串犁跪,更合理。
? 子類(lèi)應(yīng)該重寫(xiě)該方法歹袁。如何重寫(xiě)坷衍?習(xí)慣上是將對(duì)象的屬性拼接成一個(gè)字符串返回即可。
快捷鍵:shift+alt+s条舔,可以自動(dòng)生成toString()枫耳。
D:equals()-->boolean,用于比較兩個(gè)對(duì)象是否相等孟抗。
==:專(zhuān)門(mén)比較數(shù)值嘉涌,是否相等。適合8個(gè)基本數(shù)據(jù)類(lèi)型:byte夸浅,short仑最,int,long帆喇,float警医,double,char坯钦,boolean
equals()预皇,在Object類(lèi)中,提供了一個(gè)方法equals()婉刀,專(zhuān)門(mén)用于判斷對(duì)象是否相等吟温。
Object類(lèi)中,equals()方法的源代碼:
//在方法中this突颊,就指代了c1對(duì)象
public boolean equals(Object obj) {//Object obj = c2;
return (this == obj);
}
c1.equals(c2);//false
經(jīng)查看源代碼鲁豪, 我們發(fā)現(xiàn),父類(lèi)中的equals()律秃,但是實(shí)際上還是比較了對(duì)象的內(nèi)存地址爬橡,我們認(rèn)為不好用。所以子類(lèi)重寫(xiě)棒动。比較對(duì)象的各個(gè)屬性值糙申。
子類(lèi)重寫(xiě):重寫(xiě)的規(guī)則
? 應(yīng)該比較對(duì)象的各個(gè)屬性值即可,如果都相同船惨,那么認(rèn)為是相同的對(duì)象柜裸,最終返回true缕陕,否則返回false。
c1.equals(c2);
/*
分析:
this-->c1
obj-->c2疙挺,向上轉(zhuǎn)型
Cat c2 = new Cat();
c1.equals(c2);//Object obj = c2;
*/
//step1:先比較地址:c1和c2 的地址:this == obj榄檬,如果地址相等,直接返回true衔统。
//step2:判斷鹿榜,obj == null? obj--->Cat
//step3:比較對(duì)應(yīng)的屬性是否相等
this.各種屬性和
obj--->向下轉(zhuǎn)型:c2.各種屬性
1.3锦爵、8種基本類(lèi)型對(duì)應(yīng)的包裝類(lèi)
1.3.1 8種基本數(shù)據(jù)類(lèi)型
在java中舱殿,有兩大數(shù)據(jù)類(lèi)型:基本類(lèi)型,引用類(lèi)型
基本類(lèi)型:
- 整數(shù)型:byte险掀,int沪袭,short,long
- 浮點(diǎn)型:float樟氢,double
- 字符型:char冈绊,''
- 布爾型:boolean,
引用類(lèi)型:
- 數(shù)組
- 類(lèi)類(lèi)型
- 接口
- 集合埠啃。死宣。。碴开。
對(duì)于每一種基本數(shù)據(jù)類(lèi)型毅该,都有對(duì)應(yīng)的類(lèi)類(lèi)型。
序號(hào) | 基本數(shù)據(jù)類(lèi)型 | 對(duì)應(yīng)的包裝類(lèi) |
---|---|---|
1 | byte | java.lang.Byte |
2 | short | java.lang.Short |
3 | int | java.lang.Integer |
4 | long | java.lang.Long |
5 | float | java.lang.Float |
6 | double | java.lang.Double |
7 | char | java.lang.Character |
8 | boolean | java.lang.Boolean |
靜態(tài)屬性:
MAX_VALUE
MIN_VALUE
1.3.2 Number類(lèi)
Number類(lèi)作為6種數(shù)值類(lèi)型的包裝類(lèi)的直接父類(lèi)潦牛。然后再繼承Object類(lèi)
int眶掌,short,long巴碗,byte朴爬,float,double這6種都是數(shù)值類(lèi)型的橡淆。整數(shù)和小數(shù)召噩。
1、將基本類(lèi)型——>轉(zhuǎn)為對(duì)象類(lèi)型(裝箱)
構(gòu)造方法可以的明垢。
靜態(tài)的valueOf()
2蚣常、將對(duì)象類(lèi)型——>基本類(lèi)型(拆箱)
對(duì)象.xxxValue()
3市咽、將String類(lèi)型——>基本類(lèi)型
靜態(tài)的parseXXX(String類(lèi)型)痊银,基本類(lèi)型的數(shù)據(jù)
有256個(gè)已經(jīng)緩存好的數(shù)據(jù):[-128,127]。
1.3.3 裝箱和拆箱
裝箱:將基本類(lèi)型--->包裝類(lèi)類(lèi)型的對(duì)象
拆箱:從包裝類(lèi)類(lèi)型的對(duì)象——>基本類(lèi)型
JDK1.5之前施绎,需要自己通過(guò)代碼來(lái)實(shí)現(xiàn)裝箱和拆箱溯革。
之后贞绳,就皆大歡喜啦,奔走相告致稀,撒花冈闭,鼓掌。抖单。
自動(dòng):auto
自動(dòng)裝箱和自動(dòng)拆箱