Java語言程序設(shè)計 習(xí)題解答(張思民) 第1-10章_第1頁
Java語言程序設(shè)計 習(xí)題解答(張思民) 第1-10章_第2頁
Java語言程序設(shè)計 習(xí)題解答(張思民) 第1-10章_第3頁
Java語言程序設(shè)計 習(xí)題解答(張思民) 第1-10章_第4頁
Java語言程序設(shè)計 習(xí)題解答(張思民) 第1-10章_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Java語言程序設(shè)計習(xí)題解答(張思民)

第1章Java概述

【I】為H么說Java的運行與“算機硬件平臺無關(guān)?

[解答]:Java編譯器能夠產(chǎn)生一種與計算機體系結(jié)構(gòu)無關(guān)的字節(jié)指令(ByteCode),只要安裝

了Java虛擬機,Java就可以在相應(yīng)的處理機上執(zhí)行。利用Java虛擬機就可以把Java字節(jié)碼

程序跟具體的操作系統(tǒng)以及硬件平臺分隔開來。

[2]Java有什么特點?

[解答]:Java的特點有:

(1)簡單性;

(2)面向?qū)ο螅?/p>

(3)跨平臺性;

(4)健壯性;

(5)安全性;

(6)可移植性;

(7)多線程性;

(8)動態(tài)性。

[3]試述Java開發(fā)環(huán)境的建立過程。

[解答]:Java開發(fā)環(huán)境的建立過程如下:

I.JDK的下載與安裝:從hHD:〃java.sun.coin卜載最新版的JDK,單擊下載后的文件卻出現(xiàn)

安裝界面;在此界面中打擊“next”按鈕即可;

2.JDK的配置:安裝好JDK后,設(shè)安裝路徑為c:\jdk1.5;還需要在環(huán)境變豉中進行對應(yīng)的配

置。下面以Windows操作系統(tǒng)為例來進行配置。

1)設(shè)置JAVA_HOME環(huán)境變量:在桌面上用鼠標(biāo)右鍵單擊“我的電腦”,依次選擇“屬性”、

“高級”、“環(huán)境變量”選項,新建一個系統(tǒng)變量,名稱為JAVA_HOME,值為c:\jdk1.5;

2)設(shè)置CLASSPATH環(huán)境變量,設(shè)置方法和JAVAJ4OME一樣,其值為

c:\jdkl.5\lib\tools.jar;.:

3)更新PATH環(huán)境變量的值,編輯PATH系統(tǒng)變量,在最后添加c:\jdkl.5\bin;.。

[4]什么是JavaAPI?它提供的核心包的主要功能是什么?

[解答]:JavaAPI就是Java所提供的標(biāo)準(zhǔn)類庫,它把程序設(shè)計所需要的常用的方法和接口分

類封裝成包。在JavaAPI中主要包括核心java包、javax擴展包和org擴展包等。核心java

包中封裝了程序設(shè)計所需要的主要應(yīng)用類。

[5]如何編寫和運行Java應(yīng)用程序?

[解答]:Java應(yīng)用程序的編寫和運行過程:

1.建立Java源文件:首先創(chuàng)建Java的源代碼,即建立一個文本文檔,包括有符合Java規(guī)范

的語句。

2.編譯源文件:“編譯”就是將一個源代碼文件翻譯成計算機可以理解和處理的格式的過程。

Java源程序編譯后會生成一個字節(jié)碼文件,即帶擴展名class的文件。Java字節(jié)碼文件中包含

的使Java解釋程序?qū)⒁獔?zhí)行的指令碼。

3.執(zhí)行字節(jié)碼文件:通過Java虛擬機運行字節(jié)碼文件。

[6]為什么要為程序添加注釋,在Java程序中如何為程序添加注釋?

[解答]:注釋是程序中的說明性文字,是程序的非執(zhí)行部分。它的作用是為程序添加說明,增

加程序的可讀性。

Java使用以下二種方式對程序進行注釋:

1."http://”符號,它表示從“〃”符號開始到此行的末尾位置都作為注釋。

2.,,/*...刃”符號,它表示從“/*”開始到“*/”結(jié)束的部分都作為注釋部分,可以使多行

注釋。

【7】Java工具集中的javac、java各有什么作用?

[解答]:javac的作用:它是Java編譯器,用于將Java源程序編譯成字節(jié)碼文件;

java的作用:它是Java解釋器,用于解釋執(zhí)行Java字節(jié)碼文件;

第2章Java基礎(chǔ)

[1]什么是數(shù)據(jù)類型?為什么要將數(shù)據(jù)劃分為不同的數(shù)據(jù)類型?

[解答]:Java是一門強類型語言。數(shù)據(jù)類型是用來區(qū)分不同的數(shù)據(jù);由于數(shù)據(jù)在存儲時所需要

的容量各不相同,不同的數(shù)據(jù)就必須要分配不同大小的內(nèi)存空間來存儲,所有就要將數(shù)據(jù)劃

