




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
易考吧试题研究中心 SCJP模拟考试一及答案1. What will happen when you attempt to compile and run the following code?(Assume that the code is compiled and run with assertions enabled.)public class AssertTestpublic void methodA(int i)assert i = 0 : methodB();System.out.println(i);public void methodB() /无返回值System.out.println(The value must not be negative);public static void main(String args)AssertTest test = new AssertTest();test.methodA(-10); A.it will print -10B.it will result in AssertionError showing the message-“the value must not be negative”.C.the code will not compile.D.None of these.C is correct. An assert statement can take any one of these two forms -assert Expression1; assert Expression1 : Expression2;Note that, in the second form; the second part of the statement must be an expression- Expression2. In this code, the methodB() returns void, which is not an expression and hence it results in a compile time error. The code will compile if methodB() returns any value such as int, String etc. Also, in both forms of the assert statement, Expression1 must have type boolean or a compile-time error occurs.2. What will happen when you attempt to compile and run the following code?public class Staticstaticint x = 5; /在static内有效static int x,y; /初始化为0public static void main(String args) x-; /-1myMethod(); System.out.println(x + y + +x);public static void myMethod()y = x+ + +x; /y=-1+1 x=1A.compiletime errorB.prints: 1C.prints: 2D.prints: 3E.prints: 7F.prints: 8D is the correct choice. The above code will not give any compilation error. Note that Static is a valid class name. Thus choice A is incorrect.In the above code, on execution, first the static variables (x and y) will be initialized to 0. Then static block will be called and finally main() method will be called. The execution of static block will have no effect on the output as it declares a new variable (int x).The first statement inside main (x-) will result in x to be -1. After that myMethod() will be executed. The statement y = x+ + +x; will be evaluated to y = -1 + 1 and x will become 1. In case the statement be y =+x + +x, it would be evaluated to y = 0 + 1 and x would become 1. Finally when System.out is executed x + y + +x will be evaluated to 1 + 0 + 2 which result in 3 as the output. Thus choice D is correct.3. Given the following code, what will be the output?class Valuepublic int i = 15;public class Testpublic static void main(String argv) Test t = new Test();t.first(); public void first() int i = 5; Value v = new Value();v.i = 25;second(v, i); System.out.println(v.i);public void second(Value v, int i)i = 0; v.i = 20;Value val = new Value(); v = val; System.out.println(v.i + + i);A.15 0 20B.15 0 15C.20 0 20D.0 15 20A is correct. When we pass references in Java what actually gets passed is the value of that reference (i.e. memory address of the object being referenced and not the actual object referenced by that reference) and it gets passed as value (i.e a copy of the reference is made). Now when we make changes to the object referenced by that reference it reflects on that object even outside of the method being called but any changes made to the reference itself is not reflected on that reference outside of the method which is called. In the example above when the reference v is passed from method first() to second() the value of v is passed. When we assign the value val to v it is valid only inside the method second() and thus inside the method second() what gets printed is 15 (initial value of i in the object referenced by val), then a blank space and then 0 (value of local variable i). After this when we return to the method first() v actually refers to the same object to which it was referring before the method second() was called, but one thing should be noted here that the value of i in that object (referred by v inside the method first() was changed to 20 in the method second() and this change does reflect even outside the method second(), hence 20 gets printed in the method first(). Thus overall output of the code in consideration is15 0204. What will happen when you attempt to compile and run the following code?class MyParent int x, y;MyParent(int x, int y)this.x = x;this.y = y;public int addMe(int x, int y)return this.x + x + y + this.y;public int addMe(MyParent myPar)return addMe(myPar.x, myPar.y);class MyChild extends MyParentint z;MyChild (int x, int y, int z)super(x,y);this.z = z;public int addMe(int x, int y, int z)return this.x + x + this.y + y + this.z + z;public int addMe(MyChild myChi)return addMe(myChi.x, myChi.y, myChi.z);public int addMe(int x, int y)return this.x + x + this.y + y;public class MySomeOnepublic static void main(String args)MyChild myChi = new MyChild(10, 20, 30);MyParent myPar = new MyParent(10, 20);int x = myChi.addMe(10, 20, 30);int y = myChi.addMe(myChi);int z = myPar.addMe(myPar);System.out.println(x + y + z);A.300B.240C.120D.180E.compile errorF.none of the aboveA is the correct choice. In the above code, MyChild class overrides the addMe(int x, int y) method of the MyParent class. And in both the MyChild and MyParent class, addMe() method is overloaded. There is no compilation error anywhere in the above code. On execution, first, the object of MyChild class will be constructed. Please note that there is a super() call from the constructor of MyChild class, which will call the constructor of MyParent class. This will cause the value of z variable of MyChild class to be 30 and x, y variables of MyParent class will become 10 and 20 respectively. The next statement will again call the constructor of MyParent class with same x and y values. This is followed by execution of addMe() method of MyChild class with x as 10, y as 20 and z as 30. Also x and y are inherited by MyChild class from the MyParent class. Thus in the addMe() method of the MyChild class, the value of this.x will be 10, this.y will be 20 and this.z will be 30. The return value of this method will be 10 + 10 + 20 + 20 + 30 + 30, which is equal to 120. Thus x will become 120. This is followed by the invocation of the other addMe() method which takes object reference of the MyChild class. From this method, the method which was called earlier is invoked. This call is exactly the same as the earlier one. Thus the value of y will also be 120 like x. Now the addMe() method of MyParent class is invoked. This method invokes another addMe() method of the same class. Its equivalent to the invocation of addMe(int x, int y) method with x as 10 and y as 20. Also the value of instance variables x and y of My Parent class is 10 and 20 respectively. The value of z will be evaluated to 10 + 10 + 20 + 20, which is equal to 60. Thus the value of x, y and z after all the invocations will be 120, 120 and 60 respectively. As a result of this finally, 120 + 120 + 60 which is equal to 300 will be printed. Thus A is the correct choice.5. The class AssertionError has is -a relationship with these classes (choose two)A.RuntimeExceptionB.ErrorC.VirtualMachineErrorD.IllegalAccessExceptionE.ThrowableB and E are correct. The class AssertionError is an Error, which denotes an “incorrect condition” as opposed to an “unusual condition” (Exception). Since, the class Error descends from Throwable, AssertionError also has “is-a” relationship with Throwable. Here is the hierarchy java.lang.Object|+-java.lang.Throwable | +-java.lang.Error Exception | | +-java.lang.AssertionError +RuntimeException IOExceptionWant to know more?You can find more information about this as an answer to the question - “Why is AssertionError a subclass of Error rather than RuntimeException?” at - /j2se/1.4/docs/guide/lang/assert.html #design-faq-error6. What will be the result of executing the following code?1. boolean a = true;2. boolean b = false;3. boolean c = true;4. if (a = true)5. if (b = true)6. if (c = true) System.out.println(Some things are true in this world);7. else System.out.println(Nothing is true in this world!);8. else if (a & (b = c) /这里是赋值,不是比较System.out.println(Its too confusing to tell what is true and what is false);9. else System.out.println(Hey this wont compile);A.The code wont compile.B.“some things are true in this world” will be printedC.“hey this wont compile” will be printedD.None of theseD is correct. This is a very good question to test the concepts of execution flow in case of if conditions. The rule for attaching else statements with if conditions is the same as attaching close brackets with open brackets. A close bracket attaches with the closest open bracket, which is not already closed. Similarly an else statement attaches with the closest if statement, which doesnt have an else statement already, attached to it. So the else statement at line 7 attaches to the if statement at line 6. The else statement at line 8 attaches to the if statement at line 5. The else statement at line 9 attaches to the if statement at line 8. Now lets look at the execution. At line 4 since a is equal to true the execution falls to line 5. At line 5 since b is not true the execution goes to the corresponding else statement at line 8. Now it evaluates the condition inside the if statement. Please note here that an assignment statement also has a value equal to the value being assigned, hence (b = c) evaluates to true and subsequently a & (b = c) evaluates to true and Its too confusing to tell what is true and what is false will be printed. Hence the correct answer is choice D.7. What will happen when you attempt to compile and run the following code?interface MyInterfacepublic class MyInstanceTest implements MyInterfacestatic String s;public static void main(String args)MyInstanceTest t = new MyInstanceTest();if(t instanceof MyInterface)System.out.println(I am true interface);else System.out.println(I am false interface);if(s instanceof String)System.out.println(I am true String);else System.out.println(I am false String);A.compile time errorB.runtime errorC.prints: “I am true interface” followed by “I am true String”D.prints: “I am false interface” followed by “I am false String”E.prints: “I am true interface” followed by “I am false String”F.prints: “I am false interface” followed by “I am true String”E is the correct choice. The instanceof operator tests the class of an object at runtime. It returns true if the class of the left-hand argument is the same as, or is some subclass of, the class specified by the right-hand operand. The right-hand operand may equally well be an interface. In such a case, the test determines if the object at left-hand argument implements the specified interface.In the above case there will not be any compiletime or runtime error. The result of t instance of MyInterface will be true as t is the object of MyInstanceTest class which implements the MyInstance interface. But the result of s instanceof String will be false as s refers to null. Thus the output of the above program will be : I am true interface followed by I am false String. Thus choice E is correct and others are incorrect.8. What results from attempting to compile and run the following code?public class Ternarypublic static void main(String args)int a = 5;System.out.println(Value is - + (a 5) ? 9.0 : 9);A.print:Value is -9B.print:Value is -5C.Compilation errorD.None of theseD is correct. The code compiles successfully. In this code the optional value for the ternary operator, 9.0(a double) and 9(an int) are of different types. The result of a ternary operator must be determined at the compile time, and here the type chosen using the rules of promotion for binary operands, is double. Since the result is a double, the output value is printed in a floating point format. The choice of which value to be printed is made on the basis of the result of the comparison a 5 which results in false, hence the variable a takes the second of the two possible values, which is 9, but because the result type is promoted to double, the output value is actually written as 9.0, rather than the more obvious 9, hence D is correct.9. In the following pieces of code, A and D will compile without any error. True/False?A: StringBuffer sb1 = abcd; B: Boolean b = new Boolean(abcd); C: byte b = 255; D: int x = 0x1234; E: float fl = 1.2;TrueFalseThe code segments B and D will compile without any error. A is not a valid way to construct a StringBuffer, you need to creat a StringBuffer object using new. B is a valid construction of a Boolean (any string other than true or false to the Boolean constructor will result in a Boolean with a value of false). C will fail to compile because the valid range for a byte is -128 to +127 (ie, 8 bits,signed). D is correct, 0x1234 is the hexadecimal representation in java. E fails to compile because the compiler interprets 1.2 as a double being assigned to a float (down-casting), which is not valid. You either need an explicit cast (as in (float)1.2) or 1.2f, to indicate a float.10. Considering the following code, Which variables may be referenced correctly at line 12?1.public class Outer2.3.public int a = 1;4.private int b = 2;5.public void method(final int c)6.7.int d = 3;8.class Inner9.10.private void iMethod(int e)11. 12. 6.a b c d eA, B, C and E are correct. Since Inner is not a static inner class, it has a reference to an enclosing object, and all the variables of that object are accessible. Therefore A and B are correct, even if b is private. Variables in the enclosing method are only accessible when they are marked as final hence c is accessible but not d. E is obviously correct as it is a parameter to the method containing line 12 itself.11. What will be the result of executing the following code?public static void main(String args) char digit = a; for (int i = 0; i 10; i+) switch (digit) case x : int j = 0; System.out.println(j); default : int j = 100; System.out.println(j); int i = j; System.out.println(i);A.100 will be printed 11 times.B.100 will be printed 10 times and then there will be a runtime exceptionC.The code will not compile because the variable i cannot be declared twice within the mani() method.D.The code will not compile because the variable j cannot be declared twice within the switch statement.E.None of these.E is correct. The code will not compile. There is no problem with the declaration of another variable i as both the variables are in disjoint blocks (first one is inside the for loop and its scope ends with the for loop, whereas the second is outside the for loop) and, therefore, different scopes and hence valid. The problem is with the variable j. The two declarations of the variable j are perfectly valid as they are in disjoint blocks and, therefore, different scopes. The error is that both the declarations of j are not available outside the case or default statement, whereas we are trying to assign it to the variable i. Therefore the compiler objects and reports variable j not found.12. Which of the following collection classes from java.util package are Thread safe?A.VectorB.ArrayList /与Vector类似,只是不同步C.HashMapD.HashtableA and D are correct. Vector and Hashtable are two collection classes that are inherently thread safe or synchronized; whereas, the classes ArrayList and HashMap are unsynchronized and must be wrapped via Collections.SynchronizedList or Collections.synchronizedMap if synchronization is desired.13. What will happen when you attempt to compile and run the following code?class MyThread extends Threadpublic void run()System.out.println(MyThread: run();public void start()System.out.println(MyThread: start();class MyRunnable implements Runnablepublic void run()System.out.println(MyRunnable: run();public void start()System.out.println(MyRunnable: start();public class MyTest public static void main(String args)MyThread myThread = new MyThread();MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);myThread.start();thread.start();A.prints: MyThread: start() followed by MyRunnable: run()B.prints: MyThread: run() followed by MyRunnable: start()C.prints: MyThread: start() followed by MyRunnable: start()D.prints: MyThread: run() followed by MyRunnable: run()E.compile time errorF.None of the aboveA is the correct choice. In the above code there is not any compilation error. Thus choice E is incorrect. Inside main() method, objects of MyThread and MyRunnable class are created followed by creation of Thread with object of MyRunnable class. Note that MyThread class extends Thread class and overrides the start() method of the Thread class. Thus on execution of myThread.start() statement, the start() method of the MyThread class will be executed and as a result MyThread:start() will be printed. Had the start() method not there in MyThread class, the start() method of the Th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 勇气战胜困难的钥匙记事作文6篇
- 2025安徽固镇县连城镇招聘村级后备人才3人考前自测高频考点模拟试题附答案详解(突破训练)
- 2025-2026学年黑龙江省鸡西市某中学高二上学期开学考试英语试卷(解析版)
- 2025年河北衡水市第三人民医院招聘见习人员49名考前自测高频考点模拟试题及答案详解(各地真题)
- 2025黑龙江齐齐哈尔市富裕县富海镇招聘公益性岗位人员2人模拟试卷及答案详解(考点梳理)
- 2025年河北外国语学院人才招聘考前自测高频考点模拟试题及答案详解参考
- 2025贵州省计量测试院参加第十三届贵州人才博览会引才4人模拟试卷及答案详解(有一套)
- 2025河南省水利厅厅属事业单位招聘47人模拟试卷及答案详解一套
- 江苏省常州市2024-2025学年高三上学期1月期末质量调研地理试题(解析版)
- 2025湖北襄阳市中医医院(襄阳市中医药研究所)招聘急需专业技术人才55人考前自测高频考点模拟试题附答案详解(模拟题)
- 初中九年级化学课件元素周期表“衡水赛”一等奖
- 投标货物质量标准的详细描述
- 《大学生军事理论教程》第五章
- 中国建筑色卡
- 北师大九年级物理上册 (组装电路)简单电路 课件
- 2023年普通高中学业水平合格性考试音乐试卷
- 第八章世纪美国政治思想
- 起重机司机Q2(限桥式起重机)题库题库(1727道)
- 木质纤维素的生物分解及其转化技术
- 冠寓运营管理手册正式版
- GB/T 39473-2020北斗卫星导航系统公开服务性能规范
评论
0/150
提交评论