JavaEE基礎教程課后習題答案_第1頁
JavaEE基礎教程課后習題答案_第2頁
JavaEE基礎教程課后習題答案_第3頁
JavaEE基礎教程課后習題答案_第4頁
JavaEE基礎教程課后習題答案_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

..第一章Java語言概述與編程環(huán)境1.Java語言特點是什么?Java語言具有如下特性:簡單性、面向?qū)ο?、分布式、解釋型、可靠、安全、平臺無關、可移植、高性能、多線程、動態(tài)性等。2.什么叫Java虛擬機?什么叫Java平臺?Java虛擬機與Java平臺的關系如何?Java虛擬機〔JavaVirtualMachine>簡稱JVM。Java虛擬機是一個想象中的機器,在實際的計算機上通過軟件模擬來實現(xiàn)。Java虛擬機有自己想象中的硬件,如處理器、堆棧、寄存器等,還具有相應的指令系統(tǒng)。3.Java程序是由什么組成的?一個程序中必須有public類嗎?Java源文件的命名規(guī)則是怎樣的?一個Java源程序是由若干個類組成。一個Java程序不一定需要有public類:如果源文件中有多個類時,則只能有一個類是public類;如果源文件中只有一個類,則不將該類寫成public也將默認它為主類。源文件命名時要求源文件主名應與主類〔即用public修飾的類的類名相同,擴展名為.java。如果沒有定義public類,則可以任何一個類名為主文件名,當然這是不主張的,因為它將無法進行被繼承使用。另外,對Applet小應用程序來說,其主類必須為public,否則雖然在一些編譯編譯平臺下可以通過〔在BlueJ下無法通過但運行時無法顯示結果。4.開發(fā)與運行Java程序需要經(jīng)過哪些主要步驟和過程?<1>下載、安裝J2SDK;<2>設置運行環(huán)境參數(shù):JAVA_HOME、PATH、CLASSPATH;<3>使用文本編輯器編寫原代碼如HelloWorld.java;<4>運行命令"javacHelloWorld.java"編譯HelloWorld.java為HelloWorld.class;<5>運行"javaHelloWorld"生成HelloWorld.exe。5.怎樣區(qū)分應用程序和小應用程序?應用程序的主類和小應用程序的主類必須用public修飾嗎?JavaApplication是完整的程序,需要獨立的解釋器來解釋運行;而JavaApplet則是嵌在HTML編寫的Web頁面中的非獨立運行程序,由Web瀏覽器內(nèi)部包含的Java解釋器來解釋運行。兩者的主要區(qū)別是:任何一個JavaApplication應用程序必須有且只有一個main方法,它是整個程序的入口方法;任何一個Applet小應用程序要求程序中有且必須有一個類是系統(tǒng)類Applet的子類,即該類頭部分以extendsApplet結尾。應用程序的主類當源文件中只有一個類時不必用public修飾,但當有多于一個類時則主類必須用public修飾。小應用程序的主類在任何時候都需要用public來修飾。6.安裝JDK之后如何設置JDK系統(tǒng)的PATH,CLASSPATH?他們的作用是什么?〔1PATH環(huán)境變量。設置環(huán)境變量path是因為windowxp是多用戶操作系統(tǒng),支持不同用戶的個性化系統(tǒng)定制,這里設置的信息只影響當前用戶,而不會影響其他用戶。假如只有一個用戶,只是運行.class文件,則也不需要設置path環(huán)境,因為JDK安裝之后會把java.exe等幾個關鍵文件復制到c:\windows\system32目錄中,而此目錄已經(jīng)存在于path變量,所以說用戶變量path隨不同用戶而設置的,設置路徑:"D:\jdk1.5\bin"。PATH環(huán)境變量作用是指定命令搜索路徑,在命令行下面執(zhí)行命令如javac編譯java程序時,它會到PATH變量所指定的路徑中查找看是否能找到相應的命令程序。我們需要把jdk安裝目錄下的bin目錄增加到現(xiàn)有的PATH變量中,bin目錄中包含經(jīng)常要用到的可執(zhí)行文件如javac/java/javadoc等待,設置好PATH變量后,就可以在任何目錄下執(zhí)行javac/java等工具了。〔2CLASSPATH環(huán)境變量。作用是指定類搜索路徑,要使用已經(jīng)編寫好的類,前提當然是能夠找到它們了,JVM就是通過CLASSPTH來尋找類的。我們需要把jdk安裝目錄下的lib子目錄中的dt.jar和tools.jar設置到CLASSPATH中,當然,當前目錄"."也必須加入到該變量中。設置classpath環(huán)境變量是為了運行一些特殊的java程序,如以.jar為后綴的文件或者是javac運行java程序,假如不運行這類程序,也就不必要設置classpath環(huán)境變量了,設置方法是:〔安裝jdk是的目錄為:d:\jdk1.5>那么就在"變量值"文本框中鍵入:".;D:\jdk1.\lib\dt.jar;D:\jdk1.5\lib\tools.jar";第二章Java編程基礎1.試分析基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的基本特點。Java的基本數(shù)據(jù)類型都有固定的數(shù)據(jù)位,不隨運行平臺的變化而變化?;緮?shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。引用類型都是用類或?qū)ο髮崿F(xiàn)的,引用數(shù)據(jù)類型包括:類,數(shù)組,接口?;緮?shù)據(jù)類型和引用類型的區(qū)別主要在于基本數(shù)據(jù)類型是分配在棧上的,而引用類型是分配在堆上的。不論是基本數(shù)據(jù)類型還是引用類型,他們都會先在棧中分配一塊內(nèi)存,對于基本類型來說,這塊區(qū)域包含的是基本類型的內(nèi)容;而對于對象類型來說,這塊區(qū)域包含的是指向真正內(nèi)容的指針,真正的內(nèi)容被手動的分配在堆上。2.分析以下程序段,得到什么打印結果:0-112System.out.println<1>>>1>;System.out.println<-1>>31>;System.out.println<2>>1>;System.out.println<1<<1>;3.以下temp變量的最終取值是:1longtemp=<int>3.9;temp%=2;4.以下代碼運行后得到的輸出結果:Notequal!10intoutput=10;booleanb1=false;if<<b1==true>&&<<output+=10>==20>>{System.out.println<"Weareequal"+output>;}else{System.out.println<"Notequal!"+output>;}5.以下代碼運行后的輸出結果:Weareequal20intoutput=10;booleanb1=false;if<<b1=true>&&<<output+=10>==20>>{System.out.println<"Weareequal"+output>;}else{System.out.println<"Notequal!"+output>;}6.運行以下程序,將得到的輸出結果:179179publicclassAbs{staticinta=0x11;staticintb=0011;staticintc='\u0011';staticintd=011;publicstaticvoidmain<Stringargs[]>{System.out.println<a>;System.out.println<b>;System.out.println<c>;System.out.println<d>;}}7.分析下列代碼段,i、count變量的最終取值是:612inti=3;intcount=<i++>+<i++>+<i++>;8.字符‘A’的Unicode編碼為65。下面代碼正確定義了一個代表字符‘A’的選項是:acdA>charch=65;B>charch='\65';C>charch='\u0041';D>charch='A';E>charch="A";9.下面哪些是java關鍵字:adeghA>finalB>AbstractC>LongD>staticE>classF>mainG>privateH>System10.下面哪些是不合法的標識符cefhA>do_it_nowB>_SubstituteC>9thMethodD>$addMoneyE>%getPathF>2variableG>variable2H>#myvar11.字節(jié)型數(shù)據(jù)的取值范圍是:-128到12712.請問下面哪些變量定義語句編譯時會出錯:acfhA>floatf=1.3;B>doubleD=4096.0;C>byteb=257;D>Strings="1";E>inti=10;F>charc="a";G>charC=4096;H>booleanb=null;13.如果調(diào)用下面方法且參數(shù)值為67,那么方法的返回值是:64publicintmaskoff<intN>{returnN^3;}14.編寫程序?qū)?4.5和68.4兩個數(shù)相加,并將結果顯示成以下形式:x+y=34.5+68.4=***.*publicclasstest{ publicstaticvoidmain<String[]args>{ floatx=34.5f,y=68.4f; System.out.println<"x+y="+x+"+"+y+"="+<x+y>>;第三章控制結構1.結構化程序設計有哪三種流程?他們分別對應Java中那些語句。結構化程序設計有三種基本流程:循環(huán)、分支和順序。Java程序中的分支語句包含if語句、switch語句;循環(huán)語句包括了while語句,do-while語句、for語句;其他語句如變量、對象定義、賦值語句、方法調(diào)用語句、以及上面的循環(huán)結構、分支結構等按照上下文排列都是順序語句。2.在一個循環(huán)中使用break、continue和return有什么不同?break用于跳出整個循環(huán)語句,在循環(huán)結構中一旦遇到break語句,不管循環(huán)條件如何,程序立即退出所在的循環(huán)體。continue用于跳過本次循環(huán)中尚未執(zhí)行的語句,但是仍然繼續(xù)執(zhí)行下一次循環(huán)中的語句。在循環(huán)中使用return語句,將終止當前方法調(diào)用,同時終止循環(huán),使流程返回到調(diào)用語句的下一個語句執(zhí)行。3.面代碼將輸出:________a=9;b=18;c=4;d=14;e=-14;f=-2g=18.4;h=2.3999999999999986;i=5;j=3;k=5publicclasstest3{publicstaticvoidmain<Stringargs[]>{inta=5+4;intb=a*2;intc=b/4;intd=b-c;inte=-d;intf=e%4;doubleg=18.4;doubleh=g%4;inti=3;intj=i++;intk=++i;System.out.println<"a="+a+";b="+b+";c="+c+";d="+d+";e="+e+";f="+f>;System.out.println<"g="+g+";h="+h+";i="+i+";j="+j+";k="+k>;}}4.下面代碼將輸出:________25<3=false3!=0&&25/3>5=true0!=0&&25/0>5=falsepublicclassLogicTest{publicstaticvoidmain<Stringargs[]>{ inta=25,b=3; booleand=a<b;//d=false System.out.println<a+"<"+b+"="+d>;//=; inte=3; d=<e!=0&&a/e>5>; System.out.println<e+"!=0&&"+a+"/"+e+">5="+d>; intf=0; d=<f!=0&&a/f>5>; System.out.println<f+"!=0&&"+a+"/"+f+">5="+d>; }}5.編寫程序,求兩個整數(shù)的最大公約數(shù)。importjava.util.Scanner;publicclassGcd_Lcm{publicstaticvoidmain<Stringargs[]>{ Scannersc=newScanner<System.in>; System.out.println<"輸入2個數(shù):以','隔開">; String[]str=sc.next<>.split<",">; intm=Integer.parseInt<str[0]>; intn=Integer.parseInt<str[1]>; intmin=m>n?n:m; intmax=m>n?m:n; intnum1=1; intnum2=max; for<inti=min;i>0;i-->{ if<m%i==0&&n%i==0>{ num1=i;break; } } while<true>{ if<num2%m==0&&num2%n==0>{ break; } num2=m*n>num2*2?num2*2:m*n; }System.out.println<"最大公約數(shù):"+num1+"最小公倍數(shù):"+num2>;}}6.編寫程序,打印出如下九九乘法表。*|123456789|1|12|243|3694|4812165|5101520256|612182430367|71421283542498|8162432404856649|91827364554637281publicclassNineByNineMul{ publicstaticvoidmain<Stringargs[]>{ System.out.print<"*|">; for<inti=1;i<=9;i++>{ System.out.print<""+i+"">; } System.out.println<>; System.out.print<"|">; for<inti=1;i<=9;i++>{ System.out.print<"">; } System.out.println<>; for<inti=1;i<=9;i++>{ System.out.print<""+i+"|">; for<intj=1;j<=i;j++>{ System.out.print<i*j+"">; } System.out.println<>; } } }7.下面代碼將輸出:onetwodefaultinti=1;switch<i>{case0:System.out.println<"zero">;break;case1:System.out.println<"one">;case2:System.out.println<"two">;default:System.out.println<"default">;}8.下面代碼將輸出:EqualclassEqualsTest{publicstaticvoidmain<String[]args>{chara='\u0005';Strings=a==0x0005L?"Equal":"NotEqual";System.out.println<s>;}}9.編寫程序,對A[]={30,1,-9,70,25}數(shù)組由小到大排序。publicclassbooktest{ publicstaticvoidmain<String[]args>{ inta[]={30,1,-9,70,25}; System.out.print<"數(shù)組原始順序:">; for<inti=0;i<a.length;i++>System.out.print<a[i]+"">; for<inti=0;i<a.length;i++>{ intlowerIndex=i; for<intj=i+1;j<a.length;j++> if<a[j]<a[lowerIndex]>lowerIndex=j; inttemp=a[i]; a[i]=a[lowerIndex]; a[lowerIndex]=temp; } System.out.print<"\n數(shù)組排序后的順序:">; for<inti=0;i<a.length;i++>System.out.print<a[i]+"">; }} 10.運行下面代碼將輸出什么內(nèi)容?oneinti=1;switch<i>{case0:System.out.println<"zero">;break;case1:System.out.println<"one">;break;case2:System.out.println<"two">;break;default:System.out.println<"default">;}11.編寫程序,求2-1000內(nèi)的所有素數(shù),并按每行5列的格式輸出。publicclassPrimeTest{ publicstaticvoidmain<Stringargs[]>{ intnum=2; System.out.print<2+"">; for<inti=3;i<=1000;i+=2>{ booleanf=true; for<intj=2;j<i;j++>{ if<i%j==0>{ f=false; break; } } if<!f>{continue;} System.out.print<i+"">; if<num++%5==0>System.out.println<>; } } }12.編寫程序,生成100個1~6之間的隨機數(shù),統(tǒng)計1~6每個數(shù)字出現(xiàn)的概率。publicclassRandomTest{publicstaticvoidmain<String[]args>{ int[]randomnum=newint[100]; int[]n=newint[6]; doublea; for<inti=0;i<100;i++>{ a=Math.random<>*6; a=Math.ceil<a>; randomnum[i]=newDouble<a>.intValue<>; System.out.print<randomnum[i]>; switch<randomnum[i]>{ case1:n[0]++;break; case2:n[1]++;break; case3:n[2]++;break; case4:n[3]++;break; case5:n[4]++;break; case6:n[5]++;break;} }System.out.println<>;//以下可改為循環(huán)輸出System.out.println<"數(shù)字1出現(xiàn)的概率="+<n[0]/100.0>*100+"%">;System.out.println<"數(shù)字2出現(xiàn)的概率="+<n[1]/100.0>*100+"%">;System.out.println<"數(shù)字3出現(xiàn)的概率="+<n[2]/100.0>*100+"%">;System.out.println<"數(shù)字4出現(xiàn)的概率="+<n[3]/100.0>*100+"%">;System.out.println<"數(shù)字5出現(xiàn)的概率="+<n[4]/100.0>*100+"%">;System.out.println<"數(shù)字6出現(xiàn)的概率="+<n[5]/100.0>*100+"%">;}}13.編寫程序,求1!+2!+3!+…+15!。publicclassFactorialSum{ staticintf<intx>{ if<x<=0>return1; else returnx*f<x-1>;}publicstaticvoidmain<String[]args>{ intsum=0; for<intj=1;j<=15;j++> { sum+=f<j>; }System.out.println<sum>;}}14.編寫程序,分別用do-while和for循環(huán)計算1+1/2!+1/3!+1/4!+…的前15項的和。for循環(huán)代碼:publicclassFor_FactorialSum{staticintf<intx>{ if<x<=0>return1; else returnx*f<x-1>;}publicstaticvoidmain<String[]args>{ doublesum=0; for<intj=1;j<=15;j++> { sum+=1.0/f<j>; }System.out.println<sum>;}}do-while循環(huán)代碼:publicclassDoWhile_FactorialSum{staticintf<intx>{ if<x<=0>return1; else returnx*f<x-1>;}publicstaticvoidmain<String[]args>{ doublesum=0; intj=1; do{ sum+=1.0/f<j>; j++; }while<j<=15>;System.out.println<sum>;}}15.編寫一個程序,用選擇法對數(shù)組a[]={20,10,55,40,30,70,60,80,90,100}進行從大到小的排序。<分別采用冒泡排序、選擇排序和插入排序方法>publicclassSortAll{publicstaticvoidmain<String[]args>{ inta[]={20,10,55,40,30,70,60,80,90,100}; System.out.println<"冒泡排序的結果:">; maoPao<a>; System.out.println<>; System.out.println<"選擇排序的結果:">; xuanZe<a>; System.out.println<>; System.out.println<"插入排序的結果:">; chaRu<a>; }//冒泡排序publicstaticvoidmaoPao<int[]x>{for<inti=0;i<x.length;i++>{for<intj=i+1;j<x.length;j++>{if<x[i]>x[j]>{inttemp=x[i];x[i]=x[j];x[j]=temp;}}}for<inti:x>{System.out.print<i+"">;}}//選擇排序publicstaticvoidxuanZe<int[]x>{for<inti=0;i<x.length;i++>{intlowerIndex=i;//找出最小的一個索引for<intj=i+1;j<x.length;j++>{if<x[j]<x[lowerIndex]>{lowerIndex=j;}}//交換inttemp=x[i];x[i]=x[lowerIndex];x[lowerIndex]=temp;}for<inti:x>{System.out.print<i+"">;}}//插入排序publicstaticvoidchaRu<int[]x>{for<inti=1;i<x.length;i++>{//i從1開始,因為第1個數(shù)已經(jīng)是排好序的for<intj=i;j>0;j-->{if<x[j]<x[j-1]>{inttemp=x[j];x[j]=x[j-1];x[j-1]=temp;}}}for<inti:x>{System.out.print<i+"">;}}}16.編寫程序,產(chǎn)生30個素數(shù),按從小到大的順序放入數(shù)組prime[]中。publicclassPrimeArray{ publicstaticvoidmain<Stringargs[]>{ int[]primearry=newint[30]; primearry[0]=2; intnum=1; System.out.print<2+"">; for<inti=3;i<=1000;i+=2>{ booleanf=true; for<intj=2;j<i;j++>{ if<i%j==0>{ f=false; break; } } if<!f>{continue;} primearry[num++]=i; System.out.print<i+"">; if<num%5==0>System.out.println<>; if<num==30>break; } } }17.一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為"完數(shù)"。分別編寫一個應用程序和小應用程序求1000之內(nèi)的所有完數(shù)。publicclassWanshu{ publicstaticvoidmain<String[]args>{ intsum=0,i,j; for<i=1;i<=1000;i++> { for<j=1,sum=0;j<i;j++> { if<i%j==0> sum=sum+j; } if<sum==i> { System.out.print<"完數(shù):"+i+""+"其因子是:">; for<intk=1;k<=sum/2;k++> { if<sum%k==0> System.out.print<""+k>; } System.out.println<>; } } } }18.從鍵盤讀取若干個數(shù),以"-1"結束,按從小到大的順序排序。importjava.util.Scanner;publicclasssc_num{ publicstaticvoidmain<String[]args>{ Scannerscanner=newScanner<System.in>; intscnum=0,i=0; int[]scarry=newint[30]; System.out.println<"輸入整數(shù)<-1結束>:">; while<scnum!=-1>{ scarry[i]=scanner.nextInt<>;; scnum=scarry[i]; i++; } xuanZe<scarry,i-1>; }//選擇排序 publicstaticvoidxuanZe<int[]x,intn>{ for<inti=0;i<n;i++>{ intlowerIndex=i; for<intj=i+1;j<n;j++>{ if<x[j]<x[lowerIndex]>{ lowerIndex=j; } } inttemp=x[i]; x[i]=x[lowerIndex]; x[lowerIndex]=temp; } for<inti=0;i<n;i++>{ System.out.print<x[i]+"">; } }}第四章類與對象的基本概念1.面向?qū)ο蟮能浖_發(fā)有哪些優(yōu)點?面向?qū)ο笤O計是一種把面向?qū)ο蟮乃枷霊糜谲浖_發(fā)過程中,指導開發(fā)活動的系統(tǒng)方法,是建立在"對象"概念基礎上的方法學。所謂面向?qū)ο缶褪腔趯ο蟾拍?以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟件系統(tǒng)。從面向過程到面向?qū)ο笫浅绦蛟O計技術的一個飛躍。人們之所以要采用面向?qū)ο蟮某绦蛟O計技術,其目的在于:按照與人類習慣思維方法一致的原則開發(fā)系統(tǒng);提高代碼的可重用性<或者稱為復用性>;提升程序的開發(fā)與運行效率;提高程序的可靠性與可維護性;提高程序的可擴展性;增強程序的可控制性??傊?面向?qū)ο蟮某绦蛟O計,能夠有效分解、降低問題的難度與復雜性,提高整個求解過程的可控制性、可監(jiān)視性和可維護性,從而獲得較高的開發(fā)效率與可靠效果。2.什么叫對象?什么叫類?類和對象有什么關系。對象<Object>是一個應用系統(tǒng)中用來描述客觀事物的實體,是具有特定屬性<數(shù)據(jù)>和行為<方法>的基本運行單位,是類的一個特定狀態(tài)下的實例。對象是一件事、一個實體、一個名詞、一個可以想象為有自己的標識的任何東西。對象是類的實例化。概括來說:萬物皆對象。對象具有狀態(tài),一個對象用數(shù)據(jù)值來描述它的狀態(tài)。類<Class>是Java代碼的基本組織模塊,是用以描述一組具有共同屬性和行為的對象的基本原型,是對這組對象的概括、歸納與抽象表達。類是對象的模板,它定義了本類對象所應擁有的狀態(tài)屬性集及操作這組屬性的行為方法集。是對一組有相同數(shù)據(jù)和相同操作的對象的定義,一個類所包含的方法和數(shù)據(jù)描述一組對象的共同屬性和行為。類和對象之間的關系是抽象和具體的關系:類就是一種模板,表達的是一種抽象的概念,它描述了該類對象的共同特征,類是在對象之上的抽象,對象則是類的具體化,是類的實例。對象是模板的實例化,是個性的產(chǎn)物,是一個具體的個體;類必須通過對象才能使用,而對象中的屬性和行為都必須在類中定義;類由屬性和行為〔方法組成。3.什么是包?把一個類放在包里有什么作用?Java中的包<Package>是一種松散的類的集合,是用來組織與管理類與接口的容器。包的作用主要是把需要協(xié)同工作的不同的類組織在一起,使得程序功能清楚、結構分明。4.作用域public、private、protected以及不寫時<default>有什么區(qū)別?當用一個類創(chuàng)建了一個對象之后,該對象可以通過"."運算符訪問自己的變量,并使用類中的方法。但訪問自己的變量和使用類中的方法是有一定限制的。通過修飾符private、default、protected和public來說明類成員的使用權限。private〔私有的:類中限定為private的成員只能在這個類中被訪問,在類外不可見。default〔無修飾符,缺省的:如果沒有訪問控制符,則該類成員可以被該類所在包中的所有其它類訪問。protected〔受保護的:用該關鍵字修飾的類成員可以被同一類、被該類所在包中的所有其它類或其子類<可以不在同一包中>的實例對象訪問。public:用public修飾的類成員可以被其他任何類訪問,前提是對類成員所在的類有訪問權限。類成員訪問控制符與訪問能力之間的關系 同一個類 同一個包 不同包的子類 不同包非子類private * default * * protected * * * public * * * *5.什么是方法?方法的結構是怎樣的?設計方法應考慮哪些因素?方法是Java類的一個組成部分,通過類的方法改變對象的狀態(tài)。方法的結構:[方法修飾符]返回值類型方法名〔[形參列表][throws異常列表]{方法體;}設計方法應考慮因素有:<1>方法名是Java中任意的標識符,按照命名的約定,方法名應該是有意義的動詞或動詞短語,它的第一個字母一般要小寫,其他有意義的單詞的首字母要大寫,其余字母小寫。<2>返回值類型可以是任意的Java類型,甚至可以是定義此方法的類。如果方法沒有返回值,則用void表示。<3>形式參數(shù)列表是可選的。如果方法沒有形式參數(shù),就用一對小括號"<>"表示。形式參數(shù)列表的形式如下:<類型形參名,類型形參名,……><4>throws異常列表規(guī)定了在方法執(zhí)行中可能導致的異常。6.什么是方法的覆蓋?與方法的重載有何不同?方法的覆蓋與屬性的隱藏有何不同?子類重新定義父類中已經(jīng)存在的方法,稱為方法的覆蓋。方法重載指一個類中有多個方法享有相同的名字,但是這些方法的參數(shù)必須不同,或者是參數(shù)的個數(shù)不同,或者是參數(shù)類型不同。返回類型不能用來區(qū)分重載的方法。其實方法重載的最主要的作用就是實現(xiàn)同名的構造方法可以接受不同的參數(shù)。參數(shù)類型的區(qū)分度一定要足夠,例如不能是同一簡單類型的參數(shù),如int與long。方法的重載不是子類對父類同名方法的重新定義,而是在一個類中定義了同名的不同方法。方法覆蓋與屬性的隱藏不同:子類重新定義父類已有的域,并不能完全取代它從父類那里繼承的同名的域,這個域仍然占用子類的內(nèi)存空間,在某些情況下會被使用;而當子類重新定義父類的方法時,從父類那里繼承來的方法將被新方法完全取代,不再在子類的內(nèi)存空間中占一席之地。7.什么是成員變量、局部變量、類變量和實例變量?在方法外但在類聲明內(nèi)定義的變量叫成員變量,作用域是整個類。在方法體中定義的變量和方法的參數(shù)被稱為局部變量。類的成員變量分為類變量和實例變量,類變量是用關鍵字static聲明的變量。成員變量在整個類內(nèi)都有效,局部變量只在定義它的方法內(nèi)有效。他們的生存期分別是:局部變量在定義該變量的方法被調(diào)用時被創(chuàng)建,而在該方法退出后被撤銷;實例變量在創(chuàng)建該類的實例時被創(chuàng)建,而其生存期和該類的實例對象的生存期相同;類變量在該類被加載時被創(chuàng)建,所有該類的實例對象共享該類變量,其生存期是類的生存期。任何變量在使用前都必須初始化,但是需要指出的是局部變量必須顯式初始化,而實例變量不必,原始類型的實例變量在該類的構造方法被調(diào)用時為它分配的缺省的值,整型是0,布爾型是false,而浮點型是0.0f,引用類型〔類類型的實例變量的缺省值是null,類變量的規(guī)則和實例變量一樣,不同的是類變量的初始化是在類被加載時。8.什么是繼承?什么是父類?什么是子類?繼承的特性可給面向?qū)ο缶幊處硎裁春锰??繼承<Inheritance>:繼承是指從已有的類中派生出若干個新類,是子類自動共享父類之間數(shù)據(jù)和方法的機制。已有類稱為基類或父類,新類稱為派生類或子類;子類將自動地獲得基類的屬性與方法,從而不需再重復定義這些屬性與方法;當然子類還可以修改父類的方法或增加新的方法,從而使自己更適合特殊的需要。類之間的繼承關系是現(xiàn)實世界中遺傳關系的直接模擬。如果沒繼承性機制,則類對象中數(shù)據(jù)、方法就會出現(xiàn)大量重復。繼承不僅支持系統(tǒng)的可重用性,而且還促進系統(tǒng)的可擴充性。繼承是子對象可以繼承父對象的屬性和行為,亦即父對象擁有的屬性和行為,其子對象也就擁有了這些屬性和行為。這非常類似大自然中的物種遺傳。9.什么是多態(tài)?面向?qū)ο蟪绦蛟O計為什么要引入多態(tài)的特性?多態(tài)性:是指不同類的對象收到相同的消息時,得到不同的結果。即允許不同類的對象對同一消息作出各自的響應,以統(tǒng)一的風格處理已存在的數(shù)據(jù)及相關的操作。即多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,較好地解決了應用程序中方法同名的問題。多態(tài)的特點大大提高了程序的抽象程度和簡潔性,更重要的是它最大限度地降低了類和程序模塊之間的耦合性,提高了類模塊的封閉性,使得它們不需了解對方的具體細節(jié),就可以很好地共同工作。這對程序的設計、開發(fā)和維護都有很大的好處。10."子類的域和方法的數(shù)目一定大于等于父類的域和方法的數(shù)目",這種說法是否正確?為什么?這樣說是不對的,因為父類的私有方法不能被繼承。如果父類有N個私有域和方法而只有一個非私有的域或方法時,跟據(jù)繼承的原則子類只能擁有父類的非私有域和方法。這時子類的域和方法就要小于父類了。11.父類對象與子類對象相互轉(zhuǎn)化的條件是什么?如何實現(xiàn)它們的相互轉(zhuǎn)化?一個子類對象也可以被合法地視為一個父類的對象,即一個父類對象的引用,其指向的內(nèi)存單元可能實際上是一個子類的對象。在這種情況下,可以使用強制類型轉(zhuǎn)換,將父類對象的引用轉(zhuǎn)換成實際的子類對象的引用。12.以下代碼共創(chuàng)建了幾個對象:2Strings1=newString<"hello">;Strings2=newString<"hello">;Strings3=s1;Strings4=s2;13.分析以下代碼,編譯時出現(xiàn)什么現(xiàn)象:ThelocalvariablemyArgmaynothavebeeninitializedpublicclassTest{staticintmyArg=1;publicstaticvoidmain<String[]args>{intmyArg;System.out.println<myArg>;}}14.對于以下程序,運行"javaMysteryMightyMouse",得到的結果:MouseMightypublicclassMystery{publicstaticvoidmain<String[]args>{Changerc=newChanger<>;c.method<args>;System.out.println<args[0]+""+args[1]>;}staticclassChanger{voidmethod<String[]s>{Stringtemp=s[0];s[0]=s[1];s[1]=temp;}}}15.閱讀下列程序,寫出輸出的結果:i=100i=10i=10classXxx{privateinti;Xxxx;publicXxx<>{i=10;x=null;}publicXxx<inti>{this.i=i;x=newXxx<>;}publicvoidprint<>{System.out.println<"i="+i>;System.out.println<x>;}publicStringtoString<>{return"i="+i;}}publicclassTest{publicstaticvoidmain<String[]args>{Xxxx=newXxx<100>;x.print<>;System.out.println<x.x>;}}16.為了使以下Java應用程序輸出11、10、9,應在<**>處插入的語句是:i[a]=<int>x[a]+1;如果要求輸出10、9、8,則在〔**處插入的語句應是:i[a]=<int>x[a];publicclassGetIt{publicstaticvoidmain<Stringargs[]>{doublex[]={10.2,9.1,8.7};inti[]=newint[3];for<inta=0;a<<x.length>;a++>{〔**System.out.println<i[a]>;}}}17.閱讀下列程序,分析程序的輸出結果:MyfuncabstractclassBase{abstractpublicvoidmyfunc<>;publicvoidanother<>{System.out.println<"Anothermethod">;}}publicclassAbsextendsBase{publicstaticvoidmain<Stringargv[]>{Absa=newAbs<>;a.amethod<>;}publicvoidmyfunc<>{System.out.println<"Myfunc">;}publicvoidamethod<>{myfunc<>;}}18.分析以下代碼,編譯時會出現(xiàn)的錯誤信息是:Test.java:6:secret可以在A中訪問private<returna.secret++;出錯>classA{privateintsecret;}publicclassTest{publicintmethod<Aa>{returna.secret++;}publicstaticvoidmain<Stringargs[]>{Testtest=newTest<>;Aa=newA<>;System.out.println<test.method<a>>;}}19、分析以下程序,寫出運行結果:1234publicclassTest19{publicstaticvoidchangeStr<Stringstr>{str="welcome";}publicstaticvoidmain<String[]args>{Stringstr="1234";changeStr<str>;System.out.println<str>;}}20、分析以下程序,寫出運行結果:ABDCBDCBpublicclassTest20{staticbooleanfoo<charc>{System.out.print<c>;returntrue;}publicstaticvoidmain<String[]args>{inti=2;for<foo<'A'>;foo<'B'>&&<i<4>;foo<'C'>>{i++;foo<'D'>;}}}21.編寫程序,要求創(chuàng)建一個Dog類,添加name,eyeColor屬性,為該屬性自動添加相應的set和get方法,并給出至少兩個構造方法。publicclassDog{privateStringname,eyeColor;//無形參的構造方法publicDog<>{="逗逗";this.eyeColor="黑";}//有形參的構造方法publicDog<Stringname,StringeyeColor>{=name;this.eyeColor=eyeColor;}publicStringgetEyeColor<>{ returneyeColor;}publicvoidsetEyeColor<StringeyeColor>{ this.eyeColor=eyeColor;}publicStringgetName<>{ returnname;}publicvoidsetName<Stringname>{ =name;}}22.統(tǒng)計一個字符串中出現(xiàn)某個字母的次數(shù)<注意區(qū)分大小寫>。String類中的相關方法〔具體用法請查看JDK幫助文檔:length<>:計算字符串長度,得到一個int型數(shù)值;indexOf<>:在字符串中定位某個子串,并返回位置編號substring<>:截取字符串中的一部分,并作為一個新字符串返回;equals<>:比較兩個String內(nèi)容是否完全相同。Stringstr="abckajbfhbbkhfgabkbjkdfasjkbdanjkasfbai";Stringchr="b";intcount=0;for<inti=0;i<str.length<>;i++>{if<chr.equals<str.charAt<i>>>count++;}System.out.println<"Thecountis"+count>;23.創(chuàng)建一個桌子<Table>類,該類中有桌子名稱、重量、桌面寬度、長度和桌子高度屬性,以及以下幾個方法: <1>構造方法:初始化所有成員變量。 <2>area<>:計算桌面的面積。 <3>display<>:在屏幕上輸出所有成員變量的值。 <4>changeWeight<intw>:改變桌子重量。 在測試類的main<>方法中實現(xiàn)創(chuàng)建一個桌子對象,計算桌面的面積,改變桌子重量,并在屏幕上輸出所有桌子屬性的值。packagecom.test;publicclassTable{Stringname;//名稱doubleweight;//重量doublewidth;//寬doublelongth;//長doubleheight;//高//構造方法publicTable<Stringname,doubleweight,doublewidth,doublelongth,doubleheight>{super<>;=name;this.weight=weight;this.width=width;this.longth=longth;this.height=height;}//計算桌面的面積publicvoidarea<>{System.out.println<"桌子面積是"+longth*width>;}//在屏幕上輸出所有數(shù)據(jù)成員的值publicvoiddisplay<>{System.out.println<"桌子名稱:"+name+"\n"+"重量:"+weight+"\n"+"寬:"+width+"\n"+"長:"+longth+"\n高:"+height>;}//改變桌子重量的方法publicvoidchangeWeight<inti>{this.weight=i;System.out.println<"面積改為"+this.weight>;}publicstaticvoidmain<String[]args>{Tabletable=newTable<"紅木桌",100.5,3.2,2.3,1.5>;System.out.println<"創(chuàng)建一個桌子對象,屬性如下">;table.display<>;table.area<>;table.changeWeight<100>;System.out.println<"更改重量后,屬性如下">;table.display<>;}}24.編寫一個程序,在主類中創(chuàng)建和調(diào)用方法sumf<>,方法sumf<>的功能是進行兩個浮點數(shù)的加法運算。試將12.7和23.4兩個數(shù)相加并顯示運算結果。importjava.util.Scanner;publicclasstest{ staticfloatsumf<floatx,floaty>{ returnx+y;}publicstaticvoidmain<String[]args>{ Scannersc=newScanner<System.in>; System.out.println<"輸入2個浮點數(shù)求和表達式,如:23.4+67.01">; String[]str=sc.next<>.split<"\\+">; floatm=Float.parseFloat<str[0]>; floatn=Float.parseFloat<str[1]>; System.out.println<m+"+"+n+"="+sumf<m,n>>;}}第五章類的高級特性1.接口與抽象類有哪些異同點?在面向?qū)ο蟮母拍钪?我們知道所有的對象都是通過類來描繪的,但是反過來卻不是這樣。并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。抽象類往往用來表征我們在對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象。正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表征抽象概念的抽象類是不能夠?qū)嵗?。接口與抽象類的主要異同點如下:<1>接口定義了一組特定功能的對外接口與規(guī)范,而并不真正實現(xiàn)這種功能,功能的實現(xiàn)留待給實現(xiàn)這一接口的各個類來完成。抽象類一般作為公共的父類為子類的擴展提供基礎,這里的擴展包括了屬性上和行為上的。而接口一般來說不考慮屬性,只考慮方法,使得子類可以自由的填補或者擴展接口所定義的方法。抽象類表示的是"is-a"關系,接口著重表示的是"can-do"關系。<2>abstractclass在Java語言中表示的是一種繼承關系,一個類只能使用一次繼承。但是,一個類卻可以實現(xiàn)多個interface,接口可以解決多重繼承問題。<3>接口是抽象方法和常量值的定義的集合,從本質(zhì)上講,接口是一種只包含常量與抽象方法的特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。接口里面不能有私有的方法或變量,是用于讓別人使用的,接口中的所有常量必須是publicstaticfinal,且必須給其初值,其實現(xiàn)類中不能重新定義,也不能改變其值。接口中的方法必須是publicabstract,這是系統(tǒng)默認的,不管你在定義接口時,寫不寫修飾符都是一樣的。抽象類中是可以有私有方法或私有變量的,抽象類中的變量默認是friendly型,其值可以在子類中重新定義,也可以重新賦值。<4>實現(xiàn)抽象類和接口的類必須實現(xiàn)其中的所有方法。在抽象類中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法。而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員,所有的成員方法都是abstract的。實現(xiàn)接口的一定要實現(xiàn)接口里定義的所有方法,而實現(xiàn)抽象類可以有選擇地重寫需要用到的方法。一般的應用里,最頂級的是接口,然后是抽象類實現(xiàn)接口,最后才到具體類實現(xiàn)。2.區(qū)分接口與抽象類分別在什么場合使用?如果預計要創(chuàng)建類的多個版本,則創(chuàng)建抽象類。抽象類提供簡單的方法來控制類版本。如果創(chuàng)建的功能將在大范圍的異類對象間使用,則使用接口。如果要設計小而簡練的功能塊,則使用接口。如果要設計大的功能單元,則使用抽象類。如果要向類的所有子類提供通用的已實現(xiàn)功能,則使用抽象類。抽象類主要用于關系密切的對象;而接口適合為不相關的類提供通用功能。抽象類應主要用于關系密切的對象,而接口最適合為不相關的類提供通用功能。接口多定義對象的行為;抽象類多定義對象的屬性;3.一個類如何實現(xiàn)接口?實現(xiàn)某接口的類是否一定要重載該接口中的所有抽象方法?一個類使用關鍵字implements實現(xiàn)某接口。實現(xiàn)某接口的類如果不是抽象類,則需要通過重載來實現(xiàn)該接口中的所有抽象方法;如果這個類是抽象類,則它可以不必實現(xiàn)該接口中的所有抽象方法。4.對于以下程序,運行"javaStaticTest",得到的輸出結果:publicclassStaticTest{static{System.out.println<"Hithere">;}publicvoidprint<>{System.out.println<"Hello">;}publicstaticvoidmain<Stringargs[]>{StaticTestst1=newStaticTest<>;st1.print<>;StaticTestst2=newStaticTest<>;st2.print<>;}}答案:HithereHelloHello5.編寫程序,要求創(chuàng)建一個抽象類Father,其中有身高、體重等屬性及愛好〔唱歌等方法,創(chuàng)建子類Son類繼承Father類,并增加性格這個屬性,改寫父類的方法〔愛好。publicclasstest{publicstaticvoidmain<Stringargs[]>{ Sonson=newSon<"乖兒子",1.78f,61f,"籃球">; son.showInfo<>; son.singsong<>; }}abstractclassFather{ floathigh,weight;protectedStringname;Father<Stringname,floathigh,floatweight>{=name;this.high=high;this.weight=weight;}abstractvoidsingsong<>;abstractvoidshowInfo<>;}classSonextendsFather{Stringspecialty;Son<Stringname,floathigh,floatweight,Stringspecialty>{super<name,high,weight>;this.specialty=specialty;}voidsingsong<>{ System.out.println<name+"issinggingloudly!">;}voidshowInfo<>{System.out.println<"__"+name+";身高:"+high+";體重:"+weight+";愛好:"+specialty>;}}第六章常用類庫1.Java中提供了名為〔的包裝類來包裝原始字符串類型。A.IntegerB.CharC.DoubleD.String答案:D2.java.lang包的〔方法比較兩個對象是否相等,相等返回true。A.toString〔B.equals〔C.compare〔D.以上所有選項都不正確答案:B3.使用〔方法可以獲得Calendar類的實例。 A.get〔B.equals〔C.getTime〔D.getInstance〔答案:D4.下面的集合中,〔不可以存儲重復元素。A.SetB.CollectionC.MapD.List答案:C5.關于Map和List,下面說法正確的是<>。A.Map繼承ListB.List中可以保存Map或ListC.Map和List只能保存從數(shù)據(jù)庫中取出的數(shù)據(jù) D.Map的value可以是List或Map答案:D6.給定如下Java代碼,編譯運行的結果是〔。 importjava.util.*;publicclassTest{ publicstaticvoidmain<String[]args>{ LinkedListlist=newLinkedList<>; list.add<"A">; list.add<2,"B">; Strings=<String>list.get<1>; System.out.println<s>; }} A.編譯時發(fā)生錯誤B.運行時引發(fā)異常C.正確運行,輸出:AD.正確運行,輸出:B答案:B7.請寫出下列語句的輸出結果 char[]data={'a','b','c','d'}; System.out.println<String.valueOf<10D>>; System.out.println<String.valueOf<3>2>>; System.out.println<String.valueOf<data,1,3>>;參考答案:10.0truebcd8.寫出下面代碼運行后的輸出結果是。publicclassArrtest{publicstaticvoidmain<Stringkyckling[]>{inti[]=newint[5];System.out.println<i[4]>;amethod<>;Objectobj[]=newObject[5];System.out.println<obj[2]>;}publicstaticvoidamethod<>{intK[]=newint[4];System.out.println<K[3]>;}}參考答案:00null9.什么是封裝?Java語言中的封裝類有哪些?參考答案: 封裝是表示把數(shù)據(jù)項和方法隱藏在對象的內(nèi)部,把方法的實現(xiàn)內(nèi)容隱藏起來。Java中的封裝類有Double、Integer、Float、Byte、Long、Character、Short和Boolean等類。10.什么是泛型?使用泛型有什么優(yōu)點?泛型List和普通List有什么區(qū)別?參考

溫馨提示

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

評論

0/150

提交評論