分成不同的數(shù)據(jù)類型。

[2]Java中有哪些數(shù)據(jù)類型?

[解答]:Java中有8種基本數(shù)據(jù)類型:字節(jié)型(byte),短整型(short),整型(int),長整型(long),

字符型(char),單精度型(float),雙精度型(double),布爾型(boolean)。

[3]聲明變量的作用是什么?

[解答]:變量時一個數(shù)據(jù)存儲空間的表示,將數(shù)據(jù)指定給變量,就是將數(shù)據(jù)存儲至對應(yīng)的內(nèi)存

空間,調(diào)用變量,就是將對應(yīng)的內(nèi)存空間的數(shù)據(jù)取出來使用。聲明變量就是申請一個內(nèi)存空

間。

[4]若x=4,y=2,計算z值:

z1

vfz=x&y

2

z\

\(7z=x|y

(z3\.

x/!z二x|y

4!\

/z=x?y

5)z=~x

(6)7=x?y

(7)z=x?>y

[解答]:

publicclassTest_4{

publicstaticvoidmain(String[Jargs){

intx=4,y=2,z;〃初始化x,y,z

z=x&y;〃求z=x&y;即x與y的值

System.ou(.println("4_I:"+z);

z=x|y;〃求z=xy;即x或y的值

System.ou(.println("4_2:"+z);

z=xAy;〃求z=xAy;即x異或y的值

Systcm.out.println("4_3:"+z);

z=x?y;〃求z=x?y;即x右移y位的值

System.out.println("4_4:"+z);

Z=~X;〃求Z=~X;即X位反的值

System.out.println("4_5:"+z);

z=x?y;〃求z=x?y;即x左移y位的值

System.out.println("4_6:M+z);

z=x?>y;〃求z=x?>y;BPx無符號右移y位的值

System.out.println("4_7:"+z);

【5】假設(shè)x=10,y=20,z=30?求下列布爾表達(dá)式的值:

(1)x<10||x<10

(2)x>y&&y>x

(3)(x<y+z)&&(x+10<=20)

(4)z-y==x&&(y-z)==x

(5)x<10&&y>x

(6)x>y||y>x

(7)!(x<y+z)||!(x+IO<=2O)

(8)(!(x==y))&&(x!=y)&&(x<y||y<x)

[解答]:

publicclassTest_5{

publicstaticvoidmain(String[]args){

intx=10,y=20,z=30;

booleanflag;

〃求xvlO||xvlO右爾值

flag=x<10||x<10;

Systcm.out.println("5_l:"+flag);

〃求x>y&&y<x布爾值

flag=x>y&&y<x;

System.ou(.println("5_2:"+nag);

//求(x〈y+z)&&(x+10<=20)布爾值

flag=(x<y+z)&&(x+10<=20);

System.out.println("5_3:"+flag);

〃求z-y==x&&(y-z)==x布爾值

flag=z-y==x&&(y-z)==x;

Systcm.out.println("5_4:H+flag);

〃求x〈10&&x>10布爾值

flag=x<10&&x>10;

Sysiem.oul.println("5_5:"+flag);

〃求x>y||y>x布爾值

flag=x>y||y>x;

System.out.println("5_6:"+flag);

〃求!(x<y+z)||!(x+10<=20)布爾值

flag=!(x<y+z)||!(x+10<=20);

System.out.println("5_7:M+flag);

〃求(!(x==y))&&(x!=y)&&(x〈y||y〈x)布爾值

flag=(!(x==y))&&(x!=y)&&(x<y||y<x);

System.out.println("5_8:"+flag);

1

[6]什么是表達(dá)式?什么是語句?

[解答]:表達(dá)式是由運算符,操作數(shù)和方法調(diào)用按照語言的語法構(gòu)造而成的符號序列。表達(dá)式

可用于計算一個格式,位變量賦值以及幫助控制程序執(zhí)行流程。

語句:語句組成了一個執(zhí)行程序的基本單元,類似于自然語言的句子。包括表達(dá)式語句、復(fù)

合語句、控制語句等。

[7]Java有哪些數(shù)據(jù)類型?請描述其分類情況。

[解答]:Java定義了8個基本數(shù)據(jù)類型:字節(jié)型,短整型,整型,長整型,字符型,浮點型,

雙精度型,布爾型。它們分為4組:

1)整數(shù)型(byte,short,int,long)

2)浮點數(shù)型(float,double)

3)字符型(char)

4)布爾型(boolean)

[9]試比較break和conlinue語句的區(qū)別?

[解答]:Break:強行退出循環(huán),忽略循環(huán)體中的任何其池語句和循環(huán)的條件的條件測試。

Continue:語句用來終止本次循環(huán)。其功能是終止當(dāng)前正在進行的本輪循環(huán),即跳過后面剩余

的語句,轉(zhuǎn)而執(zhí)行循環(huán)的第一條語句,計算和判斷循環(huán)條件,決定是否進入下一輪循環(huán)。

【10】有一函數(shù):

rx(x<i)

y=<3x-2(l<x<10)

4x(x210)

編寫一程序,給定x值,輸出y值。

[解答]:

importjava.io.*;

publicclassTcst_9{

publicstaticvoidmain(String[]args)throwsNumberFonnatExceplionJOException{

InputStreamReaderisr=newInputStreamReader(System.in);

BufferedReaderbr=newBufferedReader(isr);

System.out.printin("請輸入數(shù)字x的值:");

doublex=Double.parseDouble(br.readLine());

doubley=0;

if(x<1){

y=x;

}else{

if(x>=1&&x<10){

y=3*x-2;

}else{

y=4*x;

}

)

System.out.println("y="+y);

}

【11】說明while和dowhile語句的差異。

[解答]:Do-while與while語句的主要區(qū)別在于,先執(zhí)行循環(huán)體中的語句再計算條件表達(dá)式,

所以do-while語句的循環(huán)體至少執(zhí)行一次。

[12]寫出下列語句執(zhí)行后的結(jié)果:

for(k=l;k<=5:k++)

{

if(k>4)break;

Systeni.out.println("k="+k);

)

[解答]:

publicclassTest_l1{

publicstaticvoidmain(String[]args){

intk;

for(k=1;k<=5:k++){

if(k>4)

break;

Systcm.out.println("k="+k);

10

[13]編寫程序,求工公的值。

Jt=l

[解答]:

publicclassTesl_12{

publicstaticvoidmain(String[]args){

inik,sum=0;

for(k=l;k<=10;k++){

sum=sum+k*k;

)

SystcnLout.println(,,sum=,,+sum);

)

1

【14】編寫一程序,輸入3個數(shù),能按大小順序輸出。

[解答]:

importjava.io.BufferedReader;

importjava.io.IOExccption:

importjava.io.InputStreamReader;

publicclassTest_13{

publicstaticvoidmain(Slring[]args)throwsNumberFormatExceplionJOException{

InputStreamReaderisr=newInputStreamReader(System.in);

BufferedReaderbr=newBufteredReader(isr);

inta[]=newinl[3];

intk,temp;

Syslem.out.prinllM"請輸入3個數(shù)字(每輸入一個數(shù)字后請換行廠);

for(inti=0;i<3;i++){

a[i]=In(eger.parseInt(br.readLine());

)

for(inti=0;i<a.length;i++){

k=i;

for(intj=k+1;j<a.lcngth;j++){

if(a[j]<a[k]){

k=j;

1

}

if(k!=i){

temp=a[i];

a[i]=a(kj;

a[k]=temp;

)

I

System.out.println("從小到大排序:”);

for(inti=0;i<a.length;i++){

System.out.print(a[i]+"");

)

)

)

[15]編寫一各Java程序,查找1?100之間的素數(shù)并將運行結(jié)果輸出。

[解答]:

publicclassTest_14{

publicstaticvoidmain(String[]args){

intm,k,i,n=0;

booleanflag;

for(m=I;m<=100;m=m+2){

flag=true;

k=(inl)Math.sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0){

flag=false;

break;

)

if(flag){

System.out.prinl(m+"

n=n+1;

)

if(n%10==0)

Sy>tem.out.println();

【16】運行下面程序,并分析其執(zhí)行過程:

Publicclassmultiplication(

publicstaticvoidmain(Stringargs[j){

intij;

for(i=l;i<10;i++){

for(i=l;i<10;i++){

System.out.print(i+”*”+j+”=”+i"j+””);

System.out.println();

}

)

【解答]:

publicclassTest_15{

publicstaticvoidmain(String[]args){

inti,j;

for(i=l;i<10;i++){

for(j=l;j<=i;j++){

Systcm.out.print(i+"*u+j+”="+i*j+“”);

)

System.out.printlnO;

)

}

I

/*

結(jié)果:

1*1=1

2*1=22*2=4

3*1=33*2=63*3=9

4*1=44*2=84*3=124*4=16

5*1=55*2=105*3=155*4=205*5=25

6*1=66*2=126*3=186*4=246*5=306*6=36

7*1=77*2=147*3=217*4=287*5=357*6=427*7=49

8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64

9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

乘法表

*/

[17]編寫打印下列圖形的程序:

(1)(2)(3)

#*******$

##木****$$$

###***》①》。C1

####*$$$

$

[解答]:

publicclassTest_17_l{

publicstaticvoidmain(String[largs){

inti,j;

for(i=l;i<=4;i++){

for。=l;j<=i;j++){

Syslem.out.print("#"+11");

Systcin.out.println();

publicclassTest_17_2{

publicstaticvoidmain(String[largs){

inti,j,k;

for(i=0;i<4;i++){

for(k=0;k<i;k++){

System.out.print("");

}

for(j=0;j<=6-2*i;j++)

System.out.print("*");

Systein.out.println();

)

)

}

publicclassTest_17_3{

publicstaticvoidmain(String[]args){

inti=0,blank,j,star,input=5;//input是輸入的行數(shù)

Strings="";

fbr(i=0;i<input;i++)

{

blank=Math.absii-input/2);

for(j=1;j<=blank;j++)

s+="";

star=input-2*blank;

fbr(j=1;j<=star;j++)

s+="$";

s+="\nH;

)

System.ou(.print(s);

第3章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)

[1]什么是Java程序使用的類?什么是類庫?

[解答]:Java程序的基本單位是類。對象是對事物的抽象,而類是對對象的抽象和歸納,找出

事物的共性,把具有共同性質(zhì)的事物歸結(jié)為一類,得出一個抽象的概念——類。類是具有相同屬

性和方法的一組對象的集合,類是在對象之上的抽象,對象則是類的具體化,一旦建立類之

后,就可用它來建立許多你需要的對象。

Java的類庫是系統(tǒng)提供的已實現(xiàn)的標(biāo)準(zhǔn)類的集合,是Java編程的AP!(ApplicationPiogram

Interface),它可以幫助開發(fā)者方便、快捷地開發(fā)Java程序。

[2]如何定義方法?在面向?qū)ο蟪绦蛟O(shè)計中方法有什么作用?

[解答]:方法的定義由兩部分組成:方法聲明和方法體。方法聲明的基本格式如下:

返回類型方法名(形式參數(shù))

(

…〃方法體內(nèi)容

)

方法聲明包括方法名、返回類型和形式參數(shù),方法的小括號是方法的標(biāo)志;方法體為實

現(xiàn)方法行為的Java語句。

在面向?qū)ο蟪绦蛟O(shè)計中,方法所起的作用是完成對類和對象屬性操作。

【3】簡述構(gòu)造方法的功能和特點。下面的程序片段是某學(xué)生為student類編寫的構(gòu)造方法,

請指出其中的錯誤。

voidStudcnt(intno.Stringname)

studentNo=no;

studentName=name;

returnno;

[解答]:構(gòu)造方法是一個特殊的方法,主要用于初始化新創(chuàng)建的對象。構(gòu)造方法的方法名要求

與類名相同,用戶不能直接調(diào)用,只能通過new運算符調(diào)用,而且構(gòu)造方法是不返回任何數(shù)

據(jù)類型,甚至也不返回void數(shù)據(jù)類型,即不能在構(gòu)造方法前加void。

以上的代碼段出錯于:①構(gòu)造方法5ludenl()前不能加void②不能用return語句

[4]定義一個表示學(xué)生的student類,包括的域有學(xué)號、姓名、性別、年齡,包括的方法有

獲得學(xué)號、姓名、性別、年齡及修改年齡。編寫Java程序創(chuàng)建student類的對象及測試其方法

的功能。

[解答]:程序代碼段如下:

classstudent{

privateStringid;

privateStringname;

privateStringsex;

privateintage;

publicStringgetld()

{returnid;}

publicStringgctName()

{returnname;}

publicStringgetSex()

{returnsex;}

publicintgetAge()

{returnage;}

voidsetAge(intage)

{this.agc=age;}

)

publicclassTestStudent

{publicstaticvoidmain(Stringargs[])

{studentstu=newstudent("0401398”,"楊小明"男",20);

System.out.println("studentinfo:"+"\n學(xué)號:"+stu.getld()4-"\n姓名"+

stu.getName()4-"\n性別:"+stu.getSex()+"\n年齡:"+stu.getAge());

stu.setAge(19);

System.out.println("修改后的年齡為:"+stu.getAge());

)

}

【5】擴充、修改程序。為第4題的sludenl類定義構(gòu)造函數(shù)初始化所有的域,增加一個方法

publicStringprintlnfo()把student類對象的所有域信息組合形成一個字符串,并在主類中創(chuàng)建

學(xué)生對象及測試各方法的功能。

[解答]:程序代碼段如下:

classstudent{

privateStringid;

privateStringname;

privateStringsex;

privateintage;

student(Stringid,Stringname,Stringsex,intage)

{this.id=id;

=name;

this.sex=sex;

this.age=age;

)

publicStringgetld()

{returnid;}

publicStringgetNamc()

{returnname;}

publicStringgetSex()

{returnsex;}

publicintgetAge()

{returnage;}

voidse(Age(intage)

{this.age=age;}

publicStringprin(Info()

{Strings="studentinfo:"+"\n學(xué)號:"+id+"\n姓名"+name+"\n性別:"+sex+"\n年齡"

+age;

System.out.println(s);

returns;

}

}

publicclassTestStudent

{publicstaticvoidniain(Stringargs[])

{studentstu=newstudent("0401398”,"楊小明","男",20);

stu.printlnfo();

stu.setAge(19);

stu.printlnfo();

)

}

(61什么是修飾符?修飾符的種類有哪些?它們各有什么作用?

[解答]:修飾符是用于限定類對象使用的權(quán)限,從而實現(xiàn)類中成員的信息隱藏。訪問修飾符適

用于類成員,而不是方法內(nèi)部的局部變量。Java常見II勺訪問修飾符有這4種:private、

default、protected和publico

(1)public可以被所有的類訪問

(2)pravite只能被類本身訪問,其他類無法訪問

(3)protected可以被類本身、它的子類(包括同一個包中以及不同包中的子類)

(4)default屬于默認(rèn)的訪問狀態(tài),可以被類本身和同一個包中的類訪問

[7]什么是抽象類?為什么要引入抽象類的概念?

[解答]:抽象類是用來描述人們在對問題領(lǐng)域進行分析、設(shè)計中得出的抽象概念,是對一系列

看上去不同,但是本質(zhì)上相同的具體概念的抽象。抽象類不具備實際功能,是專門設(shè)計用來

讓子類繼承的類,把這些具有共同特征的方法抽象出來,由子類負(fù)責(zé)這些抽象方法的實現(xiàn)細(xì)

節(jié),而父類僅提供此方法的名稱和聲明、沒有方法的主體,該類。

[8]什么是抽象方法?如何定義、使用抽象方法?

[解答]:用abstract關(guān)鍵字修飾的方法稱為抽象方法。抽象方法定義時,需在方法名前加上關(guān)

鍵字abstract,抽象方法只有方法聲明,沒有代碼實現(xiàn)的空方法。因此,必須通過其子類來重

寫父類中定義的每一個抽象方法。

【9】包的作用是什么?如何在程序中引入一定義的類?使用己定義的用戶類、系統(tǒng)類有哪些

主要方式?

[解答]:包的作用是將類和接口封裝在一起,方便了類和接口的管理和調(diào)用,要引入包中已定

義的類,必須用關(guān)鍵字import來導(dǎo)入這些類所在的包。import語句的一般形式如下:

import包名.類名

其中類名可以用通配符代替。

使用己定義的用戶類、系統(tǒng)類主要有三種方式:直接調(diào)用、繼承和創(chuàng)建已定義的用戶類、

系統(tǒng)類的對象。但無論采用哪種方式,使用已定義的用戶類、系統(tǒng)類的前提條件是用戶類、

系統(tǒng)類應(yīng)該是用戶程序可見的類,為此用戶程序需要用import語句引人它所用到的用戶類、

系統(tǒng)類或用戶類、系統(tǒng)類所在的包。

[10]什么是繼承?如何定義繼承關(guān)系?

[解答]:同類事物具有共同性,在同類事物中,每個事物又具有其特殊性。運用抽象的原則舍

棄對象的特殊性,抽取其共同性,則得到一個適應(yīng)于一批對象的類,這便是基類(父類),而

把具有特殊性的類稱為派生類(子類),派生類的對象擁有其基類的全部或部分屬性與方法,

稱作派生類對基類的繼承,

派生類繼承基類,必須使用關(guān)鍵字extends來聲明.比如派生類B繼承基類A,派生類

B定義的一般形式如下:

classBextendsA

[11]什么是多態(tài),如何實現(xiàn)多態(tài)?

[解答]:多態(tài)是指一個程序中同名的不同方法共存的情況。這些方法同名的原因是它們的最終

功能和目的都相同,但是由于在完成同一功能時,可能遇到不同的具體情況,所以需要定義

含不同的具體內(nèi)容的方法,來代表多種具體實現(xiàn)形式。多態(tài)通常是一個消息在不同的類中用

不同的方法實現(xiàn)的。

多態(tài)的實現(xiàn)是由消息的接收者確定一個消息應(yīng)如何解釋,而不是由消息的發(fā)送者確定,

消息的發(fā)送者只需要指導(dǎo)另外的實例可以執(zhí)行一種特定操作即可。Java中提供兩種多態(tài)機制:

方法重載與方法重寫。

[12]解釋this和super的意義和作用。

[解答]:this指的是引用當(dāng)前對象或類名稱,當(dāng)一個類的實例變量名與一個方法中參數(shù)名相

同時,則參數(shù)就隱藏了實例變量名,此時可通過使用關(guān)鍵字this來訪問它;super用來引用當(dāng)

前對象的父類,通過super來訪問父類被子類隱藏的成員變量、成員方法以及父類的構(gòu)造方法。

由于子類不繼承父類的構(gòu)造方法,可使用super來調(diào)用父類的構(gòu)造方法,并且super必須是子

類構(gòu)造方法中的第一條語句。

[13]什么是接口?為什么要定義接口?接口和類有什么異同?

[解答]:接口是用來調(diào)節(jié)各類之間的相互關(guān)系的一種結(jié)構(gòu),接口是抽象類的一種,只包含常量

和方法的定義,而沒有變量和具體方法的實現(xiàn),且其方法都是抽象方法。

接口定義的格式如下:

[public]interface接口名[extends父接口名列表]{

...//接口體

}

extends子句有類聲明的exlends子句基本相同,不同的是一個接口可有多個父接口,用逗

號隔開,而一個類只能有一個父類。Java中的類只能實現(xiàn)單重繼承,這雖然可以簡化編程,

但畢竟沒有完全實現(xiàn)面向?qū)ο蟮墓δ?。定義接口的主要作用,就是幫助Java實現(xiàn)類間多重繼

承的結(jié)構(gòu)。而且接口還有以下好處:

?接口可以被多個類所實現(xiàn),這些類可以不相關(guān),從而具有相同的行為。

?通過接口可以了解對象的行為,而無需了解對象所對應(yīng)的類的結(jié)構(gòu)。

【14】將一個抽象類改寫成接口,并實現(xiàn)這個接口。

[解答]:程序代碼段如下:

〃抽象類的應(yīng)用示例

abstractclass動物

{publicabstractvoidcryO;}

class狗extends動物

{publicvoidcry()

{System.oui.prinlln("汪汪.....");}

}

classTest

{publicstaticvoidmain(Stringargs[])

{動物dongwu;

dongwu=new狗0;

dongwu.cryO;

)

|

〃將抽象類改寫成接口,并實現(xiàn)這個接口

interface動物

{publicvoidcry();}

class狗implements動物

{publicvoidcry()

{Systcm.out.println("江江..…");)

}

classTest

{publicstaticvoidmain(Stringargs[])

{動物dongwu;

dongwu=new狗();

dongwu.cry();

}

)

[15]編寫一個程序?qū)崿F(xiàn)包的功能。

[解答]:包的功能實現(xiàn)包括兩步驟:打包、引用包,其具體實現(xiàn)如下:

⑴〃設(shè)當(dāng)前運行目錄的子FI錄test'bag下有MyBag.class類,其源程序如下:

packagetest.bag;

publicclassMyBag

(

publicvoidprint()

{System.out.println("包的功能測試)}

)

(2)//在當(dāng)前目錄的TestBag.java中,要使用子目錄test'bag下有MyBag.class類中的print()

〃方法,其源程序如下:

importtesl.bag.MyBag;

publicclassTestBag

{publicstaticvoidmain(Slringargs[])

{MyBagmb二newMyBagO;

mb.printO;

[16]填空:

(1)如果類A繼承了類B,則類A被稱為類,類B被稱為類。

[解答]:子父

(2)繼承使成為可能,它節(jié)省了開發(fā)時間。

[解答1:代碼更用

(3)如果一個類包含一個或多個abstract方法,它就是一個類。

[解答]:抽象

(4)一個子類一般比其超類封裝的功能要。

[解答]:強

(5)標(biāo)記成的類的成員不能由該類的方法訪問。

[解答]:static

(6)Java用關(guān)鍵字指明繼承關(guān)系。

[解答]:extends

⑺this代表了的引用。

[解答]:當(dāng)前對象

(8)super表示的是當(dāng)前對象的對象。

[解答]:父類

(9)抽象類的修飾符是o

[解答]:abstract

(10)接口中定義的數(shù)據(jù)成員是。

[解答]:常量

(II)接口中沒有什么方法,所有成員方法都是方法。

[解答]:實例空

[17]

第4章數(shù)組與字符串

[1]考慮一個2X3的數(shù)組a。

(1)為a寫一個設(shè)聲明。試問,這樣的聲明使a有多少行,多少列,多少元素?

(2)寫出a的第1行的所有元素的名字。

(3)寫一條語句,置行1列2的元素為零。

(4)寫一個嵌套for結(jié)構(gòu),將a的每個元素初始化為零。

(5)定一條語句,求第3列元素的和。

[解答]:

(1)數(shù)組a有2行,3歹I」,元素個數(shù)為6

⑵第一行元素的名字為a[0][0],a[0][l],a[0][2]

⑶置行1列2的元素為0,語句是a[0][l]=0;

(4)

for(inti=0;i<2;i++){

for(inj=0;j<3y++){

a[i]U]=0;

}

I

(5)

intsum=0;

sum=ar0][2]+a[ll[2];

[2]求3X3矩形對角元素之和。

[解答]:

publicclassTest_2{

publicstaticvoidmain(String[jargs){

inti,j,sum=0;

intal][]=new

for(i=0;i<3;i++){

for(j=0;j<3;j++){

a[i][j]=i+j;

}

)

〃輸出二維數(shù)組

for(i=0;i<3;i++){

for(j=0;j<3;j++){

System.out.print(a[i][j]+**");

}

System.out.printlnO;

)

〃顯示對角線之和

for(i=0;i<3;i++){

sum=sum+a[i][i];

System.oul.prinUn("對角線之和:"+sum);

[3]編寫一程序,查找某一字符串是否包含有“abc”。

[解答]:

publicclassTest_3{

publicstaticvoidmain(String[]args){

Strings="yangenabc";

inta=s.indexOf("abc");

//a位找到abc的下標(biāo),找不到則返回-I

if(a!=-l){

Systcm.out.print("包含字符串a(chǎn)bc");

}else{

System.out.print("不包含字符串a(chǎn)bc");

)

)

)

【4】設(shè)一字符串中包含有大寫字母的字符,也有下寫字母的字符,編寫一程序,將其中的大

小寫字母的字符分別輸出。

[解答]:

publicclassTest_4!

publicstaticvoidmain(String[]args){

Strings="sdfKJjKjjsjdfKKJkjkjSDFsdf;

Stringsi="",s2=',,,,s3;

for(inti=O;i<s.length();i++){

s3="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

if(s3.indexOf(s.charAt(i))!=-l){

sl=sl+s.charA((i);

}else{

s2=s2+s.charA((i);

)

}

System.out.println("大寫字母:");

Systcm.out.println(s1);

System.out.println("小寫字母:");

System.out.println(s2);

)

)

【5】輸出一字符串,統(tǒng)計其中有多少個單詞。(單詞之間用空格分隔)。

[解答]:

importjava.util.*;

publicclassTest_22{

publicstaticvoidmain(String[]args){

inti=0;

Strings="Helloworldilovejava";

StringTokcnizcrst=newStringTokcnizcr(s,n");

while(s(.hasMoreTokensO){

i++;

System.out.println(st.nextToken());

)

System.out.print(■單詞個數(shù):"+i);

)

[6]String與StringBuffer類的主要區(qū)別是什么?

[解答]:String對象一旦實例化之后,就不能改變其值。而StringBuffer對象可以實現(xiàn)對字符

串中某個字符的插入、修改、刪除及替換操作。

第5章圖形用戶界面設(shè)計

[1]什么是圖形用戶界面?試列舉出圖形用戶界面中你使用過的組件。

[解答]:圖形用戶界面或圖形用戶接口(GraphicalUserInterface,GUI)是指采用圖形方式顯示

的計算機操作環(huán)境用戶接口。與早期計算機使用的命令行界面相比,圖形界面對于用戶來說

更為簡便易用。(比如你用windowsXP和使用DOS操作系統(tǒng)的差別)。GUI是事件驅(qū)動的,

也就是說,一旦用戶與GUI交互,GUI組件就會生成”事件“(動作)。常見交互包括移徹鼠標(biāo)、

單擊鼠標(biāo)按鈕、在文字段輸入、從菜單選擇一個選項以及關(guān)閉一個窗口等等。

在windwosXP的GU[中,使用過窗口,菜單條,按鈕等

(2]創(chuàng)建一個窗體,窗體中有一個按鈕,當(dāng)單擊按鈕后,就會彈出一個新窗體。

[解答]:Test5_2.java

importjava.awt.*;

importjava.awt.event.*;

publicclassTcst5_2extendsFrameimplementsActionLislcncrf

Buttonbtn;

publicTes(5_2(){

super("彈出窗口練習(xí))

sctSize(3OO,2OO);

setVisible(true);

sctLayout(ncwBordcrLayout());

btn=newBulton("點擊我會彈出窗口");

PanelpI=newPanel。;

pl.add(ncwLabel(""));

pl.add(btn);

pl.add(ncwLabel(""));

add("South",pl);

validate();

addWindowListener(newWindovvAdapter()

{publicvoidwindowClosing(WindowEvente)

{Systcm.exit(O);}

I);

btn.addActionListener(this);

)

publicvoidactionPerfbrnied(ActionEvente){

newTest5_2();

publicstaticvoidmain(String[]args){

newTest5_2();

)

)

[3]什么是容器的布局?試列舉并簡述Java中常用的幾種布局策略。

[解答]:

容器的布局就是控制組件在容器中擺放的位置。

AWT容器分為兩類:外部容器和內(nèi)部容器。其中,外部容器一般會獨立存在,例如Frame

類;而內(nèi)部容器則會嵌套在外部容器內(nèi)部使用,例如Panel類。容器的布局是指對添加的各個

組件進行有序的、統(tǒng)一的對位置進行編排,使其更加美觀。

1.順序布局

順序布局(FlowLayout)是最基本的一種布局,面板的默認(rèn)布局就是順序布局。順序布局指

的是把圖形元件一個接一個地放在面板上。下面是一個順序布局的例子。

packagesample;

importjava.awt.*;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

publicclassMyFlowLayout{

privateFramef;

privateButtonbuttonI,bulton2,button3;

publicstaticvoidmain(StringargslJ){

MyFlowLayoutmflow=newMyFlowLayout();

inflow.go();

publicvoidgo(){

f=newFrame("FlowLayout演示");

f.addWindowListener(ne\vWindowAdapter(){

publicvoidwindo\vClosing(WindowEventevt){

f.sctVisiblc(false);

f.dispose();

System.exit(O);

I);

//f.setLayout(newFlowLayout。);

f.setLayout(newFlowLayou((FlowLayout.LEADING,20,20));

button1二newButton("確定)

button2=newButton("打開”);

button3=newBulton("關(guān)閉");

f.add(buitonI);

f.add(button2);

f.add(button3);

f.setSize(200,200);

f.pack();

f.setVisible(true);

程序運行結(jié)果如下。

&FlowLayout**-101x1

11定|打開|關(guān)回

圖順序布局(FlowLayout)

2.邊界布局

邊界布局(BorderLayout)包括5個區(qū):北區(qū)、南區(qū)、東區(qū)、西區(qū)和中區(qū)。這5個區(qū)在面板

上的分布規(guī)律是“上北下南,左西右東下面是一個邊界布局的例子。

packagesample;

importjava.awt.*;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

publicclassMyBorderLayout{

Framef;

Buttoneast,south,west,north,center;

publicstaticvoidmain(Stringargsf]){

MyBordcrLayoutmb=newMyBordcrLayout();

mb.go();

publicvoidgo(){

f=newFrame("BorderLayout演示");

f.addWindowListener(ne\vWindowAdapter(){

publicvoidwindowClosing(WindowEvcntevt){

f.setVisible(false);

f.dispose();

System.exit(O);

}

});

f.sctBounds(0,0,300,300);

f.sctLayout(ncwBordcrLayoutO);

north=newButlon("北)

south=newButtonC南');

east=newButton1'東”);

west=newButton。'西");

center=newBuHon("中");

f.add(BordcrLayout.NORTH,north);

f.add(BorderLayout.SOUTH,south);

f.add(BorderLayout.EAST,east);

f.add(BorderLayout.WEST,west);

f.add(BordeiLayout.CENTER,center);

f.setVisible(true);

}

)

程序運行結(jié)果見圖10-4o

圖10-4邊界布局(BorderLayout)

3.網(wǎng)格布局

網(wǎng)格布局(GridLayout)把面板分成一個個大小相等的網(wǎng)格,你可以給出網(wǎng)格的行數(shù)和列數(shù)。

下面是一個網(wǎng)格布局的例子。

packagesample;

importjava.awt.*;

importjava.awt.event.*:

publicclassMyGridLayout{

privateFramef;

privateButton1]btn;

publicstaticvoidinain(Stringargs[]){

MyGridLayoutgrid=newMyGridLayout。;

grid.goO;

)

publicvoidgo(){

f=newFrame("GridLayout演示)

f.addWindowListcncr(ncwWindowAdaptcr(){

publicvoidwindowClosing(WindowEvcnlevt){

f.setVisible(false);

f.dispose();

System.exit(O);

)

));

f.setLayout(newGridLayout(3,3,10,10));

btn=newButton[9];

tbr(in(i=0;i<=8;i++){

intj=i+1;

btn[ij=newButtonC"1+j);

f.add(btn[i]);

)

//f.pack();

f.se(Size(IOO,100);

f.setVisible(true);

}

程序運行結(jié)果見圖10-5。

圖10-5網(wǎng)格布局(GridLayout)

4.卡片布局

卡片布局(CardLayout)把每個組件看作一張卡片,好像一副撲克牌,它們疊在一起,每次

只有最外面的一個組件可以被看到。

packagesample;

importjava.awt.*;

importjava.awt.event.*:

publicclassMyCardLayout{

publicstaticvoidmain(Stringargs[J){

newMyCardLayout().go();

}

publicvoidgo(){

finalFramef=newFrame("CardLayout演示。

f.addWindowListener(newWindowAdapter。{

publicvoidwindowClosing(WindowEvcntcvt){

f.setVisible(false);

f.dispose();

System.exit(O);

)

});

f.sctSizc(300,100);

f.setLayou((newCardLayoutO);

finalFramefl=f;

for(inti=l;i<=5;++i){

Buttonb=newButton("Button"+i);

b.setSize(100,25);

b.addActionListcncr(newActionListcncr(){

publicvoidaclionPeifbrmed(ActionEventae){

CardLayoutcl=(CardLayout)f1.gctLayout();

cl.next(fl);

I

));

f.add(b,"button*+i);

f.setVisible(true);

程序運行結(jié)果見圖10-6。

圖10-6卡片布局(CardLayout)

單擊按鈕Button1后,顯示下一個按鈕Button2,依此類推。

5.網(wǎng)格包布局

網(wǎng)格包(GridBag)布局足基于網(wǎng)格布局之上的一種改進。和基本的網(wǎng)格布局不同的是,

個組件可以跨越一個或多個網(wǎng)格,這樣一來增加了布局的靈活性。為了處理網(wǎng)格的跨越性,

我們可以使用GridBagConstraints類。有興趣的讀者可以參考JavaAPI來了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論