計(jì)算機(jī)等級(jí)考試二級(jí)Java練習(xí)題及解析(6)

字號(hào):

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ù)庫(kù)概念設(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的語(yǔ)句是 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也是正確的。9 欲構(gòu)造ArrayList類的一個(gè)實(shí)例,此類實(shí)現(xiàn)了List接口,下列____B__方法是正確的。
    A、ArrayList myList=new Object( ); B、List myList=new ArrayList( );
    C、ArrayList myList=new List( ); D、List myList=new List( );
    解析:不能直接建立接口的實(shí)例,只能通過實(shí)現(xiàn)接口的相應(yīng)的類來實(shí)現(xiàn)接口。
    10 下列程序運(yùn)行的結(jié)果是__B____。
    public class Example{
     String str=new String("good");
     char[]ch={’a’,’b’,’c’};
    public static void main(String args[]){
     Example ex=new Example();
     ex.change(ex.str,ex.ch);
     System.out.print(ex.str+" and ");
     System.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
    A、good and abc B、good and gbc C、test ok and abc D、test ok and gbc
    11 Java語(yǔ)言中,原始數(shù)據(jù)類型變量是按值傳遞的,引用類型變量是按地址傳遞的。
    12 要從文件"file.dat"文件中讀出第10個(gè)字節(jié)到變量C中,下列__A____方法適合。
    A、FileInputStream in=new FileInputStream("file.dat"); in.skip(9); int c=in.read();
    B、FileInputStream in=new FileInputStream("file.dat"); in.skip(10); int c=in.read();
    C、FileInputStream in=new FileInputStream("file.dat"); int c=in.read();
    D、RandomAccessFile in=new RandomAccessFile("file.dat"); in.skip(9); int c=in.readByte();
    解析:Java提供FileInputStream是將文件作為流的方式讀取,它是按照文件的順序從0位置開始進(jìn)行讀取,RandomAccessFile是隨機(jī)讀取數(shù)據(jù),讀取的位置不一定是從0開始,可以使用skip(n)方法來跳過n個(gè)字符,通過readByte()讀取一個(gè)字符,通過read()可以讀取輸入流中的一個(gè)字符。
    13 下列代碼___C___會(huì)出錯(cuò)。
    1) public void modify() {
    2) int i,j,k;
    3) i=100;
    4) while (i>0) {
    5) j=i*2;
    6) System.out.println (" The value of j is " +j );
    7) k=k+1;
    8) i--;
    A、line 4 B、line 6 C、line 7 D、line 8
    解析:由于Java中聲明變量并沒有分配內(nèi)存空間,必須通過初始化才能使用變量。
    14 下面關(guān)于Applet的說法正確的是__B____。
    A、Applet也需要main方法 B、Applet繼承自java.awt.Applet或javax.swing.JApplet
    C、Applet能訪問本地文件 D、Applet程序不需要編譯
    解析:Java Applet的字節(jié)碼文件必須嵌入HTML的文件中并由負(fù)責(zé)解釋HTML文件的WWW瀏覽器充當(dāng)解釋器來解釋運(yùn)行。因此Applet不需要main方法,但必須繼承java.awt.Applet類或javax.swing.JApplet,因?yàn)檫@兩個(gè)類實(shí)現(xiàn)了Applet程序于瀏覽器的通訊。
    15 為了系統(tǒng)的安全,一般情況下Applet程序不能訪問本地文件,只有通過授權(quán)后才能讀寫。
    16 下列關(guān)于for循環(huán)和while循環(huán)的說法中___A___是正確的。
    A、while循環(huán)能實(shí)現(xiàn)的操作,for循環(huán)也都能實(shí)現(xiàn)
    B、while循環(huán)判斷條件一般是程序結(jié)果,for循環(huán)判斷條件一般是非程序結(jié)果
    C、兩種循環(huán)任何時(shí)候都可替換 D、兩種循環(huán)結(jié)構(gòu)中循環(huán)體都不可以為空
    解析:
    for循環(huán)的一般形式為:
     for(<初始化>; <條件表過式>; <增量>)
     語(yǔ)句;
     初始化總是一個(gè)賦值語(yǔ)句,它用來給循環(huán)控制變量賦初值;條件表達(dá)式是一個(gè)關(guān)系表達(dá)式,它決定什么時(shí)候退出循環(huán);增量定義循環(huán)控制變量每循環(huán)一次后按什么方式變化。這三個(gè)部分之間用";"分開。
     例如:
     for(i=1; i<=10; i++)
     語(yǔ)句;
     上例中先給i賦初值1,判斷i是否小于等于10,若是則執(zhí)行語(yǔ)句,之后值增加1。再重新判斷,直到條件為假,即i>10時(shí),結(jié)束循環(huán)。
     注意:
     1、for循環(huán)中語(yǔ)句可以為語(yǔ)句體,但要用"{"和"}"將參加循環(huán)的語(yǔ)句括起來。
     2、for循環(huán)中的"初始化"、"條件表達(dá)式"和"增量"都是選擇項(xiàng),即可以缺省,但";"不能缺省。省略了初始化,表示不對(duì)循環(huán)控制變量賦初值。省略了條件表達(dá)式,則不做其它處理時(shí)便成為死循環(huán)。省略了增量,則不對(duì)循環(huán)控制變量進(jìn)行操作,這時(shí)可在語(yǔ)句體中加入修改循環(huán)控制變量的語(yǔ)句。與for循環(huán)一樣,while循環(huán)總是在循環(huán)的頭部檢驗(yàn)條件,這就意味著循環(huán)可能什么也不執(zhí)行就退出。17 下列關(guān)于Java Application與Java Applet程序的差別描述正確的是 D 。
    A、運(yùn)行方式不同,程序結(jié)構(gòu)相同,運(yùn)行工具不同,受到的限制相同
    B、運(yùn)行方式相同,程序結(jié)構(gòu)不同,運(yùn)行工具不同,受到的限制相同
    C、運(yùn)行方式相同,程序結(jié)構(gòu)相同,運(yùn)行工具不同,受到的限制也不同
    D、運(yùn)行方式不同,程序結(jié)構(gòu)不同,運(yùn)行工具不同,受到的限制也不同
    解析:
    Application和Java Applet的區(qū)別。
    Java語(yǔ)言是一種半編譯半解釋的語(yǔ)言。Java的用戶程序分為兩類:Java Application和Java Applet。這兩類程序在組成結(jié)構(gòu)和執(zhí)行機(jī)制上都有一定的差異,主要體現(xiàn)在以下幾方面:
    (1)運(yùn)行方式不同。Java Application是完整的程序,可以獨(dú)立運(yùn)行;Java Applet程序不能單獨(dú)運(yùn)行,它必須嵌入到用HTML語(yǔ)言編寫的Web頁(yè)面中,通過與Java兼容的瀏覽器來控制執(zhí)行。
    (2)運(yùn)行工具不同。Java Application程序被編譯以后,用普通的Java解釋器就可以使其邊解釋邊執(zhí)行,而Java Applet必須通過網(wǎng)絡(luò)瀏覽器或者Applet觀察器才能執(zhí)行。
    (3)程序結(jié)構(gòu)不同。每個(gè)Java Application程序必定含有一個(gè)并且只有一個(gè)main方法,程序執(zhí)行時(shí),首先尋找main方法,并以此為入口點(diǎn)開始運(yùn)行。含有main方法的那個(gè)類,常被稱為主類,也就是說,Java Application程序都含有一個(gè)主類。而Applet程序則沒有含main方法的主類,這也正是Applet程序不能獨(dú)立運(yùn)行的原因。盡管Applet沒有含main方法的主類,但Applet一定有一個(gè)從java.applet.Applet派生的類,它是由Java系統(tǒng)提供的。
    (4)受到的限制不同。Java Application程序可以設(shè)計(jì)成能進(jìn)行各種操作的程序,包括讀/寫文件的操作,但是 Java Applet 對(duì)站點(diǎn)的磁盤文件既不能進(jìn)行讀操作,也不能進(jìn)行寫 操作。然而,由于Applet的引入,使Web頁(yè)面具有動(dòng)態(tài)多媒體效果和可交互性能,這使由名為超文本、實(shí)為純文本的HTML語(yǔ)言編寫成的Web頁(yè)面真正具有了超文本功能,不但可以顯示文本信息,而且還可以有各種圖片效果和動(dòng)態(tài)圖形效果,從而使頁(yè)面顯得生動(dòng)美麗;另外,Applet使Web頁(yè)面增加了按鈕等功能,從而增加了交互性。
     故本題答案為D。
    18 在java.applet、java.awt、java.awt.image包中,包含了許多圖象支持的類和方法。在程序中圖像由一個(gè)java.Image類的對(duì)象來表示。目前Java所支持的圖像格式有:GIF、JPEG、和PNG3種。其中PNG格式是JDK1.3以上版本支持的一種光柵圖像格式,它的顯示方法與其他兩格式相同。
    19 假設(shè)有String a="A";char b=’A’;int c=65,下面選項(xiàng)中__B____是正確的。
    A、if(a==b) {System.out.print("Equal")}
    B、if(c==b) {System.out.print("Equal")}
    C、if(a==c) {System.out.print("Equal")}
    D、if(c=b) {System.out.print("Equal")}
    解析:
    由于Java是強(qiáng)類型語(yǔ)言,String不能和char,int類型變量直接進(jìn)行對(duì)比。但如果char和int兩類型在同一個(gè)表達(dá)式中運(yùn)算,系統(tǒng)是可以進(jìn)行自動(dòng)類型轉(zhuǎn)換的,因此這兩個(gè)類型的變量可以比較。
    軟件工程的基本原則包括抽象、信息隱蔽、模塊化、局部化、確定性、一致性、完備性和可驗(yàn)證性。
     信息隱蔽是指采用封裝技術(shù),將程序模塊的實(shí)現(xiàn)細(xì)節(jié)隱藏起來,使模塊接口盡量簡(jiǎn)單。
    典型的數(shù)據(jù)流類型有兩種:變換型和事務(wù)型。
     變換型:是指信息沿輸入通路進(jìn)入系統(tǒng),同時(shí)由外部形式變換為內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。
    事務(wù)型:在很多軟件應(yīng)用中,存在某種作業(yè)數(shù)據(jù)流,它可以引發(fā)一個(gè)或多個(gè)處理,這些處理能夠完成該作業(yè)要求的功能,這種數(shù)據(jù)流就叫做事務(wù)。
    java.awt包是Java語(yǔ)言用來構(gòu)建圖形用戶界面(GUI)的類庫(kù),它包括了許多界面元素和資源,主要在低級(jí)繪圖操作、圖形界面組件和布局管理、以及界面用戶交互控制和事件響應(yīng)三個(gè)方面支持界面設(shè)計(jì)。