What is immutable
object in Java? Can you change values of a immutable object?
A Java object is
considered immutable when its state cannot change after it is created. Use of
immutable objects is widely accepted as a sound strategy for creating simple,
reliable code. Immutable objects are particularly useful in concurrent
applications. Since they cannot change state, they cannot be corrupted by
thread interference or observed in an inconsistent state. java.lang.String and
java.lang.Integer classes are the Examples of immutable objects from the Java
Development Kit. Immutable objects simplify your program, since they :
o are simple to use test and construct.
o are automatically thread-safe.
o do not require a copy constructor.
o do not require an implementation of clone.
o allow hashCode to use lazy initialization, and
to cache its return value.
o do not need to be copied defensively when used
as a field.
o are good Map keys and Set elements (these
objects must not change state while stored in the collection).
o have their class invariant established once
upon construction, and it never needs to be checked again.
o always have "failure atomicity" (a
term used by Joshua Bloch) : if an immutable object throws an exception, it's
never left in an undesirable or indeterminate state.
To create a object
immutable You need to make the class final and all its member final so that
once objects gets crated no one can modify its state. You can achieve same
functionality by making member as non final but private and not modifying them
except in constructor. Also its NOT necessary to have all the properties final
since you can achieve same functionality by making member as non final but
private and not modifying them except in constructor.
Below is the main
difference between these three most commonly used classes.
o String class objects are immutable whereas
StringBuffer and StringBuilder objects are mutable.
o StringBuffer is synchronized while
StringBuilder is not synchronized.
o Concatenation operator "+" is
internal implemented using either StringBuffer or StringBuilder.
Criteria to choose
among String, StringBuffer and StringBuilder
o If the Object value is not going to change use
String Class because a String object is immutable.
o If the Object value can change and will only
be accessed from a single thread, use a StringBuilder because StringBuilder is
unsynchronized.
o In case the Object value can change, and will
be modified by multiple threads, use a StringBuffer because StringBuffer is
synchronized.
Why String class is
final or immutable?
It is very useful to
have strings implemented as final or immutable objects. Below are some
advantages of String Immutability in Java
o Immutable objects are thread-safe. Two threads
can both work on an immutable object at the same time without any possibility
of conflict.
o Security: the system can pass on sensitive
bits of read-only information without worrying that it will be altered
o You can share duplicates by pointing them to a
single instance.
o You can create substrings without copying. You
just create a pointer into an existing base String guaranteed never to change.
Immutability is the secret behind Java’s very fast substring implementation.
o Immutable objects are much better suited to be
Hashtable keys. If you change the value of an object that is used as a hash
table key without removing it and re-adding it you lose the mapping.
o Since String is immutable, inside each String
is a char[] exactly the correct length. Unlike a StringBuilder there is no need
for padding to allow for growth.
o If String were not final, you could create a
subclass and have two strings that look alike when "seen as Strings",
but that are actually different.
Is Java Pass by
Reference or Pass by Value?
The Java Spec says
that everything in Java is pass-by-value. There is no such thing as
"pass-by-reference" in Java. The difficult thing can be to understand
that Java passes "objects as references" passed by value.
What is
OutOfMemoryError in java? How to deal with java.lang.OutOfMemeryError error?
This Error is thrown
when the Java Virtual Machine cannot allocate an object because it is out of
memory, and no more memory could be made available by the garbage collector. Note: Its an Error (extends java.lang.Error) not Exception. Two
important types of OutOfMemoryError are often encountered
· java.lang.OutOfMemoryError: Java heap space
The quick solution is
to add these flags to JVM command line when Java runtime is started:
1. -Xms1024m -Xmx1024m
· java.lang.OutOfMemoryError: PermGen space
The solution is to add
these flags to JVM command line when Java runtime is started:
2. -XX:+CMSClassUnloadingEnabled-XX:+CMSPermGenSweepingEnabled
Long Term Solution: Increasing the Start/Max Heap size or
changing Garbage Collection options may not always be a long term solution for
your Out Of Memory Error problem. Best approach is to understand the memory
needs of your program and ensure it uses memory wisely and does not have leaks.
You can use a Java memory profiler to determine what methods in your program
are allocating large number of objects and then determine if there is a way to
make sure they are no longer referenced, or to not allocate them in the first
place.
What is the use of the
finally block? Is finally block in Java guaranteed to be called? When finally
block is NOT called?
Finally is the block
of code that executes always. The code in finally block will execute even if an
exception is occurred. Finally block is NOT called in following conditions
o If the JVM exits while the try or catch code
is being executed, then the finally block may not execute. This may happen due
to System.exit() call.
o if the thread executing the try or catch code
is interrupted or killed, the finally block may not execute even though
the application as a whole continues.
o If a exception is thrown in finally block and
not handled then remaining code in finally block may not be executed.
Why there are two Date
classes; one in java.util package and another in java.sql?
From the JavaDoc of
java.sql.Date:
A thin wrapper around
a millisecond value that allows JDBC to identify this as an SQL DATE value. A
milliseconds value represents the number of milliseconds that have passed since
January 1, 1970 00:00:00.000 GMT. To conform with the definition of SQL DATE,
the millisecond values wrapped by a java.sql.Date instance must be 'normalized'
by setting the hours, minutes, seconds, and milliseconds to zero in the
particular time zone with which the instance is associated.
Explanation: A java.util.Date represents date and time of
day, a java.sql.Date only represents a date (the complement of java.sql.Date is
java.sql.Time, which only represents a time of day, but also extends
java.util.Date).
What is Marker
interface? How is it used in Java?
The marker interface
is a design pattern, used with languages that provide run-time type information
about objects. It provides a way to associate metadata with a class where the
language does not have explicit support for such metadata. To use this pattern,
a class implements a marker interface, and code that interact with instances of
that class test for the existence of the interface. Whereas a typical interface
specifies functionality (in the form of method declarations) that an
implementing class must support, a marker interface need not do so. The mere
presence of such an interface indicates specific behavior on the part of the
implementing class. There can be some hybrid interfaces, which both act as
markers and specify required methods, are possible but may prove confusing if
improperly used. Java utilizes this pattern very well and the example
interfaces are
o java.io.Serializable - Serializability of a
class is enabled by the class implementing the java.io.Serializable interface.
Classes that do not implement this interface will not have any of their state
serialized or deserialized. All subtypes of a serializable class are themselves
serializable. The serialization interface has no methods or fields and serves
only to identify the semantics of being serializable.
o java.rmi.Remote - The Remote interface serves
to identify interfaces whose methods may be invoked from a non-local virtual
machine. Any object that is a remote object must directly or indirectly
implement this interface. Only those methods specified in a "remote
interface", an interface that extends java.rmi.Remote are available
remotely.
o java.lang.Cloneable - A class implements the
Cloneable interface to indicate to the Object.clone() method that it is legal
for that method to make a field-for-field copy of instances of that class.
Invoking Object's clone method on an instance that does not implement the
Cloneable interface results in the exception CloneNotSupportedException being
thrown.
o javax.servlet.SingleThreadModel - Ensures that
servlets handle only one request at a time. This interface has no methods.
o java.util.EvenListener - A tagging interface
that all event listener interfaces must extend.
The
"instanceof" keyword in java can be used to test if an object is of a
specified type. So this keyword in combination with Marker interface can be
used to take different actions based on type of interface an object implements.
Why main() in java is
declared as public static void main? What if the main method is declared as
private?
Public - main method
is called by JVM to run the method which is outside the scope of project
therefore the access specifier has to be public to permit call from anywhere
outside the application static - When the JVM makes are call to the main method
there is not object existing for the class being called therefore it has to
have static method to allow invocation from class. void - Java is platform
independent language therefore if it will return some value then the value may
mean different to different platforms so unlike C it can not assume a behavior
of returning value to the operating system. If main method is declared as
private then - Program will compile properly but at run-time it will give
"Main method not public." error.
Click below links for more JAVA Interview Questions and Answers
JAVA Interview 2
JAVA Interview 3
JAVA Interview 4
JAVA Interview 5
Click below links for more JAVA Interview Questions and Answers
JAVA Interview 2
JAVA Interview 3
JAVA Interview 4
JAVA Interview 5