📄 scjp认证套题解析之二.htm
字号:
<br> A. int addValue( int a, int b ){// do something...}
<br> B. public void addValue (){// do something...}
<br> C. public int addValue( int a ){// do something...}
<br> D. public int addValue( int a, int b )throws MyException
<br> {//do something...}
<br> (bc)
<br> 题目:哪些方法可以加入类Child中。
<br> 此题涉及方法重载(overload),方法重写(override)以及类派生时方法重写的规则。方法重载的规则是:一、调用声明的参数列表必须足够不同以便可以无歧义的决定调用合适的重载方法;二、返回值可以不同,但是不能是重载时唯一的不同点(这点和c++中不同,c++中返回类型必须一致)。方法重写发生在类继承时,子类可以重写一个父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则就是重载,java中方法重写的一个重要而且容易被忽略的规则是重写的方法的访问权限不能比被重写的方法的访问权限低!重写的另一个规则是重写的方法不能比被重写的方法抛弃(throws)更多种类的异常,其抛弃的异常只能少,或者是其子类,不能以抛弃异常的个数来判断种类,而应该是异常类层次结果上的种类。此题中答案a的错误就是重写的访问权限比被重写的方法的低,而b,c都属于重载,d的错误在于比被重写的方法抛弃了更多种类的异常。
<br>
<br> 36、A member variable defined in a class can be accessed
<br> only by the classes in the same package. Which modifier
<br> should be used to obtain the access control?
<br> A. private
<br> B. no modifier
<br> C. public
<br> D. protected
<br> (b)
<br> 题目:一个类中定义的成员变量只能被同一包中的类访问。下面的哪些修饰符可以获得需要的访问控制。
<br> 参看前面的题目中的叙述。
<br>
<br> 37、A public member vairable called MAX_LENGTH which is
<br> int type, the value of the variable remains constant
<br> value 100. Use a short statement to define the variable.
<br> A. public int MAX_LENGTH=100;
<br> B. final int MAX_LENGTH=100;
<br> C. final public int MAX_LENGTH=100;
<br> D. public final int MAX_LENGTH=100.
<br> (d)
<br> 题目:共有成员变量MAX_LENGTH是一个int型值,变量的值保持常数值100。使用一个短声明定义这个变量。
<br> Java中共有变量使用public定义,常量变量使用final,另外注意的是修饰符的顺序,一个最完整的修饰是public
<br> static final int
<br> varial_a=100;这个顺序不能错,这和c++中也是不同的。而答案c恰恰错在修饰符的顺序上。
<br>
<br> 38、Which expressions are correct to declare an array of
<br> 10 String objects?
<br> A. char str[];
<br> B. char str[][];
<br> C. String str[];
<br> D. String str[10];
<br> (c)
<br> 题目:哪些表达式是声明一个含有10个String对象的数组。
<br> 严格来说这个题目没有给出一个正确的答案,唯一比较正确的是c,而完全满足题目要求的应该是:String
<br> str[]=new String[10];
<br> 注意答案d的形式是不对的,这和c++也是不同的。
<br>
<br> 39、Which fragments are correct in Java source file?
<br> A. package testpackage;
<br> public class Test{//do something...}
<br> B. import java.io.*;
<br> package testpackage;
<br> public class Test{// do something...}
<br> C. import java.io.*;
<br> class Person{// do something...}
<br> public class Test{// do something...}
<br> D. import java.io.*;
<br> import java.awt.*;
<br> public class Test{// do something...}
<br> (acd)
<br> 题目:下面的那个java源文件代码片断是对的。
<br> Java中的package语句必须是源文件中除去说明以外的第一条语句,导入包语句可以有几个,但是必须位于package语句之后,其它类定义之前,一个源文件中可以有几个类,但最多只能有一个是public的,如果有,则源文件的文件名必须和该类的类名相同。
<br>
<br> 40:
<br> String s= "hello";
<br> String t = "hello";
<br> char c[] = {´h´,´e´,´l´,´l´,´o´} ;
<br> Which return true?
<br> A. s.equals(t);
<br> B. t.equals(c);
<br> C. s==t;
<br> D. t.equals(new String("hello"));
<br> E. t==c.
<br> (acd)
<br> 题目:哪些返回true。
<br> 这个在前面第10题的equals()方法和==操作符的讨论中论述过。==操作符比较的是操作符两端的操作数是否是同一个对象,而String的equals()方法比较的是两个String对象的内容是否一样,其参数是一个String对象时才有可能返回true,其它对象都返回假。需要指出的是由于s和t并非使用new创建的,他们指向内存池中的同一个字符串常量,因此其地址实际上是相同的(这个可以从反编译一个简单的测试程序的结果得到,限于篇幅不列出测试代码和反编译的分析),因此答案c也是正确的。
<br>
<br>
<br> 版权声明 本篇文章对您是否有帮助? 投票: 是 否 投票结果: 6
<br> 1
<br>
<br>
<br>
<br> 作者其它文章:
<br> 在linux下使jsvc启动的tomcat可以使用-server选项
<br> 破除java神话之三:原子操作都是线程安全的
<br> 命令队列的一个通用标准实现
<br> 转义正则表达式字符
<br> 什么是模式?什么是框架?(简述)
<br> 作者全部文章
<br>
<br>
<br> 评论人:simazhuo 参与分: 3466 专家分: 60 来自: 四川成都
<br> 发表时间: 2003-2-12 下午11:42
<br> 21题的题目应是:“下面的哪些赋值语句是不对的。”
<br>
<br>
<br> 评论人:cherami 参与分: 458201 专家分: 11650 发表时间:
<br> 2003-2-13 下午12:50
<br> 已经修改。
<br> 谢谢!
<br>
<br> 评论人:benne 参与分: 18 专家分: 0 发表时间: 2003-2-22
<br> 上午11:26
<br> 关于第31题与第37题?!
<br> 在第31题中:
<br> 题目给出的源码第5)行如下:
<br> 5) else if ((str != null) & (str.length() < 5)) {
<br> 经我在JAVA2 SDK1.4测试编译与运行正常,&运算符同样可以做
<br> 逻辑运算符使用,不同的是&&是短路逻辑与!
<br> 原题经编译,原题有compiler error!的是第2)与第5)行,
<br> 即(str != null),
<br> 所以答案应是B、C;
<br>
<br> 在第37题中:先项C,D如下:
<br> C. final public int MAX_LENGTH=100;
<br> D. public final int MAX_LENGTH=100.
<br> 经SDK1.4编译,C、D都是合法是,final,public与顺序无关!
<br> 所以答案应是C、D;
<br>
<br>
<br> 评论人:cherami 参与分: 458201 专家分: 11650 发表时间:
<br> 2003-2-22 下午1:49
<br> 第31题的答案经确认没有问题,该代码片段没有编译错误,错的还是第5行的那个&,这个错误是程序的逻辑错误,不是编译错误。但是后面的解说确实还是存在问题。我将进行修正。
<br>
<br>
<br> 评论人:cherami 参与分: 458201 专家分: 11650 发表时间:
<br> 2003-2-22 下午1:51
<br> 第37题在现在的JDK1.3.1和JDK1.4.0上测试没有问题,都是正确答案。但是我记得原来老版本的1.2的是有错误的。这个我会最后再验证一下。
<br>
<br>
<br> 评论人:benne 参与分: 18 专家分: 0 发表时间: 2003-2-24
<br> 上午10:21
<br> 再论31题:
<br> 1) String str = null;
<br> 2) if ((str != null) && (str.length() > 10)) {
<br> 3) System.out.println("more than 10");
<br> 4) }
<br> 5) else if ((str != null) & (str.length() < 5)) {
<br> 6) System.out.println("less than 5");
<br> 7) }
<br> 8) else { System.out.println("end"); }
<br> 的确本题答案是:C。
<br> 真正的原因如下:
<br> (1)&&,||与&,|都可为逻辑运算,后者还可为位运算;
<br> 因此“第5)行中&不能为逻辑运算符”不是正确的解释!
<br> (2)正确原因是:str=null,不能使用str.length()!!
<br> 第2)没有运行错,是因为&&运算符是“短路逻辑运算符”,
<br> 当if ((str != null) && (str.length() > 10))
<br> 中,(str!=null)结果为false,
<br> 所以能够判定整个if()为false,不用在计算(str.length()>10)了!
<br> 不信,你试一试if ((str == null) && (str.length()
<br> > 10)) 也会有
<br> 运行错!
<br> (3)同上述解释,可知:
<br> 第5)行 else if ((str != null) & (str.length()
<br> < 5)) {
<br> 错误在(str.length() < 5)) 而不在&!
<br>
<br>
<br> 评论人:cherami 参与分: 458201 专家分: 11650 发表时间:
<br> 2003-2-24 下午12:56
<br> to benne:
<br> 我原来的解释确实有问题。
<br> 你给出的解释比较合理,第五句如下:
<br> else if ((str != null) & (str.length() < 5)) {
<br> 如果是正常的&&操作符的话,str=null时是不会执行str.length(),而现在变成了&,因此即使str=null时也会执行str.length()而出现空指针异常。
<br> 谢谢。^_^
<br>
<br>
<br> 评论人:wolf1030 参与分: 6 专家分: 0 发表时间: 2003-3-19
<br> 下午2:51
<br> 不太明白26题的答案d为什么是对的,能不能再讲详细点?谢谢
<br>
<br> 评论人:cherami 参与分: 458201 专家分: 11650 发表时间:
<br> 2003-5-23 上午9:45
<br> 第23题的答案反了。:(
<br> 修改了第35题的重载规则的第一点的说明。
</td>
</tr>
</table>
</TR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -