Saturday, April 7, 2012

OCJP Preparation Questions and Answers (***New Q/As Added***)



                                    OCJP Preparation


What is the output for the below code ?
 Question 1.
public class A {
int add(int i, int j) {
return i + j;
}
}

public class B extends A {
public static void main(String argv[]) {
short s = 9;
System.out.println(add(s, 6));
}
}

Options are:
A. Compile fail due to error on line no 2
B. Compile fail due to error on line no 9
C. Compile fail due to error on line no 8
D. 15

Answer :
B is the correct answer.
Cannot make a static reference to the non-static method add(int, int) from the type A. The short s is autoboxed correctly, but the add() method cannot be invoked from a static method because add() method is not static.


Question 2.


public class A {
int k;
boolean istrue;
static int p;

public void printValue() {
System.out.print(k);
System.out.print(istrue);
System.out.print(p);
}
}

public class Test {
public static void main(String argv[]) {
A a = new A();
a.printValue();
}
}

Options are:

A.0 false 0
B.0 true 0
C.0 0 0
D.Compile error – static variable must be initialized before use.

Answer :
A is the correct answer.
Global and static variable need not be initialized before use. Default value of global and static int variable is zero. Default value of boolean variable is false. Remember local variable must be initialized before use.


Question 3.
public class Test {
int _$;
int $7;
int do;

public static void main(String argv[]) {
Test test = new Test();
test.$7 = 7;
test.do = 9;
System.out.println(test.$7);
System.out.println(test.do);
System.out.println(test._$);
}
}

Options are:

A.7 9 0
B.7 0 0
C.Compile error – $7 is not valid identifier.
D.Compile error – do is not valid identifier.

Answer:
D is the correct answer. $7 is valid identifier. Identifiers must start with a letter, a currency character ($), or underscore ( _ ). Identifiers cannot start with a number. You can’t use a Java keyword as an identifier. do is a Java keyword.
Question 4.

package com;

class Animal {
public void printName() {
System.out.println("Animal");
}
}

package exam;

import com.Animal;

public class Cat extends Animal {
public void printName() {
System.out.println("Cat");
}
}

package exam;

import com.Animal;

public class Test {
public static void main(String[] args) {
Animal a = new Cat();
a.printName();
}
}

Options are:

A.Animal
B.Cat
C.Animal Cat
D.Compile Error

Answer :

D is the correct answer.
Cat class won’t compile because its superclass, Animal, has default access and is in a different package. Only public superclass can be accessible for different package.

Question 5.

public class A {
int i = 10;

public void printValue() {
System.out.println("Value-A");
}
}

public class B extends A {
int i = 12;

public void printValue() {
System.out.print("Value-B");
}
}

public class Test {
public static void main(String argv[]) {
A a = new B();
a.printValue();
System.out.println(a.i);
}
}

Options are:

A.Value-B 11
B.Value-B 10
C.Value-A 10
D.Value-A 11

Answer:

B is the correct answer.
If you create object of subclass with reference of super class like ( A a = new B();) then subclass method and super class variable will be executed.

Question 6.

public enum Test {
BREAKFAST(7, 30), LUNCH(12, 15), DINNER(19, 45);
private int hh;
private int mm;

Test(int hh, int mm) {
assert (hh >= 0 && hh <= 23) : "Illegal hour.";
assert (mm >= 0 && mm <= 59) : "Illegal mins.";
this.hh = hh;
this.mm = mm;
}

public int getHour() {
return hh;
}

public int getMins() {
return mm;
}

public static void main(String args[]){
Test t = new BREAKFAST;
System.out.println(t.getHour() +":"+t.getMins());
}
}

Options are:

A.7:30
B.Compile Error – an enum cannot be instantiated using the new operator.
C.12:30
D.19:45

Answer:

B is the correct answer.
As an enum cannot be instantiated using the new operator, the constructors cannot be called explicitly. You have to do like Test t = BREAKFAST;

Question 7.

public class A {
static {
System.out.println("static:");
}
{
System.out.println("block");
}

public A() {
System.out.println("A");
}

public static void main(String[] args) {
A a = new A();
}
}

Options are:

A.A block static
B.static block A
C.static A
D.A

Answer:

B is the correct answer.
First execute static block, then statement block then constructor.


Question 8.

public class Test {
public static void main(String[] args) {
int i = 010;
int j = 07;
System.out.println(i);
System.out.println(j);
}
}

Options are:

A.8 7
B.10 7
C.Compilation fails with an error at line 3
D.Compilation fails with an error at line 5

Answer:

A is the correct answer.
By placing a zero in front of the number is an integer in octal form. 010 is in octal form .so its value is 8.

Question 9.

