《Java 2实用教程》(第5版)(清华大学出版社)作者:张跃平、耿祥义习题答案详解
-
**此答案与详解是本人做作业时所写部分答案,如有错误之处请指出 **
习题2
1.问答题
(3) 逻辑类型,boolean
整数类型,int,byte,short,long
字符类型,char
浮点类型,float,double
(4) float类型,常量的后面必须要有后缀f或F
double类型,后面可以有后缀d或D,允许省略
(5) 可以使用length,数组名.length的值就是数组中元素的个数。对于二维数组,数组名.length的值是它含有的一维数组的个数。
2.选择题
(1) C,标识符不能是ture,不能是default关键字,没有-。
(2) ADF,B选项带有小数点默认为double型,C选项未带F或f,E选项d是double的。
(3) B,从’\u0000’到’\uffff’,在Unicode表上对应的位置是0~65535。
(4) BE,B为转义字符,‘\u1234’\u只能有四位。
(5) [代码2][代码3][代码4][代码5],x为int型b是byte型,long型不可以转化为int型,double型不可以转化为long型,6.89是double型。
(6) B,没有初始化的数组值不为1。
3.阅读或调试程序
(4)
数组b的长度:4
b[0]=1
(5)
40
7
习题3
1.问答题
(2) 不可以。
(3) boolean。
(4) 不必须。
(5) 跳出while,不再进行循环。
2.选择题
(1) A,B是double型,C是int型两个精度低于int型的字符运算结果为int型,D是字符型。
(2) C,已经初始化m=10,在赋值为0会出现错误。
(3) C,x为int型。
3.阅读或调试程序
(1) 你,苹,甜
你在Unicode中的位置数字大于A,所以x输出为你,y输出为苹,z又被赋为甜。
(2) Jeep好好
i=1,输出J,i=2,输出e,跳出switch,再次进入for,输出e,i=3,输出p,i=4,输出好,i自增1,输出好。
(3) x=-5,y=-1
循环六次x=-5,y从0再自减1,变为-1。
习题4
1.问答题
(1) 封装性、继承、多态
(2)
1.如果类名使用拉丁字母,那么名字的首字母使用大写字母,如Hello等。
2.类名最好容易识别、见名知意。当类名由几个“单词”符合而成时,每个首字母应大写,如ChinaMade、AmericanVehicle、WaterLake等(驼峰习惯)。
(3) 变量:
1.一行只声明一个变量。利于给代码增添注释。
2.变量的名字除了符合标识符规定外,名字的首单词的首字母使用小写,如果变量的名字由多个单词组成,从第2个单词开始的单词的首字母使用大写(驼峰习惯)。
3.变量名字见名知意,避免使用诸如m1、n1等作为变量的名字,尤其是名字中不要讲小写的英文字母l与数字1相邻,很难区分。
方法:必须符合标识符规定,给方法命名的习惯和给变量命名的习惯相同。
(4) 对象的属性
(5) 对象的行为
(6) 对类创建的对象进行初始化,没有类型。
(7) 在new运算符之后。
(8) 重载的意思是一个类中可以有多个方法具有相同的名字,但这些方法的参数个数或类型不同。构造函数也可以重载。
(9) 实例方法可以操作类变量。类方法不可以操作实例变量,这是因为在类创建对象之前,实例变量成员还没有分配内存。
(10) 不可以,在创建实例后,类中的实例方法才有了入口地址。
(11) 类变量是与类相关联的变量,改变其中一个对象的这个类变量就同时改变了其他对象的这个类变量,类变量可以通过某个对象访问也可以直接通过类名访问。
实例变量与对象相关联,不同对象的实例变量互补相同,分配不同的内存空间,对象的实例变量可以通过该对象访问,但不能使用类名访问。
(12) this关键字就代表正在调用该方法当前对象,不可以出现在类方法中。因为类方法就是方便在不创建对象的情况下调用,所以不能使用this。
2.选择题
(1) B,java源文件类可以放在一起也可以不放在一起,A错。有多个类必须有一个主类,有main方法才有入口可以运行,B对。不是必须含有主类,有些小程序不需要主类,C错。也不是必须声明为public,D错。
(2) D,局部变量和成员变量的名字可以相同用this关键字来区分,A错。在类中写方法时,如果参数列表的名称和已经声明的变量的名称相同时,类生成的对象调用此方法并传入新的参数,这时方法会优先读取类中已经声明的同名变量,这样对象调用方法不管传入什么参数一直都显示的是类中的变量。同一作用域下不允许有相同类型且同名的变量。方法的参数和方法中声明的变量是同在该方法的作用域中的,B错。成员变量有默认值,局部变量没有,C错,D对。
(3) D,只有一个有参构造方法,A错,C错。int Hello()方法没有错误,B错。Hello只有一个构造方法,构造方法是没有类型的,构造方法名必须和类名相同,故hello()不是构造方法,但他又没有类型,不符合普通方法的规定,所以编译会发生错误,D对。
(4) D,有两个构造方法互为重载,A对。有两个Dog()方法互为重载,B对。两个构造方法均有参数,C对。D错。
(5) CD,子类可能会破坏封装性,同包中都可以访问,protected常用来修饰方法,C错。类只可以由public或默认修饰,D错。
(6) 【代码1】、【代码4】,x为Tom类中的私有数据成员不可以在类A中被访问,f()为私有方法不可以在A中调用。
(7) 【代码4】,没有为局部变量m赋初值不可以进行运算。
3.阅读程序
(1)
【代码1】1 ,新建的redFish对象为Fish类初始weight为1。
【代码2】 121 ,在调用Lake类中的foodFish()方法,为其传值增加了120,red.weight变为121。
【代码3】121 ,redFish就是Lake中新建的fish,所以weight也为121。
(2) sum=-100,this关键字的用法,x传值-100,y为初始值200-200后为0,相加为-100。
(1) 27,类变量是被所有创建的对象共享的,在b1.getSum累加得出6后,b2.getSum为6+1+2+3+4+5=27。
(1) 【代码1】100,【代码2】20.0,函数的重载第一个调用两个参数都为int的方法,第二个调用参数为int和double的方法。
(5) 在给参数传值个数不定时,可以使用可变参数。
(6) 主类的静态块最先执行,然后是其他类,然后是main方法中创建对象之后。
习题5
1.问答题
(1) 不能。
(2) 是。
(3) 不能。
(4) 在子类中定义一个新的与要隐藏的成员变量同名的变量。
(5) 要与父类的方法名,参数类型个数都相同,返回类型与父类相同或者是父类的方法的类型的子类型。重写方法的目的是隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。
(6) final修饰的方法是最终方法,不可以被子类重写。
(7) 抽象类。
(8) 上转型对象只是引用的类型是父类型,对象实例还是子类。“转型”后的对象只能访问父类定义的方法或是变量。
(9) 各自重写与父类的同名的方法,实现各自类似但不同的行为。
**(10)**面向抽象编程目的是为了应对用户需求的变化,核心是让类中每种可能的变化对应地交给抽象类的一个子类类去负责,从而让该类的设计者不去关心具体实现。
**2.**选择题
(1) C,子类不可以覆盖和继承父类的构造方法,只能调用,A错。abstract类的子类可以说抽象类,B错。子类重写或新增的方法要通过super关键字访问被子类隐藏的变量,D错。
(2) D,static会使方法成为整个类所公有的方法,要有具体的的实现,而abstract修饰的抽象类,只有声明,在子类中具体实现,D对。
(3) CD,money为Father类私有数据成员不可以在类E中访问,子类中覆盖的height类型为int型,不可以赋float型的数值,C、D错。
(4) D。
(5) B,子类不可以重写父类的静态方法,但可以继承,如果在子类中写了与父类同名的静态方法,它与父类中的静态方法是没有任何关系的两个完全不同的方法,B错。
(6) B,不可以用abstract和static同时修饰一个方法,B错。
(7) D,子类重写的方法修饰要大于父类。
(8) B,A可以为重写的方法,C、D可以是子类新定义的方法,B会提示重新的方法与父类返回类型不同,B错。
(9) A,子类B不显示的调用父类的构造方法,默认调用无参的构造方法,父类中没有无参的构造方法就会出错。
3.阅读程序
(1)
【代码1】 15.0 ,调用子类新定义的方法。
【代码2】 8.0 ,调用从父类继承的方法。
(2)
【代码1】 11 ,调用类A中的的方法。
【代码2】 110 ,上转型对象调用的一定是子类重写的方法。
(3)
【代码1】 98.0 ,调用子类重写的f()方法。
【代码2】 12 ,调用子类重写的g()方法。
【代码3】 98.0,上转型对象也是调用子类重写的f()方法。
【代码4】 9 ,上转型调用父类的静态方法,子类不可能重写父类的静态方法,与子类中的而静态方法没有任何关系。
(4)
【代码1】 120,上转型对象访问的是被隐藏的m。
【代码2】 120,上转型对象调用的一定是子类重写的方法,m也是b.m=20。
【代码3】 -100,子类继承的seeM()方法操作的是被子类隐藏的m。
习题6
1.问答题
(1) 不能,默认public abstract final修饰。
(2) 可以,默认public abstract修饰。
(3) 可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用接口中的方法。
(4) 不可以。
(5) 可以。
2.选择题
(1) D,一个类可以实现多个接口,A错。抽象类不需要实现接口中的全部方法,B错。必须全部重写,C错。
(2) AB,接口中的方法初始化为public abstract final,A错。不可以用abstract和static同时修饰一个方法,B错。
(3) A,要显示的声明public,B错。返回类型与接口中方法不同,C错。非抽象不可以有抽象方法,D错。
3.阅读程序
(1)
【代码1】 15.0,接口回调,调用类B中实现的方法。
【代码2】 8,调用类B中g()方法。
(2)
【代码1】 18,接口回调,调用类B中add()的方法。
【代码2】 15,调用类B中add()方法。
习题7
1.问答题
(1) 有效
(2) 可以
(3) 不可以
(4) 是
2.选择题
(1) C,内部类中不可以声明静态方法与变量。
(2) C,匿名类一定要实现类中的方法或接口,A错,C对。和接口有关的匿名类可以额外实现某个指定接口,B错。匿名类是内部类不可以在类体中声明静态成员变量,D错。
**3.**阅读或调试程序
(1) 大家好,祝工作顺利!
(2) p是接口变量
(3) 你好
**fine thanks
(4)**我是红牛
习题8
2.选择题
(1) A,String类在java.lang包中,B错。“abc”=="abc"的值是true,C错。D选项值是false,D错。
(2) B,float型不可转化为int,A错。int型不可以赋给byte型变量,会产生编译错误,C错。应为Float.parseFloat(“2.9”);,D错。
(3) B,strOne赋给sreTwo,输出结果为bird,B对。
(4) D,应输出game,B错。运行会异常,C错。Args[3]对应为3。
(5) C,\d代表0-9任意的数字,A对。12、567均被@替换,B对。new Date(1000)对象含有的时间是公元后1000s,C错。
3.阅读或调试程序
**(1)**苹果,没有将modify函数更改后的字符串传给main方法。
**(2)**love:Game,s[1]的字符为Love,s[4]为Game。
(3)【代码1】15 【代码2】abc我们,字母占1字节,汉字2字节,所以从0-7位置是abc我们。
**(4)**13579,从i = 0开始将13579组成新字符串并返回输出。
**(5)**9javaHello,0-9的数字任意一个java和除美元符号外的标识符至少出现1次,所以与str2是匹配的。