Core Java FAQ's
Core Java FAQ's
Q #6) What is meant by the Local variable and the Instance variable?
Answer:
Local variables are defined in the method and scope of the variables that exist inside the method itself.
Instance variable is defined inside the class and outside the method and the scope of the variables exists
throughout the class.
Example:
public class Addition{
public static void main(String[] args){
Addion add = new Addition();//Object creation
}
}
The above code creates the object for the Addition class.
get A(){
}
set A(int a){
if(a>0){// Here condition is applied
.........
}
}
For encapsulation, we need to make all the instance variables private and create setter and getter for those
variables. Which in turn will force others to call the setters rather than access the data directly.
Example:
Public class Manipulation(){ //Super class
public void add(){
}
}
public class Addition extends Manipulation(){ // Sub class
public void add(){
}
public static void main(String args[]){
Manipulation addition = new Addition();//Manipulation is reference type and Addition is reference type
addition.add();
}
}
Using the Manipulation reference type we can call the Addition class “add()” method. This ability is
known as Polymorphism. Polymorphism is applicable for overriding and not for overloading.
Example:
public class Manipulation{ //Super class
public void add(){
………………
}
}
Example:
Public abstract interface IManupulation{ //Interface declaration
Public abstract void add();//method declaration
public abstract void subtract();
}
All the methods in the interface are internally public abstract void.
All the variables in the interface are internally public static final that is constants.
Classes can implement the interface and not extends.
The class which implements the interface should provide an implementation for all the methods
declared in the interface.
public class Manupulation implements IManupulation{ //Manupulation class uses the interface
Public void add(){
……………
}
Public void subtract(){
…………….
}
}
Example:
public abstract class Manupulation{
public abstract void add();//Abstract method declaration
Public void subtract(){
}
}
An abstract class may have a non- abstract method also.
The concrete Subclass which extends the Abstract class should provide the implementation for
abstract methods.
Size should be given at the time of array Size may not be required. It changes the size
declaration. dynamically.
.
If the name-value has changed from “book” to “pen”.
String Buffer:
Here string values are stored in a stack. If the values are changed then the new value replaces the
older value.
The string buffer is synchronized which is thread-safe.
Performance is slower than the String Builder.
Example:
String Buffer name =”book”;
Once the name value has been changed to “pen” then the “book” is erased in the stack.
String Builder:
This is the same as String Buffer except for the String Builder which is not threaded safely that is not
synchronized. So obviously the performance is fast.
Public members of Class A are visible to Class B (same package) as well as Class C (different packages).
Private:
Private members are visible in the same class only and not for the other classes in the same package as
well as classes in the outside packages.
Private members in class A are visible only in that class. It is invisible for class B as well as class C.
Default members in Class A are visible to the other classes which are inside the package and invisible to
the classes which are outside the package.
Protected:
.
Protected is the same as Default but if a class extends then it is visible even if it is outside the package.
Class A members are visible to Class B because it is inside the package. For Class C it is invisible but if
Class C extends Class A then the members are visible to Class C even if it is outside the package.
HashMap HashTable
Iterator is used to iterate the values Enumerator is used to iterate the values
Allows one null key and multiple null values Doesn’t allow anything that is null
HashSet TreeSet
Inserted elements are in random order Maintains the elements in the sorted order
Q #25) What are all the Classes and Interfaces that are available in the collections?
Answer: Given below are the Classes and Interfaces that are available in Collections:
Interfaces:
Collection
List
Set
Map
Sorted Set
Sorted Map
Queue
Classes:
Lists:
Array List
Vector
Linked List
Sets:
Hash set
Linked Hash Set
Tree Set
Maps:
Hash Map
Hash Table
TreeMap
Linked Hashed Map
Queue:
Priority Queue
From the output, Array List maintains the insertion order and it accepts the duplicates. But it’s not sorted.
b) Vector:
It is the same as Array List.
Vector also maintains the insertion order and accepts the duplicates.
c) Linked List:
Elements are doubly linked to one another.
Performance is slower than the Array list.
Good choice for insertion and deletion.
In Java 5.0 it supports common queue methods peek( ), Pool ( ), Offer ( ) etc.
Example:
public class Fruit {
public static void main (String [ ] args){
Linkedlist <String> names = new linkedlist <String> ( ) ;
names.add(“banana”);
names.add(“cherry”);
names.add(“apple”);
names.add(“kiwi”);
names.add(“banana”);
System.out.println (names);
}
}
Output:
[ banana,cherry,apple,kiwi,banana]
It maintains the insertion order in which they have been added to the Set. Duplicates are not allowed.
c) Tree Set:
It is one of the two sorted collections.
Uses the “Read-Black” tree structure and guarantees that the elements will be in ascending order.
We can construct a tree set with the constructor by using a comparable (or) comparator.
Example:
public class Fruits{
public static void main (String[ ]args) {
Treeset<String> names= new TreeSet<String>( ) ;
names.add(“cherry”);
names.add(“banana”);
names.add(“apple”);
names.add(“kiwi”);
names.add(“cherry”);
System.out.println(names);
}
}
Output:
[apple, banana, cherry, kiwi]
TreeSet sorts the elements in ascending order. And duplicates are not allowed.
b) Hash Table:
Like the vector key, methods of the class are synchronized.
Thread safety and therefore slows the performance.
It doesn’t allow anything that is null.
Example:
public class Fruit{
public static void main(String[ ]args){
Hashtable<Sting,String> names =new Hashtable<String,String>( );
names.put(“key1”,“cherry”);
names.put(“key2”,“apple”);
names.put(“key3”,“banana”);
names.put(“key4”,“kiwi”);
names.put(“key2”,“orange”);
System.out.println(names);
}
}
Output:
{key2=apple, key1=cherry,key4=kiwi, key3=banana}
Duplicate keys are not allowed.
d) TreeMap:
Sorted Map.
Like Tree set, we can construct a sort order with the constructor.
Example:
public class Fruit{
public static void main(String[ ]args){
TreeMap<Sting,String> names =new TreeMap<String,String>( );
names.put(“key1”,“cherry”);
names.put(“key2”,“banana”);
names.put(“key3”,“apple”);
names.put(“key4”,“kiwi”);
names.put(“key2”,“orange”);
System.out.println(names);
}
}
Output:
{key1=cherry, key2=banana, key3 =apple, key4=kiwi}
It is sorted in ascending order based on the key. Duplicate keys are not allowed.
Checked Exceptions must either declare the exception using throws keyword (or) surrounded by
appropriate try/catch.
Example:
class Manipulation{
public static void main(String[] args){
add();
}
Public void add(){
try{
addition();
}catch(Exception e){
e.printStacktrace();
}
}
}
b) By declaring throws keyword:
At the end of the method, we can declare the exception using throws keyword.
Example:
class Manipulation{
public static void main(String[] args){
add();
}
public void add() throws Exception{
addition();
}
}
b) catch:
This is followed by a try block. Exceptions are caught here.
c) finally:
This is followed either by try block (or) catch block. This block gets executed regardless of an exception.
So generally clean up codes are provided here.
Example:
public class Manipulation{
public static void main(String[] args){
add();
}
public void add(){
addition();
}
From the above example, the stack looks like as shown below:
If an exception occurs in the addition() method is not caught, then it moves to the method add(). Then it
is moved to the main() method and then it will stop the flow of execution. It is called Exception
Propagation.
Final method: A final keyword in a method, couldn’t be overridden. If a method is marked as a final,
then it can’t be overridden by the subclass.
Final class: If a class is declared as final, then the class couldn’t be subclassed. No class can extend the
final class.
Example:
public static void main(String[] args){//main thread starts here
}
b) Implement Runnable interface: Another way is by implementing the runnable interface. For that, we
should provide the implementation for the run () method which is defined in the interface.
Example:
Public class Addition implements Runnable {
public void run () {
}
}
Q #41) What does the yield method of the Thread class do?
Answer: A yield () method moves the currently running thread to a runnable state and allows the other
threads for execution. So that equal priority threads have a chance to run. It is a static method. It doesn’t
release any lock.
Yield () method moves the thread back to the Runnable state only, and not the thread to sleep (), wait ()
(or) block.
Example:
public static void main (String[] args){
Thread t = new Thread ();
t.start ();
}
public void run(){
Thread.yield();
}
}
Q #42) Explain about wait () method.
Answer: wait () method is used to make the thread to wait in the waiting pool. When the wait () method
is executed during a thread execution then immediately the thread gives up the lock on the object and
goes to the waiting pool. Wait () method tells the thread to wait for a given amount of time.
Then the thread will wake up after notify () (or) notify all () method is called.
Wait() and the other above-mentioned methods do not give the lock on the object immediately until the
currently executing thread completes the synchronized code. It is mostly used in synchronization.
Example:
public static void main (String[] args){
Thread t = new Thread ();
t.start ();
Synchronized (t) {
Wait();
}
}
notify() notifyAll()
This method is used to send a signal to wake up a single thread in This method sends the signal to wake up all the thre
the waiting pool. waiting spool.
Q #44) How to stop a thread in java? Explain about sleep () method in a thread?
Answer: We can stop a thread by using the following thread methods:
Sleeping
Waiting
Blocked
Sleep: Sleep () method is used to sleep the currently executing thread for the given amount of time. Once
the thread is wake up it can move to the runnable state. So sleep () method is used to delay the execution
for some period.
It is a static method.
Example:
Thread. Sleep (2000)
So it delays the thread to sleep 2 milliseconds. Sleep () method throws an uninterrupted exception, hence
we need to surround the block with try/catch.
Once the execution reaches, t.start () line then a new thread is created and the new stack for the thread is
also created. Now JVM switches to the new thread and the main thread are back to the runnable state.
The two stacks look as shown below.
Now, the user thread executed the code inside the run() method.
Once the run() method has completed, then JVM switches back to the main thread and the user thread has
completed the task and the stack was disappeared.
JVM switches between each thread until both the threads are completed. This is called Multi-threading.
Q #48) Explain the thread life cycle in Java.
Answer: Thread has the following states:
New
Runnable
Running
Non-runnable (Blocked)
Terminated
New: In New state, a Thread instance has been created but start () method is not yet invoked.
Now the thread is not considered alive.
Runnable: The Thread is in the runnable state after the invocation of the start () method, but
before the run () method is invoked. But a thread can also return to the runnable state from
waiting/sleeping. In this state, the thread is considered alive.
Running: The thread is in a running state after it calls the run () method. Now the thread begins
the execution.
Non-Runnable(Blocked): The thread is alive but it is not eligible to run. It is not in the runnable
state but also, it will return to the runnable state after some time. Example: wait, sleep, block.
Terminated: Once the run method is completed then it is terminated. Now the thread is not alive.
Locks are per objects. Every Java object has a lock. A lock has only one key. A thread can access a
synchronized method only if the thread can get the key to the objects to lock.
For this, we use the “Synchronized” keyword.
Example:
public class ExampleThread implements Runnable{
public static void main (String[] args){
Thread t = new Thread ();
t.start ();
}
public void run(){
synchronized(object){
{
}
}
Q #53) Which methods are used during the Serialization and Deserialization process?
Answer: ObjectOutputStream and ObjectInputStream classes are higher level java.io. package. We will
use them with lower level classes FileOutputStream and FileInputStream.
ObjectOutputStream.writeObject —->Serialize the object and write the serialized object to a file.
ObjectInputStream.readObject —> Reads the file and deserializes the object.
To be serialized, an object must implement the serializable interface. If superclass implements
Serializable, then the subclass will automatically be serializable.
Serialization Deserialization
Serialization is the process which is used to convert the Deserialization is the opposite process of serialization where we
objects into byte stream the objects back from the byte stream.