public class Test {
public static void main(String[] args) {
byte b = 6;
b += 8;
System.out.println(b);
b = b + 7;
System.out.println(b);
}
}

Options are:

A.14 21
B.14 13
C.Compilation fails with an error at line 6
D.Compilation fails with an error at line 4

Answer:

C is the correct answer.
int or smaller expressions always resulting in an int. So compiler complain about Type
mismatch: cannot convert from int to byte for b = b+7; But b += 7; // No problem
because +=, -=, *=, and /= will all put in an implicit cast. b += 7 is same as b = (byte)b+7
so compiler not complain.

Question 10.

public class Test {
public static void main(String[] args) {
String value = "abc";
changeValue(value);
System.out.println(value);
}

public static void changeValue(String a) {
a = "xyz";
}
}

Options are:

A.abc
B.xyz
C.Compilation fails
D.Compilation clean but no output

Answer:

A is the correct answer.
Java pass reference as value. passing the object reference, and not the actual object itself.
Simply reassigning to the parameter used to pass the value into the method will do
nothing, because the parameter is essentially a local variable.

Question 11.

public class Test {
public static void printValue(int i, int j, int k) {
System.out.println("int");
}

public static void printValue(byte... b) {
System.out.println("long");
}

public static void main(String... args) {
byte b = 9;
printValue(b, b, b);
}
}

Options are:

A.long
B.int
C.Compilation fails
D.Compilation clean but throws RuntimeException

Answer:

B is the correct answer.
Primitive widening uses the smallest method argument possible. (For Example if you pass short value to a method but method with short argument is not available then compiler choose method with int argument). But in this case compiler will prefer the older style before it chooses the newer style, to keep existing code more robust. var-args method is looser than widen.

Question 12.

You have a java file name Test.java inside src folder of javaproject directory. You have also classes 
folder inside javaproject directory. you have issued below command from command prompt.
cd javaproject

Which of the below command puts Test.class file inside classes folder ?

Options are:

A.javac -d classes src/Test.java
B.javac Test.java
C.javac src/Test.java
D.javac classes src/Test.java

Answer:

A is the correct answer.
The -d option lets you tell the compiler in which directory to put the .class file it
generates (d for destination)

Question 13.

You have two class files name Test.class and Test1.class inside javaproject directory.
Test.java source code is :

public class Test {
public static void main(String[] args) {
System.out.println("Hello Test");
}
}

Test1.java source code is :

public class Test1 {
public static void main(String[] args) {
System.out.println("Hello Test1");
}
}

you have issued below commands from command prompt.
cd javaproject
java Test Test1

What is the output ?

Options are:

A.Hello Test
B.Hello Test Hello Test1
C.Hello Test1
D.Run fails – class not found

Answer:

A is the correct answer.
You must specify exactly one class file to execute. If more than one then first one will be executed.

Question 14.

You have a java file name Test.java .

Test.java needs access to a class contained in app.jar in “exam”
directory.

Which of the following command set classpath to compile clean?

Options are:

A.javac -classpath exam/app.jar Test.java
B.javac -classpath app.jar Test.java
C.javac -classpath exam Test.java
D.None of the above

Answer:

A is the correct answer.
javac -classpath exam/app.jar Test.java is the correct command to set exam/app.jar in classpath.

Question 15.

What will be the result of compiling the following code:

public class SuperClass {
public int doIt(String str, Integer... data) throws Exception {
String signature = "(String, Integer[])";
System.out.println(str + " " + signature);
return 1;
}
}

public class SubClass extends SuperClass {
public int doIt(String str, Integer... data) {
String signature = "(String, Integer[])";
System.out.println("Overridden: " + str + " " + signature);
return 0;
}

public static void main(String... args) {
SuperClass sb = new SubClass();
sb.doIt("hello", 3);
}
}

Options are:

A.Overridden: hello (String, Integer[])
B.hello (String, Integer[])
C.Complilation fails
D.None of the above

Answer:

C is the correct answer.
Unhandled exception type Exception.


Question 16:

What will be the result of following code:

class MyException1 extends Exception {
public MyException1() {
}
}

class MyException2 extends Exception {
public MyException2() {
}
}

class ExceptionTest {
public static void main(String[] args) throws Exception {
try {
m2();
} finally {
m3();
} catch (MyException2 e) {
}

}

public static void m2() throws MyException1 {
throw new MyException1();
}

public static void m3() throws MyException2 {
throw new MyException2();
}
}

Options:

A. It will compile but will throw MyException1 when run.
B. It will compile but will throw MyException2 when run.
C. It will compile and run without throwing any exceptions.
D. It will not compile.

Answer: D

Explaination : catch block will come after try block

4 comments: