概述
写在最前面:
这些试题多是计算机学院的二三年级学生的Java课中的考试题目。
大家不会做很正常,不要紧张,尽量去理解即可。
期末考试的难度不会这么高,虽然我不清楚期末考试的题型。
Q15
Does the return statement in the following method cause compile errors? (代码中的return语句是否会造成编译错误?)
public static void main(String[] args) {
int max = 0;
if (max != 0)
System.out.println(max);
else
return;
}
不会。因为main method的返回值是void, 所以程序理应返回一个空值(void)。
Q22
When you invoke a method with a parameter, the value of the argument is passed to the parameter. This is referred to as _________.
可以参考群共享里,《Java核心技术(基础篇)》第9版 -- 4.5 方法参数(第121页)
Q23
static void nPrint(String message, int n)接受两个参数:
- String类型的参数
- int类型的参数
如果我们调用nPrint('a', 4)将导致_____
建议在eclipse中去实验一下。
Q24
static void nPrint(String message, int n) {
while (n > 0) {
System.out.print(message);
n --;
}
}
以nPrint("A message", 2)为例,拿出纸笔演算(模拟)一下循环的过程就可以了,比如说:
1. 第一次循环
- 开始时,n = 2
- 循环体中,打印消息,并且n --, 此时n = 1
2. ....
Q25
Analyze the following code:
public class Test {
public static void main(String[] args) {
System.out.println(xMethod(5, 500L));
}
public static int xMethod(int n, long l) {
System.out.println("int, long");
return n;
}
public static long xMethod(long n, long l) {
System.out.println("long, long");
return n;
}
}
我在stackoverflow上问了
这个问题,结果又因为duplicate question被扣了几分...
这题的解题关键是,根据3.10.1. Integer Literals:
- An integer literal is of type long if it is suffixed with an ASCII letter L or l;
- otherwise it is of type int.
所以在main方法中,xMethod的第一个实参 5 的类型是int, 第二个实参 500L 的类型是long.
因此,将调用xMethod(int n, long l)这个方法。
Q26
Analyze the following code
class Test {
public static void main(String[] args) {
System.out.println(xmethod(5));
}
public static int xmethod(int n, long t) {
System.out.println("int");
return n;
}
public static long xmethod(long n) {
System.out.println("long");
return n;
}
}
第6行先定义了一个xmethod; 第11行对其进行重载(overload).
此时程序支持对xmethod的两种调用方式:
- 传入两个整型参数(int, long), 那么将调用接受两个参数的xmethod;
- 传入一个整型参数(long), 那么将调用接受一个参数的xmethod.
根据 Q25, 我们知道第3行main method中的5的类型是int, 但xmethod的方法中,只有xmethod(long)是接受一个参数的,而恰好int可以隐式转换成更高精度的long, 所以这里的 5 被编译器转换成了 5L, 再传递给了xmethod(long).
仍不理解的同学可查阅《Java语言程序设计(基础篇)》或《Java核心技术》中,有关方法(具体来说,是方法重载)的内容.
- 《Java核心技术 基础知识》第9版,4.6.1 重载
Q27
判断下述程序的行为:
public class Test {
public static void main(String[] args) {
System.out.println(max(1, 2));
}
public static double max(int num1, double num2) {
System.out.println("max(int, double) is invoked");
if (num1 > num2)
return num1;
else
return num2;
}
public static double max(double num1, int num2) {
System.out.println("max(double, int) is invoked");
if (num1 > num2)
return num1;
else
return num2;
}
}
在Test类中,我们定义里两个max方法;
在main方法调用max(1, 2)时,我们注意到:
- 编译器可以将1转换成double, 调用max(double, int)
- 编译器可以将2转换成double, 调用max(int, double)
任何一种转换都是符合语言标准的,但当同时存在这两种合理转换时,编译器却将无法决定采用哪一种转换。
Q28
判断下述程序的行为:
public class Test {
public static void main(String[] args) {
System.out.println(m(2));
}
public static int m(int num) {
return num;
}
public static void m(int num) {
System.out.println(num);
}
}
1. 知识讲解:方法的重载是只能通过不同的
方法签名(方法签名包括
方法名和
参数列表)实现的,返回值
不属于方法签名的一部分。
2. 本题解析:本题中的两个m方法都拥有相同的参数列表(亦即接受一个int参数),编译器将认为这是对m方法的重定义(re-definition),会产生编译错误。
3. 参考文献:《Java核心技术 基础知识》第9版,4.6.1 重载,能理解书中的这一页,就可以理解什么是方法重载了。
Q32
感觉这题要求也偏高了。根据Oracle Java doc, Math.random()返回值的值域是 [0, 1), 亦即一个左闭右开区间。
最后
以上就是秀丽悟空为你收集整理的[Java] 作业4答疑的全部内容,希望文章能够帮你解决[Java] 作业4答疑所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复