1. What's the difference between an interface and an
abstract class?
An abstract class is a class that is only partially
implemented by the programmer. It may contain one or more abstract methods. An
abstract method is simply a function definition that serves to tell the
programmer that the method must be implemented in a child class.
An interface is similar to an abstract class; indeed
interfaces occupy the same namespace as classes and abstract classes. For that
reason, you cannot define an interface with the same name as a class. An
interface is a fully abstract class; none of its methods are implemented and
instead of a class sub-classing from it, it is said to implement that
interface.
Abstract classes can have constants, members, method stubs
and defined methods, whereas interfaces can only have constants and methods
stubs.
Methods and members of an abstract class can be defined with
any visibility, whereas all methods of an interface must be defined as public.
When inheriting an abstract class, the child class must
define the abstract methods, whereas an interface can extend another interface
and methods don't have to be defined.
A child class can only extend a single abstract (or any
other) class, whereas an interface can extend or a class can implement multiple
other interfaces.
A child class can define abstract methods with the same or
less restrictive visibility, whereas a class implementing an interface must
define the methods with the exact same visibility.
2. When to use
abstract class or interface?
Interface is used when you only want to declare which
methods and members a class MUST have. Anyone implementing the interfaca will
have to declare and implement the methods listed by the interface.
If you also want to have a default implementation, use
abstract class. Any class extending the abstract class will have to implement
only its abstract methods and members, and will have some default
implementation of the other methods of the abstract class, which you may
override or not.
Finally, you can implement as many interfaces as you want,
but only extend one class (being it abstract or not). Keep that on mind before
choosing.
Abstract class is an incomplete implementation of some
concept. This incomplete implementation may be different in different context.
Derived class implements the abstract class in its context.
Interface defines contract or standard. Implementation of
the interface has to follow the contract or standard. Interfaces are more used
to set these types of standards or contracts.
3. What does the
Serializable interface do ?
The Serializable interface is just a marker. It means that
objects can be serialized, i.e. they can be represented as a bit string and
restored from that bit string. For example, both of your classes are
serializable because they can be represented as a bit string (or regular
string). On the other hand, a class that represents a file handle given out by
the operating system can not be serialized: As soon as the program is finished,
that handle is gone, and there is no way to get it back. Reopening the file by
file name is not guaranteed to work, since it may have been
deleted/moved/changed permissions in the meantime.
Serializing objects that don't implement the Serializable
interface will result in a NotSerializableException being thrown.
4. How you can force the garbage collection ?
Garbage collection automatic process and can't be forced.
You could request it by calling System.gc(). JVM does not guarantee that GC
will be started immediately.
Garbage collection is one of the most important feature of
Java, Garbage collection is also called automatic memory management as JVM
automatically removes the unused variables/objects (value is null) from the
memory. User program can't directly free the object from memory, instead it is
the job of the garbage collector to automatically free the objects that are no
longer referenced by a program.
Every class inherits finalize() method from
java.lang.Object, the finalize() method is called by garbage collector when it
determines no more references to the object exists. In Java, it is good idea to
explicitly assign null into a variable when no more in use. I Java on calling
System.gc() and Runtime.gc(), JVM tries to recycle the unused objects, but
there is no guarantee when all the objects will garbage collected.
5 . What is Synchronization in Java?
Synchronization is a process of controlling the access of
shared resources by the multiple threads in such a manner that only one thread
can access one resource at a time.
In non synchronized multithreaded application, it is
possible for one thread to modify a shared object while another thread is in
the process of using or updating the object's value.
6. What is memory
leak?
A memory leak is where an unreferenced object that will
never be used again still hangs around in memory and doesnt get garbage collected.
7. What is difference between stringbuffer and
stringbuilder?
The only difference between StringBuffer and StringBuilder
is that StringBuilder is unsynchronized whereas StringBuffer is synchronized.
So when the application needs to be run only in a single thread then it is
better to use StringBuilder. StringBuilder is more efficient than StringBuffer.
Criteria to choose among StringBuffer and StringBuilder
If your text can change and will only be accessed from a
single thread, use a StringBuilder because StringBuilder is unsynchronized.
If your text can changes, and will be accessed from multiple
threads, use a StringBuffer because StringBuffer is synchronous.
8. What is the difference between checked and unchecked
exceptions?
In general, unchecked exceptions represent defects in the
program (bugs), which are normally Runtime exceptions.
Furthermore, checked exceptions represent invalid conditions
in areas outside the immediate control of the program.
9. How does Java
allocate stack and heap memory?
Each time an object
is created in Java it goes into the area of memory known as heap. The primitive
variables like int and double are allocated in the stack, if they are local
method variables and in the heap if they are member variables (i.e. fields of a
class).
In Java methods local variables are pushed into stack when a
method is invoked and stack pointer is decremented when a method call is
completed.
In a multi-threaded application each thread will have its
own stack but will share the same heap. This is why care should be taken in
your code to avoid any concurrent access issues in the heap space.
The stack is threadsafe (each thread will have its own
stack) but the heap is not threadsafe unless guarded with synchronisation
through your code.
10. What is Java Reflection?
Reflection is commonly used by programs which require the
ability to examine or modify the run time behavior of applications running in
the Java virtual machine.
No comments:
Post a Comment