java基礎(chǔ)概念

java_basic

介紹

java基礎(chǔ)

三大特性之—封裝
1、良好的封裝能夠減少耦合。
2、類內(nèi)部的結(jié)構(gòu)可以自由修改。
3、可以對(duì)成員進(jìn)行更精確的控制。
4、隱藏信息,實(shí)現(xiàn)細(xì)節(jié)。
三大特性之—繼承
優(yōu)點(diǎn)
1、子類擁有父類非private的屬性和方法。
2、子類可以擁有自己屬性和方法,即子類可以對(duì)父類進(jìn)行擴(kuò)展。
3、子類可以用自己的方式實(shí)現(xiàn)父類的方法。

缺點(diǎn)
1、父類變,子類就必須變。
2、繼承破壞了封裝,對(duì)于父類而言,它的實(shí)現(xiàn)細(xì)節(jié)對(duì)與子類來(lái)說(shuō)都是透明的。
3、繼承是一種強(qiáng)耦合關(guān)系。
三大特性之—多態(tài)
多態(tài)有三個(gè)必要條件:繼承、重寫、向上轉(zhuǎn)型。

繼承:在多態(tài)中必須存在有繼承關(guān)系的子類和父類。
重寫:子類對(duì)父類中某些方法進(jìn)行重新定義,在調(diào)用這些方法時(shí)就會(huì)調(diào)用子類的方法。
向上轉(zhuǎn)型:在多態(tài)中需要將子類的引用賦給父類對(duì)象,只有這樣該引用才能夠具備技能調(diào)用父類的方法和子類的方法。

抽象

 1、抽象類不能被實(shí)例化,實(shí)例化的工作應(yīng)該交由它的子類來(lái)完成,它只需要有一個(gè)引用即可。
 2、抽象方法必須由子類來(lái)進(jìn)行重寫。
 3、只要包含一個(gè)抽象方法的抽象類,該方法必須要定義成抽象類,不管是否還包含有其他方法。
 4、抽象類中可以包含具體的方法,當(dāng)然也可以不包含抽象方法。
 5、子類中的抽象方法不能與父類的抽象方法同名。
 6、abstract不能與final并列修飾同一個(gè)類。
 7、abstract 不能與private、static、final或native并列修飾同一個(gè)方法。、

接口

1、個(gè)Interface的方所有法訪問(wèn)權(quán)限自動(dòng)被聲明為public。確切的說(shuō)只能為public,當(dāng)然你可以顯示的聲明為protected、private,但是編譯會(huì)出錯(cuò)!
2、接口中可以定義“成員變量”,或者說(shuō)是不可變的常量,因?yàn)榻涌谥械摹俺蓡T變量”會(huì)自動(dòng)變?yōu)闉閜ublic static final。可以通過(guò)類命名直接訪問(wèn):ImplementClass.name。
3、接口中不存在實(shí)現(xiàn)的方法。
4、實(shí)現(xiàn)接口的非抽象類必須要實(shí)現(xiàn)該接口的所有方法。抽象類可以不用實(shí)現(xiàn)。
5、不能使用new操作符實(shí)例化一個(gè)接口,但可以聲明一個(gè)接口變量,該變量必須引用(refer to)一個(gè)實(shí)現(xiàn)該接口的類的對(duì)象??梢允褂?instanceof 檢查一個(gè)對(duì)象是否實(shí)現(xiàn)了某個(gè)特定的接口。例如:if(anObject instanceof Comparable){}。
6、在實(shí)現(xiàn)多接口的時(shí)候一定要避免方法名的重復(fù)。

接口與抽象類區(qū)別

1、抽象類在java語(yǔ)言中所表示的是一種繼承關(guān)系,一個(gè)子類只能存在一個(gè)父類,但是可以存在多個(gè)接口。
2、 在抽象類中可以擁有自己的成員變量和非抽象類方法,但是接口中只能存在靜態(tài)的不可變的成員數(shù)據(jù)(不過(guò)一般都不在接口中定義成員數(shù)據(jù)),而且它的所有方法都是抽象的。
3、抽象類和接口所反映的設(shè)計(jì)理念是不同的,抽象類所代表的是“is-a”的關(guān)系,而接口所代表的是“l(fā)ike-a”的關(guān)系。
深拷貝淺拷貝
// 淺拷貝 是引用 原來(lái)對(duì)象的地址
// 深拷貝 是新創(chuàng)建的對(duì)象 所有的屬性實(shí)例等 都和源對(duì)象一樣,兩個(gè)對(duì)象互不影響


//1、 基本類型:如果變量是基本很類型,則拷貝其值,比如int、float等。
//2、 對(duì)象:如果變量是一個(gè)實(shí)例對(duì)象,則拷貝其地址引用,也就是說(shuō)此時(shí)新對(duì)象與原來(lái)對(duì)象是公用該實(shí)例變量。
//3、 String字符串:若變量為String字符串,則拷貝其地址引用。但是在修改時(shí),它會(huì)從字符串池中重新生成一個(gè)新的字符串,原有String對(duì)象保持不變。

//基本數(shù)據(jù)類型是值傳遞,所以修改值后不會(huì)影響另一個(gè)對(duì)象的該屬性值;
//
//引用數(shù)據(jù)類型是地址傳遞(引用傳遞),所以修改值后另一個(gè)對(duì)象的該屬性值會(huì)同步被修改。

