1 在進(jìn)行順序查找過程中,如果線性表中被查的元素是線性表中的最后一個(gè),或者被查元素根本不在線性表中,則為了查找這個(gè)元素需要與線性表中所有元素進(jìn)行比較,這是順序查找最壞的情況。
信息隱蔽是指在一個(gè)模塊內(nèi)包含的信息(過程或數(shù)據(jù)),對(duì)于不需要這些信息的其他模塊來說是不能訪問的。
2 模塊獨(dú)立性是指每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單。
衡量軟件的模塊獨(dú)立性的度量標(biāo)準(zhǔn)是耦合性和內(nèi)聚性。一個(gè)模塊的內(nèi)聚性越強(qiáng),則該模塊的模塊獨(dú)立性越強(qiáng)。而內(nèi)聚性是信息隱蔽和局部化概念的自然擴(kuò)展。
面向?qū)ο蟮脑O(shè)計(jì)方法與傳統(tǒng)的的面向過程的方法有本質(zhì)不同,它的基本原理是,使用現(xiàn)實(shí)世界的概念抽象地思考問題從而自然地解決問題。它強(qiáng)調(diào)模擬現(xiàn)實(shí)世界中的概念而不強(qiáng)調(diào)算法,它鼓勵(lì)開發(fā)者在軟件開發(fā)的絕大部分中都用應(yīng)用領(lǐng)域的概念去思考。
總體設(shè)計(jì)過程通常由兩個(gè)主要階段組成:系統(tǒng)設(shè)計(jì),確定系統(tǒng)的具體實(shí)現(xiàn)方案;結(jié)構(gòu)設(shè)計(jì),確定軟件結(jié)構(gòu)。為確定軟件結(jié)構(gòu),首先需要從實(shí)現(xiàn)角度把復(fù)雜的功能進(jìn)一步分解。分析員結(jié)合算法描述仔細(xì)分析數(shù)據(jù)流圖中的每個(gè)處理,如果一個(gè)處理的功能過分復(fù)雜,必須把它的功能適當(dāng)?shù)胤纸獬梢幌盗斜容^簡(jiǎn)單的功能。
3 數(shù)據(jù)庫概念設(shè)計(jì)的過程中,視圖設(shè)計(jì)一般有三種設(shè)計(jì)次序,它們是:
1、自頂向下。這種方法是先從抽象級(jí)別高且普遍性強(qiáng)的對(duì)象開始逐步細(xì)化、具體化與特殊化。
2、由底向上。這種設(shè)計(jì)方法是先從具體的對(duì)象開始,逐步抽象,普遍化與一般化,最后形成一個(gè)完整的視圖設(shè)計(jì)。
3、由內(nèi)向外。這種設(shè)計(jì)方法是先從最基本與最明顯的對(duì)象著手逐步擴(kuò)充至非基本、不明顯的其它對(duì)象。
4 在方法中定義的局部變量在方法退出時(shí)被自動(dòng)撤消,只有靜態(tài)變量不會(huì)被撤消。如果未對(duì)變量指定修釋符,在JAVA中將自動(dòng)將其設(shè)置為局部變量,局部變量也叫自動(dòng)變量,對(duì)于方法外面的變量,將在對(duì)象被創(chuàng)建時(shí)一起被創(chuàng)建,其初值可通過構(gòu)造函數(shù)對(duì)其進(jìn)行初始化。如果方法中是一個(gè)簡(jiǎn)單類型的形參,由于其是按值傳遞,在編譯時(shí)會(huì)占用存儲(chǔ)空間,直到該對(duì)象釋放時(shí)為止。如果形參為一個(gè)類類型,其參數(shù)是按地址傳遞,編譯時(shí)不會(huì)為其分配空間,因此該參變量不會(huì)存在于方法中。
5 類加載器(class loader)加載程序運(yùn)行所需要的所有類,它通過區(qū)分本機(jī)文件系統(tǒng)的類和網(wǎng)絡(luò)系統(tǒng)導(dǎo)入的類增加安全性,這可以限制任何的特洛伊木馬程序,因?yàn)楸緳C(jī)類總是先被加載,一旦所有的類被加載完,執(zhí)行文件的內(nèi)存劃分就固定了,在這個(gè)時(shí)候特定的內(nèi)存地址被分配給對(duì)應(yīng)的符號(hào)引用,查找表(lookup table)也被建立,由于內(nèi)存劃分發(fā)生在運(yùn)行時(shí),解釋器在受限制的代碼區(qū)增加保護(hù)防止未授權(quán)的訪問;然后字節(jié)碼校驗(yàn)器(byte code verifier)進(jìn)行校驗(yàn),主要執(zhí)行下面的檢查:類符合JVM規(guī)范的類文件格式,沒有違反訪問限制,代碼沒有造成堆棧的上溢或者下溢,所有操作代碼的參數(shù)類型都是正確的,沒有非法的數(shù)據(jù)類型轉(zhuǎn)換(例如將整型數(shù)轉(zhuǎn)換成對(duì)象類型)發(fā)生;校驗(yàn)通過的字節(jié)碼被解釋器(interpreter)執(zhí)行,解釋器在必要時(shí)通過運(yùn)行時(shí)系統(tǒng)執(zhí)行對(duì)底層硬件的合適調(diào)用。
7 public class Parent {
public int addValue( int a, int b) {
int s;
s = a+b;
return s;
}
}
class Child extends Parent {
}
選項(xiàng)中__B____方法可以正確加入類Child中且父類的方法不會(huì)被覆蓋。
A、int addValue( int a, int b ){// do something...}
B、public void addValue (){// do something...}
C、public int addValue( int a, int b )throws MyException {//do something...}
D、public float addValue ( int a ,int b, float b=1.0 ){// do something...}
解析:此題涉及方法重載(overload),方法重寫(override)以及類派生時(shí)方法重寫的規(guī)則。方法重載的規(guī)則是:
一、參數(shù)列表必須不同,個(gè)數(shù)的不同完全可以,如果個(gè)數(shù)相同,則參數(shù)類型的不同不會(huì)引起歧意,例如int和long,float和double就不能作為唯一的類型不同;
二、返回值可以不同,但是不能是重載時(shí)唯一的不同點(diǎn)(這點(diǎn)和c++中不同,c++中返回類型必須一致)。
方法重寫發(fā)生在類繼承時(shí),子類可以重寫一個(gè)父類中已有的方法,必須在返回類型和參數(shù)列表一樣時(shí)才能說是重寫,否則就是重載,java中方法重寫的一個(gè)重要而且容易被忽略的規(guī)則是重寫的方法的訪問權(quán)限不能比被重寫的方法的訪問權(quán)限低!
重寫的另一個(gè)規(guī)則是重寫的方法不能比被重寫的方法拋棄(throws)更多種類的異常,其拋棄的異常只能少,或者是其子類,不能以拋棄異常的個(gè)數(shù)來判斷種類,而應(yīng)該是異常類層次結(jié)果上的種類。
此題中選取項(xiàng)A的錯(cuò)誤就是重寫的訪問權(quán)限比被重寫的方法的低,而B屬于重載,選項(xiàng)C的錯(cuò)誤在于比被重寫的方法拋棄了更多種類的異常。選項(xiàng)D中,當(dāng)只傳遞兩個(gè)變量的值的時(shí)候,那系統(tǒng)就不知道倒底調(diào)用哪個(gè)方法了,因?yàn)閎為常量,可以不指定,所以只有選項(xiàng)B是符合題意的。
8 假設(shè)有以下代碼
String s= "hello";
String t = "hello";
char c[] = {’h’,’e’,’l’,’l’,’o’} ;
下列選項(xiàng)中返回false的語句是 B 。
A、s.equals(t); B、t.equals(c); C、s==t; D、t.equals(new String("hello"));
解析:==操作符比較的是操作符兩端的操作數(shù)是否是同一個(gè)對(duì)象,而String的equals()方法比較的是兩個(gè)String對(duì)象的內(nèi)容是否一樣,其參數(shù)是一個(gè)String對(duì)象時(shí)才有可能返回true,其它對(duì)象都返回假。需要指出的是由于s和t并非使用new創(chuàng)建的,他們指向內(nèi)存池中的同一個(gè)字符串常量,因此其地址實(shí)際上是相同的(這個(gè)可以從反編譯一個(gè)簡(jiǎn)單的測(cè)試程序的結(jié)果得到,限于篇幅不列出測(cè)試代碼和反編譯的分析),因此答案C也是正確的。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |