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

Thursday, March 22, 2012

Errors in Jasper Report

Errors in Jasper Reports:-


net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Only a type can be imported. it.businesslogic.ireport.IReportScriptlet resolves to a package
import it.businesslogic.ireport.IReportScriptlet;
       <--------------------------------------->
1 errors

Solution :- remove this line from the report(.jrxml) as shown below..This might come in ireport version 2.0.1 and when your ate using jasper jar 3.1.2



Saturday, March 10, 2012

Jasper Reports Video



In Java
This is a small help for all those people who are adding jasper reports as a feature in their project. This basically helps us to generate reports in the form of .PDF and in the excel form also. 

Friday, March 9, 2012

Garbage Collection in Java

                                    Garbage Collection in Java



  • Overview of Memory Management and Garbage Collection

Memory management is a crucial element in many types of applications. Consider a program that reads in large amounts of data, say from somewhere else on a network, and then writes that data into a database on a hard drive. A typical design would be to read the data into some sort of collection in memory, perform some operations on the data, and then write the data into the database. After the data is written into the database, the collection that stored the data temporarily must be emptied of old data or deleted and recreated before processing the next batch. This operation might be performed thousands of times, and in languages like C or C++ that do not offer automatic garbage collection, a small flaw in the logic that manually empties or deletes the collection data structures can allow small amounts of memory to be improperly reclaimed or lost. Forever. These small losses are called memory leaks, and over many thousands of iterations they can make enough memory inaccessible that programs will eventually crash. Creating code that performs manual memory management cleanly and thoroughly is a nontrivial and complex task, and while estimates vary, it is arguable that manual memory management can double the development effort for a complex program. Java's garbage collector provides an automatic solution to memory management. In most cases it frees you from having to add any memory management logic to your application. The downside to automatic garbage collection is that you can't completely control when it runs and when it doesn't.


          Overview of Java's Garbage Collector

Let's look at what we mean when we talk about garbage collection in the land of Java. From the 30,000 ft. level, garbage collection is the phrase used to describe automatic memory management in Java. Whenever a software program executes (in Java, C, C++, Lisp, Ruby, and so on), it uses memory in several different ways. We're not going to get into Computer Science 101 here, but it's typical for memory to be used to create a stack, a heap, in Java's case constant pools, and method areas. The heap is that part of memory where Java objects live, and it's the one and only part of
memory that is in any way involved in the garbage collection process. A heap is a heap is a heap. For the exam it's important to know that you can call it the heap, you can call it the garbage collectible heap, or you can call it Johnson, but there is one and only one heap. So, all of garbage collection revolves around making sure that the heap has as much free space as possible. For the purpose of the exam, what this boils down to is deleting any objects that are no longer reachable by the Java program running. We'll talk more about what reachable means, but let's drill this point in. When the garbage collector runs, its purpose is to find and delete objects that cannot be reached. If you think of a Java program as being in a constant cycle of creating the objects it needs (which occupy space on the heap), and then discarding them when they're no longer needed, creating new objects, discarding them, and so on, the missing piece of the puzzle is the garbage collector. When it runs, it looks for those discarded objects and deletes them from memory so that the cycle of using memory and releasing it can continue. Ah, the great circle of life.

     When Does the Garbage Collector Run?

The garbage collector is under the control of the JVM. The JVM decides when to run the garbage collector. From within your Java program you can ask the JVM to run the garbage collector, but there are no guarantees, under any circumstances, that the JVM will comply. Left to its own devices, the JVM will typically run the garbage collector when it senses that memory is running low. Experience indicates that when your Java program makes a request for garbage collection, the JVM will usually grant your request in short order, but there are no guarantees. Just when you think you can count on it, the JVM will decide to ignore your request.

      How Does the Garbage Collector Work?


You just can't be sure. You might hear that the garbage collector uses a mark and sweep algorithm, and for any given Java implementation that might be true, but the Java specification doesn't guarantee any particular implementation. You might hear
that the garbage collector uses reference counting; once again maybe yes maybe no. The important concept to understand for the exam is when does an object become eligible for garbage collection? To answer this question fully, we have to jump ahead
a little bit and talk about threads. (See Chapter 9 for the real scoop on threads.) In a nutshell, every Java program has from one to many threads. Each thread has its own little execution stack. Normally, you (the programmer) cause at least one thread to run in a Java program, the one with the main() method at the bottom of the stack. However, as you'll learn in excruciating detail in Chapter 9, there are many really cool reasons to launch additional threads from your initial thread. In addition to having its own little execution stack, each thread has its own lifecycle. For now, all we need to know is that threads can be alive or dead. With this background information, we can now say with stunning clarity and resolve that an object is eligible for garbage collection when no live thread can access it. (Note: Due to the vagaries of the String constant pool, the exam focuses its garbage collection questions on non-String objects, and so our garbage collection discussions apply to only non-String objects too.) Based on that definition, the garbage collector does some magical, unknown operations, and when it discovers an object that can't be reached by any live thread,
it will consider that object as eligible for deletion, and it might even delete it at some point. (You guessed it; it also might not ever delete it.) When we talk about reaching an object, we're really talking about having a reachable reference variable that refers to the object in question. If our Java program has a reference variable

that refers to an object, and that reference variable is available to a live thread, then that object is considered reachable. We'll talk more about how objects can become unreachable in the following section. Can a Java application run out of memory? Yes. The garbage collection system attempts to remove objects from memory when they are not used. However, if you maintain too many live objects (objects referenced from other live objects), the system can run out of memory. Garbage collection cannot ensure that there
is enough memory, only that the memory that is available will be managed as efficiently as possible.