Thinking in Java第四版Acess部分答案.docx
《Thinking in Java第四版Acess部分答案.docx》由会员分享,可在线阅读,更多相关《Thinking in Java第四版Acess部分答案.docx(12页珍藏版)》请在冰豆网上搜索。
![Thinking in Java第四版Acess部分答案.docx](https://file1.bdocx.com/fileroot1/2022-11/29/cbec0b4e-a1f6-404e-a342-97b63cb44076/cbec0b4e-a1f6-404e-a342-97b63cb440761.gif)
ThinkinginJava第四版Acess部分答案
ThinkinginJava4thEdition习题答案
1.Access部分
(NO.1)//access/AccessTest.java
//TIJ4ChapterAccess,Exercise5,page227
/*Createaclasswithpublic,private,protectedandpackage-accessfieldsand
*methodmembers.Createanobjectofthisclassandseewhatkindofcompiler
*messagesyougetwhenyoutrytoaccessalltheclassmembers.Beawarethat
*classesinthesamedirectoryarepartofthe"default"package.
*/
/*insamedirectory:
*packageaccess;
*
*publicclassFourWays{
*inta=0;
*publicintb=1;
*protectedintc=2;
*privateintd=3;
*FourWays(){System.out.println("FourWays()constructor");}
*voidshowa(){System.out.println(a);}
*publicvoidshowb(){System.out.println(b);}
*protectedvoidshowc(){System.out.println(c);}
*privatevoidshowd(){System.out.println(d);}
*}
*/
packageaccess;//runcommandjavaaccess.AccessTest
publicclassAccessTest{
publicstaticvoidmain(String[]args){
FourWaysfw=newFourWays();
fw.showa();
fw.showb();
fw.showc();
fw.a=10;
fw.b=20;
fw.c=30;
fw.showa();
fw.showb();
fw.showc();
//!
fw.showd();//privateaccess,compilercan'ttouch
}
}
(NO.2)//access/Collision.java
//TIJ4ChapterAccess,Exercise2,page217
/*Takethecodefragmentsinthissectionandturnthemintoaprogramand
*verifythatcollisionsdooccur.
*/
importnet.mindview.simple.*;
importjava.util.*;
publicclassCollision{
publicstaticvoidmain(String[]args){
//Vectorv=newVector();//ambiquouscollision
net.mindview.simple.Vectorv1=newnet.mindview.simple.Vector();
java.util.Vectorv2=newjava.util.Vector();
}
}
(NO.3)//access/ConnectionManager.java
//TIJ4ChapterAccess,Exercise8,page233
/*FollowingtheformoftheexampleLunch.java,createaclasscalled
*ConnectionManagerthatmanagesafixedarrayofConnectionobjects.Theclient
*programmermustnotbeabletoexplicitlycreateConnectionobjects,butcan
*onlygetthemviaastaticmethodinConnectionManager.WhenConnectionManager
*runsoutofobjects,itreturnsanullreference.Testtheclassesinmain().*/
packageaccess;
classConnection{
privatestaticintcount=0;
privateinti=0;
privateConnection(){System.out.println("Connection()");}
//Allowcreationviastaticmethod:
staticConnectionmakeConnection(){
count++;
returnnewConnection();
}
publicstaticinthowMany(){returncount;}
publicStringtoString(){
return("Connection"+count);
}
}
publicclassConnectionManager{
staticinthowManyLeft=3;
staticConnection[]ca=newConnection[3];
{
for(Connectionx:
ca)
x=Connection.makeConnection();
}
publicstaticConnectiongetConnection(){
if(howManyLeft>0)
returnca[--howManyLeft];
else{
System.out.println("Nomoreconnections");
returnnull;
}
}
publicstaticvoidmain(String[]args){
ConnectionManagercm=newConnectionManager();
System.out.println(cm.howManyLeft);
cm.getConnection();
System.out.println(howManyLeft);
cm.getConnection();
System.out.println(howManyLeft);
cm.getConnection();
System.out.println(cm.getConnection());
System.out.println(howManyLeft);
}
}
(NO.4)//access/cookie2/CookieMonster.java
//TIJ4ChapterAccess,Exercise4,page227
//Showthatprotectedmethodshavepackageaccessbutarenotpublic.
/*IndirectoryCookie2:
*//access/cookie2/Cookie.java
*//Createsalibrary
*packageaccess.cookie2;
*
*publicclassCookie{
*publicCookie(){
*System.out.println("Cookiecontstructor");
*}
*protectedvoidbite(){System.out.println("bite");}
*}
*/
packageaccess.cookie2;
publicclassCookieMonster{
publicstaticvoidmain(String[]args){
Cookiex=newCookie();
x.bite();//packageaccesstoprotectedmethod
}
}
(NO.5)//access/debug/Debug.java
//TIJ4ChapterAccess,Exercise3,page220
/*Createtwopackages:
debuganddebugoff,containinganidenticalclasswitha
*debug()method.ThefirstversiondisplaysitsStringargumenttotheconsole,
*theseconddoesnothing.Useastaticimportlinetoimporttheclassintoatest
*program,anddemonstratetheconditionalcompilationeffect.
*/
/*Indirectoryaccess/debugoff:
*//access/debugoff/Debug.java
*packageaccess.debugoff;
*
*publicclassDebug{
*publicstaticvoiddebug(Strings){}
*}
*/
packageaccess.debug;
publicclassDebug{
publicstaticvoiddebug(Strings){
System.out.println(s);
}
}
(NO.6)//TIJ4chapterAccess,Exercise9,page233
/*Createinaccess/localdirectoryinyourCLASSPATH:
*//access/local/PackagedClass.java
*packageaccess.local;
*
*classPackagedClass{
*publicPackagedClass(){
*System.out.println("Creatingapackagedclass");
*}
*}
*//Then,inanotherdirectrorycreatethefilebelowandexplainwhycompiler
*generateserror.WouldmakingForeignclasspartofaccess.localchangeanything?
*/
//access/foreign/Foreign.java
packageaccess.foreign;
importaccess.local.*;
publicclassForeign{
publicstaticvoidmain(String[]args){
PackagedClasspc=newPackagedClass();
}
}
/*Compilererrorbecause:
PackagedClassinnotpublic,sonoaccessoutsideof
*package.MovingForeigntolocalwouldallowpackageaccesstoPackagedClass.
*/
(NO.7)//MakeWidget.java
//TIJ4ChapterAccess,Exercise7,page230
/*CreatethelibraryaccordingtothecodefragmentsdescribingaccessandWidget.
*CreateaWidgetinaclassthatisnotpartoftheaccesspackage.
*/
/*inaccesspackage:
*//access/Widget.java
*packageaccess;
*
*publicclassWidget{
*publicWidget(){System.out.println("Widget()");}
*}
*/
importaccess.*;
publicclassMakeWidget{
publicstaticvoidmain(String[]args){
Widgetw=newWidget();
}
}
(NO.8)//access/ProtectedData.java
//TIJ4ChapterAccess,Exercise6,page228
/*Createaclasswithprotecteddata.Createasecondclassinthesamefilewith
*amethodthatmanipulatestheprotecteddatainthefirstclass.
*/
classSomeData{
protectedinta=13;
}
classDataChanger{
staticvoidchange(SomeDatasd,inti){sd.a=i;}
}
publicclassProtectedData{
publicstaticvoidmain(String[]args){
SomeDatax=newSomeData();
System.out.println(x.a);
DataChanger.change(x,99);
System.out.println(x.a);
}
}
(NO.9)//access/UnpackagedMyClass.java
//TIJ4ChapterAccess,Exercise1,page217
//Createaclassinapackage.Createaninstanceofyourclassoutsideofthatpackage.
/*Inanotherdirectory:
*//access/mypackage/MyPackagedClass.java
*
*packageaccess.mypackage;
*
*publicclassMyPackagedClass{
*publicMyPackagedClass(){System.out.println("MyPackagedClass()");}
*}
*/
publicclassUnpackagedMyClass{
publicstaticvoidmain(String[]args){
access.mypackage.MyPackagedClassm=newaccess.mypackage.MyPackagedClass();
}
}
//arrays/ArrayOfGenerics10.java
//TIJ4ChapterArrays,Exercise10,page762
//ModifyArrayOfGeneric.javatousecontainersinsteadofarrays.
//Showthatyoucaneliminatethecompile-timewarnings.
importjava.util.*;
publicclassArrayOfGenerics10{
@SuppressWarnings("unchecked")
publicstaticvoidmain(String[]args){
List>lls=newArrayList>();
Listl=newArrayList();
//lls=(List>)l;//error:
inconvertibletypes
lls.add(newArrayList());
List
//lo=lls;//error:
incompatibletypes
//Compile-timewarningeliminated:
List>llb=
newArrayList>();
for(inti=0;i<10;i++){
llb.add(newArrayList());
for(intj=0;j<2;j++)
llb.get(i).add(newBerylliumSphere());
}
System.out.println(llb);
}
}
//arrays/ContainerComparison15.java
//TIJ4ChapterArrays,Exercise15,page775
//ModifyContainerComparison.javabycreatingaGeneratorfor
//BerylliumSphere,andchangemain()tousethatGenerator
//withGenerated.array().
importnet.mindview.util.*;
importjava.util.*;
importstaticnet.mindview.util.Print.*;
classBerylliumSphereGeneratorimplementsGenerator{
publicBerylliumSpherenext(){
returnnewBerylliumSphere();
}
}
publicclassContainerComparison15{
publicstaticvoidmain(String[]args){
BerylliumSphere[]spheres=newBerylliumSphere[5];
BerylliumSphereGeneratorbsg=newBerylliumSphereGenerator();
Generated.array(spheres,bsg);
print(Arrays.toString(spheres));
print(spheres[4]);
ListsphereList=
newArrayList();
for(inti=0;i<5;i++)
sphereList.add(bsg.next());
print(sphereList);
print(sphereList.get(4));
}
}
//arrays/Ex1.java
//TIJ4ChapterArrays,Exercise1,page752
/*CreateamethodthattakesanarrayofBerylliumSphereasanargument.
*Callthemethod,creatingtheargumentdynamically.Demonstratethat
*ordinaryaggregatearrayintitializationdoesn'tworkinthiscase.
*Discovertheonlysituationswhereordinaryaggregatearrayinitialization
*works,andwheredynamicaggregatearrayinitializationisredundant.
*/
importjava.util.*;
importstaticnet.mindview.util.Print.*;
classA{publicStringtoString(){return"AObject";}}
publicclassEx1{
//MethodthattakesBerylliumSphere[]asargument
//andprintstheargumentasarrayelementsandasListorString:
publicstaticvoidtest(BerylliumSphere[]a){
print(Arrays.asList(a));
}
//Genericversion:
publicstaticvoidtest(T[]t){
print(Arrays.asList(t));
}
//intversion:
publicstaticvoidte