JAVA中的幾種基本類型
作用域public,private,protected,以及不寫時的區(qū)別
類的成員不寫訪問修飾時默認為default。默認對于同一個包中的其他類相當于公開(public)豆励,對于不是同一個包中的其他類相當于私有(private)夺荒。受保護(protected)對子類相當于公開,對不是同一包中的沒有父子關系的類相當于私有良蒸。
Java面向?qū)ο蟮奶卣魇鞘裁矗?/b>
特征:繼承技扼、封裝、多態(tài)嫩痰、抽象
繼承:繼承是從已有類得到繼承信息創(chuàng)建新類的過程剿吻。提供繼承信息的類被稱為父類(超類、基類)串纺;得到繼承信息的類被稱為子類(派生類)丽旅。繼承讓變化中的軟件系統(tǒng)有了一定的延續(xù)性,同時繼承也是封裝程序中可變因素的重要手段纺棺。
封裝:通常認為封裝是把數(shù)據(jù)和操作數(shù)據(jù)的方法綁定起來榄笙,對數(shù)據(jù)的訪問只能通過已定義的接口。
多態(tài)性:多態(tài)性是指允許不同子類型的對象對同一消息作出不同的響應祷蝌。簡單的說就是用同樣的對象引用調(diào)用同樣的方法但是做了不同的事情茅撞。多態(tài)性分為編譯時的多態(tài)性和運行時的多態(tài)性。
抽象:抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個類米丘,這個類只考慮這些事物的相似和共性之處剑令,并且會忽略與當前主題和目標無關的那些方面,將注意力集中在與當前目標有關的方面蠕蚜。例如尚洽,看到一只螞蟻和大象悔橄,你能夠想象出它們的相同之處靶累,那就是抽象。抽象包括行為抽象和狀態(tài)抽象兩個方面癣疟。
組合(Composition)挣柬、聚合(Aggregation)區(qū)別:
組合和聚合是有很大區(qū)別的,這個區(qū)別不是在形式上睛挚,而是在本質(zhì)上:
比如A類中包含B類的一個引用b邪蛔,當A類的一個對象消亡時,b這個引用所指向的對象也同時消亡(沒有任何一個引用指向它扎狱,成了垃圾對象)侧到,這種情況叫做組合,
反之b所指向的對象還會有另外的引用指向它淤击,這種情況叫聚合
int與Integer的區(qū)別匠抗,Integer的值緩存范圍
基本對比:
(1)Integer是int的包裝類;int是基本數(shù)據(jù)類型污抬;?
(2)Integer變量必須實例化后才能使用汞贸;int變量不需要;?
(3)Integer實際是對象的引用印机,指向此new的Integer對象矢腻;int是直接存儲數(shù)據(jù)值 ;?
(4)Integer的默認值是null射赛;int的默認值是0多柑。
深入對比:
(1)由于Integer變量實際上是對一個Integer對象的引用,所以兩個通過new生成的Integer變量永遠是不相等的(因為new生成的是兩個對象楣责,其內(nèi)存地址不同)顷蟆。
(2)Integer變量和int變量比較時,只要兩個變量的值是相等的腐魂,則結(jié)果為true(因為包裝類Integer和基本數(shù)據(jù)類型int比較時帐偎,java會自動拆包裝為int,然后進行比較蛔屹,實際上就變?yōu)閮蓚€int變量的比較)削樊。
(3)非new生成的Integer變量和new Integer()生成的變量比較時,結(jié)果為false。(因為非new生成的Integer變量指向的是java常量池中的對象漫贞,而new Integer()生成的變量指向堆中新建的對象甸箱,兩者在內(nèi)存中的地址不同)
(4)對于兩個非new生成的Integer對象,進行比較時迅脐,如果兩個變量的值在區(qū)間-128到127之間芍殖,則比較結(jié)果為true,如果兩個變量的值不在此區(qū)間谴蔑,則比較結(jié)果為false豌骏。原因:java在編譯Integer i = 100 ;時,會翻譯成為Integer i = Integer.valueOf(100)隐锭。而java API中對Integer類型的valueOf的定義如下窃躲,對于-128到127之間的數(shù),會進行緩存钦睡,Integer i = 127時蒂窒,會將127進行緩存,下次再寫Integer j = 127時荞怒,就會直接從緩存中取洒琢,就不會new了。
public?static?void?main(String[]?args)?{ ?
Integer?i=new?Integer(100);??
Integer?s=new?Integer(100);??
int?i1=100;??
Integer?s1=100;??
Integer?j?=100;??
System.out.println(s1?==?j);//運行結(jié)果true??
Integer?i2?=128;??
Integer?j2?=128;??
System.out.println(i2?==?j2);//運行結(jié)果false??
System.out.println(i==s);//運行結(jié)果false??
System.out.println(i==i1);//運行結(jié)果true??
System.out.println(s==s1);//運行結(jié)果false??
???}??
?? 總之Java是一個近乎純潔的面向?qū)ο缶幊陶Z言褐桌,但是為了編程的方便還是引入不是對象的基本數(shù)據(jù)類型衰抑,但是為了能夠?qū)⑦@些基本數(shù)據(jù)類型當成對象操作,Java為每一個基本數(shù)據(jù)類型都引入了對應的包裝類型(wrapper class)撩嚼,int的包裝類就是Integer停士,從JDK 1.5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉(zhuǎn)換完丽。小編推薦一個學java的學習裙【五五七恋技,八六五,】逻族,【驗證:煙火】無論你是大牛還是小白蜻底,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習!裙內(nèi)有開發(fā)工具聘鳞,很多干貨和技術(shù)資料分享!每天晚上8點還會直播講課薄辅,大家可以一起互動學習,一起進步抠璃。
...
final, finally, finalize 的區(qū)別
(1)final修飾符(關鍵字)如果一個類被申明為final,意味著它不能再派生出新的子類站楚,不能作為父類被繼承,因此一個類不能既被聲明為abstract的搏嗡,又被聲明為final的窿春。將變量和方法聲明為final變量的拉一,可以保證它們在使用中不被改變。被聲明為final的變量必須在申明時給定初值旧乞,而在以后的引用中只能讀取不可以被修改蔚润。被申明為final的方法也同樣只能使用不能重載。
(2)finally在異常處理時提供finally塊來執(zhí)行任何清除操作尺栖。如果拋出一個異常嫡纠,那么相匹配的catch子句就會執(zhí)行,然后控制就會進入finally塊(如果有的話)延赌。
(3)finalize方法名除盏。java技術(shù)允許使用finalize()方法在垃圾收集器將對象從內(nèi)存中清除出去之前做好必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用的情況下對這個對象的調(diào)用皮胡。它是在object類中定義的痴颊,因此所有的類都繼承了它赏迟。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作屡贺。finalize()方法是在垃圾收集器刪除對象之前對這個對象的調(diào)用。
&和&&锌杀、|和||的區(qū)別甩栈?
(1) 與操作:與操作分為兩種,一種是普通與糕再,另外一種是短路與量没,一樣的地方就是二者執(zhí)行最后的結(jié)果是一樣的,但是執(zhí)行的過程有區(qū)別:
???? 普通與(&):表示所有的判斷條件都要執(zhí)行突想,不管前面是否滿足殴蹄;
???? 短路與(&&):如果前面的條件已經(jīng)是false了,那么后面的條件不需要再進行任何的判斷猾担;
(2)同理袭灯,或操作:或操作分為兩種,一種是普通或绑嘹,另外一種是短路或:
??? 普通或(|):表示所有的判斷條件都要執(zhí)行稽荧,不管前面是否滿足;
??? 短路或(||):如果前面的條件已經(jīng)是true了工腋,那么后面無論如何判斷都是true姨丈,就不判斷了;
在開發(fā)之中考慮到程序的性能肯定使用短路與(&&)和短路或(||)擅腰,執(zhí)行效率更高蟋恬。