// 深拷貝方法 1 重寫 clone 方法 2 序列化實(shí)現(xiàn)深拷貝

1 &和&&的區(qū)別

Java中&&和&都是表示與的邏輯運(yùn)算符,都表示邏輯運(yùn)輸符and,當(dāng)兩邊的表達(dá)式都為true的時(shí)候,整個(gè)運(yùn)算結(jié)果才為true,否則為false。

&&的短路功能,當(dāng)?shù)谝粋€(gè)表達(dá)式的值為false的時(shí)候,則不再計(jì)算第二個(gè)表達(dá)式;&則兩個(gè)表達(dá)式都執(zhí)行。
        int i = 0;
        if (i == 3 && ++i > 0) {
        }
        System.out.println("i = " + i);        輸出   0
        
&可以用作位運(yùn)算符,當(dāng)&兩邊的表達(dá)式不是Boolean類型的時(shí)候,&表示按位操作。
    int i = 0;
    if (i == 3 & ++i > 0) {
    }
    System.out.println("i = " + i);        輸出   1
    
    
    
| 和 || 的區(qū)別

if(表達(dá)式a  |   表達(dá)式b)     a 為 true  時(shí)  才會(huì)計(jì)算  b
if(表達(dá)式a  |   表達(dá)式b)     a 為 true  時(shí)  就直接返回了  不會(huì)計(jì)算    b

2 Java平臺(tái)的理解?“Java是解釋執(zhí)行”,這句話正確嗎?

1   書寫一次,到處運(yùn)行   垃圾收集
2   Java是解釋執(zhí)行”這句話,這個(gè)說(shuō)法不太準(zhǔn)確
    開(kāi)發(fā)的Java的源代碼,首先通過(guò)Javac編譯成為字節(jié)碼(bytecode),然后,在運(yùn)行時(shí),
    通過(guò) Java虛擬機(jī)(JVM)內(nèi)嵌的解釋器將字節(jié)碼轉(zhuǎn)換成為最終的機(jī)器碼。但是常見(jiàn)的JVM,
    比如我們大多數(shù)情況使用的Oracle JDK提供的Hotspot JVM,都提供了JIT(Just-In-Time)編譯器,
    也就是通常所說(shuō)的動(dòng)態(tài)編譯器,JIT能夠在運(yùn)行時(shí)將熱點(diǎn)代碼編譯成機(jī)器碼,
    這種情況下部分熱點(diǎn)代碼就屬于編譯執(zhí)行,而不是解釋執(zhí)行了。

3 對(duì)比Exception和Error

1   Exception和Error都是繼承了Throwable類  
2   Throwable類型的實(shí)例才可以被拋出(throw)或者捕獲(catch),它是異常處理機(jī)制的基本組成類型。
3   Exception是程序正常運(yùn)行中,可以預(yù)料的意外情況,可能并且應(yīng)該被捕獲,進(jìn)行相應(yīng)處理。
4   Error是指在正常情況下,不大可能出現(xiàn)的情況,絕大部分的Error都會(huì)導(dǎo)致程序(比如JVM自身)處于非正常的、
    不可恢復(fù)狀態(tài)。既然是非正常情況,所以不便于也不需要捕獲,常見(jiàn)的比如OutOfMemoryError之類,都是Error的子類。    

4 final、finally、 finalize有什么不同

1   final可以用來(lái)修飾類、方法、變量,分別有不同的意義,final修飾的class代表不可以繼承擴(kuò)展,
    final的變量是不可以修改的,而final的方法也是不可以重寫的(override)。        
2   finally則是Java保證重點(diǎn)代碼一定要被執(zhí)行的一種機(jī)制。
    我們可以使用try-finally或者try-catch-finally來(lái)進(jìn)行類似關(guān)閉JDBC連接、保證unlock鎖等動(dòng)作。    
3   finalize是基礎(chǔ)類java.lang.Object的一個(gè)方法,它的設(shè)計(jì)目的是保證對(duì)象在被垃圾收集前完成特定資源的回收。
    finalize機(jī)制現(xiàn)在已經(jīng)不推薦使用,并且在JDK 9開(kāi)始被標(biāo)記為deprecated。   

5 強(qiáng)引用、軟引用、弱引用、幻象引用有什么區(qū)別?具體使用場(chǎng)景是什么

6 String、StringBuffer、StringBuilder有什么區(qū)別?

String                 final 不可變 每次拼接都會(huì)產(chǎn)生新的對(duì)象
StringBuffer           每次拼接不會(huì)產(chǎn)生新的對(duì)象 線程安全
StringBuilder          每次拼接不會(huì)產(chǎn)生新的對(duì)象 線程不安全

7 Java反射機(jī)制,動(dòng)態(tài)代理是基于什么原理

反射我們可以直接操作類或者對(duì)象,比如獲取某個(gè)對(duì)象的類定義,獲取類聲明的屬性和方法,
調(diào)用方法或者構(gòu)造對(duì)象,甚至可以運(yùn)行時(shí)修改類定義

動(dòng)態(tài)代理是一種方便運(yùn)行時(shí)動(dòng)態(tài)構(gòu)建代理、動(dòng)態(tài)處理代理方法調(diào)用的機(jī)制,很多場(chǎng)景都是利用類似機(jī)制做到的,
比如用來(lái)包裝RPC調(diào)用、面向切面的編程(AOP)。    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容