面向?qū)ο蠛兔嫦蜻^程的區(qū)別
面向過程就是分析出解決問題所需要的步驟吨艇,然后用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依次調(diào)用就可以了;面向?qū)ο笫前褬?gòu)成問題事務(wù)分解成各個對象湘今,建立對象的目的不是為了完成一個步驟己单,而是為了描敘某個事物在整個解決問題的步驟中的行為唉窃。
面向過程 :面向過程性能比面向?qū)ο蟾摺?因為類調(diào)用時需要實例化,開銷比較大纹笼,比較消耗資源纹份,所以當(dāng)性能是最重要的考量因素的時候,比如單片機廷痘、嵌入式開發(fā)蔓涧、Linux/Unix 等一般采用面向過程開發(fā)。但是笋额,面向過程沒有面向?qū)ο笠拙S護元暴、易復(fù)用、易擴展兄猩。
面向?qū)ο?:面向?qū)ο笠拙S護茉盏、易復(fù)用、易擴展枢冤。 因為面向?qū)ο笥蟹庋b鸠姨、繼承、多態(tài)性的特性淹真,所以可以設(shè)計出低耦合的系統(tǒng)讶迁,使系統(tǒng)更加靈活、更加易于維護趟咆。但是添瓷,面向?qū)ο笮阅鼙让嫦蜻^程低梅屉。
2.Java的四個基本特性(抽象,封裝鳞贷,繼承坯汤,多態(tài))
--抽象:就是把現(xiàn)實生活中的某一類東西提取出來,用程序代碼表示搀愧,我們通常叫做類或者接口 抽象包括兩個方面:一個是數(shù)據(jù)抽象惰聂,一個是過程抽象。數(shù)據(jù)抽象也就是對象的屬性咱筛。過程抽象是對象的行為特征搓幌。
--封裝:把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作迅箩,對不可信的進行封裝隱藏溉愁。封裝分為屬性的封裝和方法的封裝。
--繼承:是對有著共同特性的多類事物饲趋,進行再抽象成一個類拐揭。這個類就是多類事物的父類。父類的意義在于抽取多類事物的共性奕塑。
--多態(tài):允許不同類的對象對同一消息做出響應(yīng)堂污。方法的重載、類的覆蓋正體現(xiàn)了多態(tài)龄砰。
3.重載和重寫的區(qū)別
重載實現(xiàn)的是編譯時的多態(tài)性盟猖,重寫實現(xiàn)的是運行時的多態(tài)性。重載發(fā)生在一個類中换棚,同名的方法如果有不同的參數(shù)列表則視為重載式镐;重寫發(fā)生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的參數(shù)列表固蚤,有兼容的返回類型碟案。”
重寫:從字面上看颇蜡,重寫就是 重新寫一遍的意思价说。其實就是在子類中把父類本身有的方法重新寫一遍。子類繼承了父類原有的方法风秤,但有時子類并不想原封不動的繼承父類中的某個方法鳖目,所以在方法名,參數(shù)列表缤弦,返回類型(除過子類中方法的返回值是父類中方法返回值的子類時)都相同的情況下领迈, 對方法體進行修改或重寫,這就是重寫。但要注意子類函數(shù)的訪問修飾權(quán)限不能少于父類的狸捅。
重載:在一個類中衷蜓,同名的方法如果有不同的參數(shù)列表(參數(shù)類型不同、參數(shù)個數(shù)不同甚至是參數(shù)順序不同)則視為重載尘喝。同時磁浇,重載對返回類型沒有要求,可以相同也可以不同朽褪,但不能通過返回類型是否相同來判斷重載置吓。
4.構(gòu)造器Constructor是否可被override
“構(gòu)造器Constructor不能被繼承,因此不能被重寫(Override),但是可以被重載(Overload)
二、構(gòu)造器如何工作缔赠?
Java在構(gòu)造實例時的順序是這樣的:
1衍锚、分配對象空間,并將對象中成員初始化為0或者空嗤堰,java不允許用戶操縱一個不定值的對象戴质。
2、執(zhí)行屬性值的顯式初始化
3踢匣、執(zhí)行構(gòu)造器
4 置森、將變量關(guān)聯(lián)到堆中的對象上
而執(zhí)行構(gòu)造器的步驟有可以分為以下幾步:
1、Bind構(gòu)造器的參數(shù)
2符糊、如果顯式的調(diào)用了this,那就遞歸調(diào)用this構(gòu)造器然后跳到步驟5
3呛凶、遞歸調(diào)用顯式或者隱式的父類構(gòu)造器男娄,除了Object以外,因為它沒有父類
4漾稀、執(zhí)行顯式的實例變量初始化(也就是上邊的流程中的第二步模闲,調(diào)用返回以后執(zhí)行,
這個步驟相當(dāng)于在父構(gòu)造器執(zhí)行后隱含執(zhí)行的崭捍,看樣子像一個特殊處理)
三尸折、構(gòu)造器不可被orerride(why)
其實你只需要記住一句話:構(gòu)造器不是方法,那么用來修飾方法特性的所有修飾符都不能用來修飾構(gòu)造器(并不等與構(gòu)造器
具備這些特性殷蛇,雖然不能用static修飾構(gòu)造器实夹,但它卻有靜態(tài)特性)構(gòu)造器只能用 public private protected這
三個權(quán)限修飾符,且不能有返回語句粒梦。
5.訪問控制符public,protected,private,以及默認(rèn)的區(qū)別
private 只有在本類中才能訪問
public 在任何地方都能訪問
protected 在同包內(nèi)的類及包外的子類能訪問
默認(rèn)(default)不寫在同包內(nèi)能訪問
private是只有本類中才能訪問亮航,public是都能訪問,默認(rèn)(包訪問權(quán)限)是只有本包內(nèi)才能訪問匀们,包括本包內(nèi)的子類和普通類缴淋,而protected是只要本包內(nèi)就能訪問,包括本包內(nèi)的子類和普通類,另外別的包內(nèi)的子類也能訪問重抖,但是普通類不能訪問露氮。所以說protected和默認(rèn)(包訪問權(quán)限)是很相似的,在同一個包內(nèi)钟沛,它們是一樣的畔规,而在另一個包內(nèi),默認(rèn)是不能訪問的讹剔,而protected是只有子類能訪問
6.是否可以繼承String類油讯,解釋原因
“java中不可以繼承String類. 因為String類有final修飾符,而final修飾的類是不能被繼承的
Java關(guān)鍵字final有“這是無法改變的”或者“終態(tài)的”含義,它可以修飾非抽象類延欠、非抽象類成員方法和變量陌兑。你可能出于兩種理解而需要阻止改變:設(shè)計或效率。
final類不能被繼承由捎,沒有子類兔综,final類中的方法默認(rèn)是final的。
final方法不能被子類的方法覆蓋狞玛,但可以被繼承软驰。
final成員變量表示常量,只能被賦值一次心肪,賦值后值不再改變锭亏。
final不能用于修飾構(gòu)造方法。
注意:父類的private成員方法是不能被子類方法覆蓋的硬鞍,因此private類型的方法默認(rèn)是final類型的慧瘤。
7.String和StringBuffer.StringBuitder的區(qū)別.
java中用于處理字符串常用的有三個類:
1、java.lang.String
2固该、java.lang.StringBuffer
3锅减、java.lang.StrungBuilder
三者共同之處:都是final類,不允許被繼承,主要是從性能和安全性上考慮的伐坏,因為這幾個類都是經(jīng)常被使用著怔匣,且考慮到防止其中的參數(shù)被參數(shù)修改影響到其他的應(yīng)用。
StringBuffer是線程安全桦沉,可以不需要額外的同步用于多線程中;
StringBuilder是非同步,運行于多線程中就需要使用著單獨同步處理每瞒,但是速度就比StringBuffer快多了;
StringBuffer與StringBuilder兩者共同之處:可以通過append、indert進行字符串的操作纯露。
String實現(xiàn)了三個接口:Serializable独泞、Comparable<String>、CarSequence
StringBuilder只實現(xiàn)了兩個接口Serializable苔埋、CharSequence懦砂,相比之下String的實例可以通過compareTo方法進行比較,其他兩個不可以。荞膘。
String為字符串常量罚随,而StringBuilder和StringBuffer均為字符串變量,即String對象一旦創(chuàng)建之后該對象是不可更改的羽资,但后兩者的對象是變量淘菩,是可以更改的
在線程安全上,StringBuilder是線程不安全的屠升,而StringBuffer是線程安全的
8.hashcode和eauats方法的關(guān)系
equals()相等的兩個對象潮改,hashcode()一定相等;
equals()不相等的兩個對象腹暖,卻并不能證明他們的hashcode()不相等汇在。
反過來:
hashcode()不等,一定能推出equals()也不等脏答;
hashcode()相等糕殉,equals()可能相等,也可能不等殖告。
9.抽象類和接口的區(qū)別
含有abstract修飾符的class即為抽象類阿蝶,abstract 類不能創(chuàng)建實例對象。含有abstract方法的類必須定義為abstract class黄绩,abstract class類中的方法不必是抽象的羡洁。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現(xiàn),所以爽丹,不能有抽象構(gòu)造方法或抽象靜態(tài)方法筑煮。如果子類沒有實現(xiàn)抽象父類中的所有抽象方法,那么子類也必須定義為abstract類型习劫。
接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的嚼隘。接口中的方法定義默認(rèn)為public abstract類型诽里,接口中的成員變量類型默認(rèn)為public static final。
下面比較一下兩者的語法區(qū)別:
1.抽象類可以有構(gòu)造方法飞蛹,接口中不能有構(gòu)造方法谤狡。
2.抽象類中可以有普通成員變量,接口中沒有普通成員變量
3.抽象類中可以包含非抽象的普通方法卧檐,接口中的所有方法必須都是抽象的墓懂,不能有非抽象的普通方法。
- 抽象類中的抽象方法的訪問類型可以是public霉囚,protected和(默認(rèn)類型,雖然
eclipse下不報錯捕仔,但應(yīng)該也不行),但接口中的抽象方法只能是public類型的,并且默認(rèn)即為public abstract類型榜跌。 - 抽象類中可以包含靜態(tài)方法闪唆,接口中不能包含靜態(tài)方法
- 抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意钓葫,但接口中定義的變量只能是public static final類型悄蕾,并且默認(rèn)即為public static final類型。
- 一個類可以實現(xiàn)多個接口础浮,但只能繼承一個抽象類
10.自動裝箱與拆箱
裝箱就是自動將基本數(shù)據(jù)類型轉(zhuǎn)換為包裝器類型帆调;拆箱就是自動將包裝器類型轉(zhuǎn)換為基本數(shù)據(jù)類型。
裝箱:用于在垃圾回收堆中儲存值類型豆同。裝箱是值類型到Object類型或到此類型所實現(xiàn)的任 何接口類型的隱式轉(zhuǎn)換番刊。
拆箱:從object類型到值類型或從接口類型到實現(xiàn)該接口的值類型的顯示轉(zhuǎn)換。
注釋:以上均為個人理解