Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
math.min(2,1) -> 1
Method execution in math class depend on method args, and not instance variables...
Even if u tries to create an object of Math class ...
U will get an exception... Since math class has a private constructor..
// InterfaceImpl.java
}
What is the meaning of persistence?
Persistence means 'to save'. In java, persistence is referred to saving the state of an object
from memory to some other media (mostly permanent media such as hard disk, but it can
be a database, a network stream etc. etc.).
No...
There is lot many reasons to say...
Java supports OOP concepts partially...
But not fully...
The main aim of java is to avoid any complexity for programmers...
So they avoided almost all the complexity from the OOP...
Like multiple inheritance, friend functions, operator overloading... Etc...
The main reason for keeping primitive types as non-objects is speed. For all the places
where primitive types don’t make sense (such as containers etc.) you have the option to
'wrap' then in their equivalent objects. JDK 1.5 even introduces the concept of autoboxing
to make this transition even more programmers friendly.
2) In second point, the all methods in the interface are abstract method... Simply you can
say, abstract methods are also the incomplete method.
3) And when the methods are incomplete, the class is also incomplete, so even for the
abstract class which is partially incomplete, you can't create the object. Because it
restricts the abstract methods to be called by object because they are abstract.
4) And you know very well, that, static methods do not need any object to be created to
get called of. So directly they can be called as <classname>.<methodname>.
5) Now think, when the method is abstract (may be in abstract class or interface), and it is
incomplete, and you invoke that method, then, how it can be used when it is
incomplete???? So you can't use static. (When you use static with a method, you can call
directly without creating an object). So you can't do it.
Both these methods revolve around the concept of URL rewriting. I don’t know whether
u r aware bout this. But basically it involves suffixing the URL with a
HTTP_QUERY_STRING, which mostly is a session id used to keep track of a particular
users context. URL re-writing is used get over the usage of cookies which are dependent
on browser configuration, thus not reliable at all. Now Session is a comprehensive topic
on its own, so won’t discuss it now.
But yes the difference between the methods is in their usage and not their functionality.
Both perform the same task of re-writing a URL.
for e.g. lets say on a particular condition u want to redirect to different page
if (name == null){
response.sendRedirect(response(encodeRedirectURL("errorPage.jsp"))
}
on the other hand lets say u want to provide a link to shopping cart page to a user -
thus essentially they do same thing of re-writing the URL for non-cookie compliant
browser.
In short.....
encodeURL is used for all URLs in a servlet's output.
It helps session ids to be encoded with the URL.
The modifier transient can be applied to field members of a class to turn off serialization
on these field members. Every field marked as transient will not be serialized. You use
the transient keyword to indicate to the Java virtual machine that the transient variable is
not part of the persistent state of an object.
Java classes often hold some globally relevant value in a static class variable. The static
member fields belong to class and not to an individual instance. The concept of
serialization is concerned with the object's current state. Only data associated with a
specific instance of a class is serialized, therefore static member fields are ignored during
serialization (they are not serialized automatically), because they do not belong to the
serialized instance, but to the class. To serialize data stored in a static variable one must
provide class-specific serialization.
Surprisingly, the java compiler does not complaint if you declare a static member field as
transient. However, there is no point in declaring a static member field as transient, since
transient means: "do not serialize” and static fields would not be serialized anyway.
On the other hand, an instance member field declared as final could also be transient, but
if so, you would face a problem a little bit difficult to solve: As the field is transient, its
state would not be serialized, it implies that, when you deserialize the object you would
have to initialize the field manually, however, as it is declared final, the compiler would
complaint about it.
For instance, maybe you do not want to serialize your class' logger, then you declared it
this way:
Now, when you deserialize the class your logger will be a null object, since it was
transient. Then you should initialize the logger manually after serialization or during the
serialization process. But you can't, because logger is a final member as well.
JVM associates a lock with an object or a class to achieve multithreading. A lock is like a
token or privilege that only one thread can "possess" at any one time. When a thread
wants to lock a particular object or class, it asks the JVM.JVM responds to thread with a
lock maybe very soon, maybe later, or never. When the thread no longer needs the lock, it
returns it to the JVM. If another thread has requested the same lock, the JVM passes the
lock to that thread. If a thread has a lock, no other thread can access the locked data until
the thread that owns the lock releases it.
The JVM uses locks in conjunction with monitors. A monitor is basically a guardian in
that it watches over a sequence of code, making sure only one thread at a time executes
the code. Each monitor is associated with an object reference. It is the responsibility of
monitor to watch an arriving thread must obtain a lock on the referenced object.
When the thread leaves the block, it releases the lock on the associated object. A single
thread is allowed to lock the same object multiple times. JVM maintains a count of the
number of times the object has been locked. An unlocked object has a count of zero.
When a thread acquires the lock for the first time, the count is incremented to one. Each
time the thread acquires a lock on the same object, a count is incremented. Each time the
thread releases the lock, the count is decremented. When the count reaches zero, the lock
is released and made available to other threads.
In Java language terminology, the coordination of multiple threads that must access
shared data is called synchronization. The language provides two built-in ways to
synchronize access to data: with synchronized statements or synchronized methods.
The JVM does not use any special opcodes to invoke or return from synchronized
methods. When the JVM resolves the symbolic reference to a method, it determines
whether the method is synchronized. If it is, the JVM acquires a lock before invoking the
method. For an instance method, the JVM acquires the lock associated with the object
upon which the method is being invoked. For a class method, it acquires the lock
associated with the class to which the method belongs. After a synchronized method
completes, whether it completes by returning or by throwing an exception, the lock is
released.
Two opcodes, monitorenter and monitorexit are used by JVM for accomplishing this task.
When monitorenter is encountered by the Java virtual machine, it acquires the lock for
the object referred to by objectref on the stack. If the thread already owns the lock for that
object, a count is incremented. Each time monitorexit is executed for the thread on the
object, the count is decremented. When the count reaches zero, the monitor is released.
-Allocating memory for class variables and initializing them to default values. Static
fields for a class are created and these are set to standard default values but they are not
explicitly initialized. The method tables are constructed for the class.
-Resolving symbolic references from type to direct references The class loaders can be of
two types: a bootstrap or primordial class loader and user defined class loaderEach JVM
has a bootstrap class loader which loads trusted classes , including classes from Java
API.JVM specs do not tell how to locate these classes and is left to implementation
designers.
A Java application with user defined class loader objects can customize class loading.
These load untrustworthy classes and not an intrinsic part of JVM.They are written in
Java, converted to class files and loaded into the JVM and installed like any other objects.
Does Java support multi dimensional arrays?
The Java programming language does not really support multi-dimensional arrays. It
does, however, support arrays of arrays. In Java, a two-dimensional array 'arr' is really an
array of one-dimensional arrays:
int[][] arr = new int[4][6];
The expression arr[i] selects the one-dimensional array; the expression arr[i][j] selects the
element from that array.
The built-in multi-dimensional arrays suffer the same indignities that simple one-
dimensional arrays do: Array indices in each dimension range from zero to, where length
is the array length in the given dimension. There is no array assignment operator. The
number of dimensions and the size of each dimension is fixed once the array has been
allocated.
A Magic Number of a class file is a unique identifier for tools to quickly differentiate
class files from non class files. The first four bytes of each Java class file has the magic
value as 0xCAFEBABE.And the answer to why this number, I do not actually know but
there may be very few sensible and acceptable options possible constructed from letters
A-F which can surely not be 'CAFEFACE' or 'FADECAFE'....
A Java Runtime Environment (JRE) is a prerequisite for running Java applications on any
computer. A JRE contains a Java Virtual Machine (JVM), all standard, core java classes
and runtime libraries. It does not contain any development tools such as compiler,
debugger, etc. JDK (Java Development Kit) is a whole package required to Java
Development which essentially contains JRE+JVM, and tools required to compile and
debug, execute Java applications.
No, 'sizeof' is an operator used in C and C++ to determine the bytes of a data item, but it
is not used in Java as all data types are standard sized in all machines as per
specifications of the language.
A JVM is free to store data any way it pleases internally, big or little endian, with any
amount of padding or overhead, though primitives must behave as if they had the official
sizes.In JDK 1.5+ you can use java.lang.instrument.Instrumentation. getObjectSize() to
get the object size.
A thread is part of a process; a process may contain several different threads. Two threads
of the same process share a good deal of state and are not protected against one another,
whereas two different processes share no state and are protected against one another. Two
threads of the same process have different values of the program counter; different stacks
(local variables); and different registers. The program counter, stack pointer, and registers
are therefore saved in the thread table. Two threads share open files and memory
allocation; therefore, file information and memory information (e.g. base/limit register or
page table) is stored in the process table.
Yes it can be defined inside a method and it can access data of the
enclosing methods or a formal parameter if it is final.
Many new Java programmers ask this question when they're just starting out, and it's a
good question. After all, these methods have something to do with threads, so why aren't
they in the thread class?
The answer is that Threads can use Objects to transmit messages from one thread to
another, and these methods allow that to happen. A Thread calls wait() to say "I am
waiting for a message to be sent to this object." Another thread can call notify() to say "I
am sending a message to that object." The Object is therefore a conduit through which
threads communicate without explicitly referencing each other. If the methods were in the
Thread class, then two threads would need to have references to one another to
communicate. Instead, all communicating threads just need to agree to use some specific
shared resource.
The best example of Composition is a 'Human body' which is composed of two legs,two
hands,two eyes,two ears and so on.During the lifetime of a human being,all organs make
sense being part of whole,but once a human being is dead most of these parts are also
dead,unless some of his body parts are not medically reused.
Now come to map composition to Java world, the best example is garbage collection
feature of the language.While garbage collecting objects, whole has the responsibility of
preventing all its parts being garbage collected by holding some references to them.
It is the responsibility of whole to protect references to its parts not being exposed to
outside world.The only way to have true composition in Java is to never let references to
internal objects escape their parent's scope.
An example of Inner class as shown in the following code snippet may give you an idea
how to implement Composition in Java.
public Human()
{
Brain brain = new Brain();
}
private class Brain
{
....
....
}
A ''daemon'' thread is one that is supposed to provide a general service in the background
as long as the program is running, but is not part of the essence of the program. Thus,
when all of the non
daemon threads complete the program is terminated. Conversely, if there are any non-
daemon threads still running the program doesn' t terminate.
A memory leak occurs when all references (pointers) to a piece of allocated memory are
overwritten, cleared, or pass out of scope. The result is that the program simply "forgets"
about that particular piece of memory.Unfortunately , the operating environment (usually
an OS) is not aware of the application's amnesia. That memory is treated by the outside
world as though it still belongs to the application. The memory is therefore completely
unavailable;it has "leaked". (In the worst case, the memory can become unavailable to all
applications in the system, even if the application that created the leak is terminated. The
memory can only be reclaimed by rebooting the system.)
Explain StreamTokenizer?
The StreamTokenizer class takes an input stream and parses it into "tokens", allowing the
tokens to be read one at a time. The parsing process is controlled by a table and a number
of flags that can be set to various states. The stream tokenizer can recognize identifiers,
numbers, quoted strings, and various comment styles.
Each byte read from the input stream is regarded as a character in the range '\u0000'
through '\u00FF'. The character value is used to look up five possible attributes of the
character: white space, alphabetic, numeric, string quote, and comment character. Each
character can have zero or more of these attributes.
Whether line terminators are to be returned as tokens or treated as white space that
merely separates tokens.
Whether C-style comments are to be recognized and skipped.
Whether C++-style comments are to be recognized and skipped.
Whether the characters of identifiers are converted to lowercase.
A typical application first constructs an instance of this class, sets up the syntax tables,
and then repeatedly loops calling the nextToken method in each iteration of the loop until
it returns the value TT_EOF.
What is the purpose of Void class? - The Void class is an uninstantiable placeholder
class to hold a reference to the Class object representing the primitive Java type void.
No, an anonymous class can either implement an interface or extend a class at a particular
time but not both at the same time.
No,when features are friendly or protected they can be accessed from all the classes in
that package but not from classes in another package.
Personally I would recommend following ways to implement infinite loop in Java but
their can be other ways like calling a method recursively , though I never tested that.
- while (true)
- for (;;) { }
What is Exception ?
For every project you implement you need to have a project dependent exception class so
that objects of this type can be thrown so in order to cater this kind of requirement the
need for user defined exception class is realized.
for example:
What differentiates Beans from typical Java classes is introspection. The tools that
recognize predefined patterns in method signatures and class definitions can "look inside"
a Bean to determine its properties and behavior. A Bean's state can be manipulated at the
time it is being assembled as a part within a larger application. The application assembly
is referred to as design time in contrast to run time. In order for this scheme to work,
method signatures within Beans must follow a certain pattern in order for introspection
tools to recognize how Beans can be manipulated, both at design time, and run time.
-Djava.library.path=your_path
While setting the java.library.path property to "." instructs the Java virtual
machine to search for native libraries in the current directory.
And you execute your code as :
java -Djava.library.path=. HelloWorld
The "-D" command-line option sets a Java platform system property. But these
values are 'read only' like many of the system properties, the value in java.library.path
is just FYI and changing it doesn't actually change the behaviour of the JVM.
If you want to load a library from a specific location, you can use System.load() instead
with the full path to the library.
What is a thread?