Chapter 8 java.lang package
· Object class is the ultimate
ancestor of all classes. If there is no extends clause, compiler inserts
‘extends object’. The following methods are defined in Object class. All methods
are public, if not specified otherwise.
|
Method |
Description |
|
boolean
equals(Object o) |
just does a
== comparison, override in descendents to provide meaningful comparison |
|
final native
void wait() final native
void notify() final native
void notifyAll() |
Thread
control. Two other versions of wait() accept timeout parameters and may
throw InterruptedException. |
|
native int
hashcode() |
Returns a hash code value for the object. If two objects are equal according to the
equals
method, then calling the hashCode method on each of the two
objects must produce the same integer result. |
|
protected
Object clone() throws CloneNotSupportedException
CloneNotSupportedException is a checked Exception |
Creates a new object of the same class as
this object. It then initializes each of the new object's fields by
assigning it the same value as the corresponding field in this object.
No constructor is called. The clone method of class Object will only
clone an object whose class indicates that it is willing for its instances
to be cloned. A class indicates that its instances can be cloned by
declaring that it implements the Cloneable interface. Also the method has
to be made public to be called from outside the class. Arrays have a public clone method. int ia[ ][ ] = { { 1 ,
2}, null }; int ja[ ][ ] = (int[ ] [
])ia.clone(); A clone of a multidimensional array is
shallow, which is to say that it creates only a single new array.
Subarrays are shared, so ia and ja are different but ia[0] and ja[0] are
same. |
|
final native
Class getClass() |
Returns the runtime class of an object. |
|
String
toString |
Returns the string representation of the
object. Method in Object returns a string consisting of the name of the
class of which the object is an instance, the at-sign character `@',
and the unsigned hexadecimal representation of the hash code of the
object. Override to provide useful information. |
|
protected void finalize() throws Throwable |
Called by the garbage collector on an object
when garbage collection determines that there are no more references to
the object. Any exception thrown by the finalize
method causes the finalization of this object to be halted, but is
otherwise ignored. The finalize method in Object does nothing.
A subclass overrides the finalize method to dispose of system
resources or to perform other cleanup. |
· Math class is final, cannot
be sub-classed.
· Math constructor is private,
cannot be instantiated.
· All constants and methods are
public and static, just access using class name.
· Two constants PI and E are
specified.
· Methods that implement
Trigonometry functions are native.
· All Math trig functions take
angle input in radians.
Angle
degrees * PI / 180 = Angle radians
· Order of floating/double values:
-Infinity
--> Negative Numbers/Fractions --> -0.0 --> +0.0 --> Positive Numbers/Fractions
--> Infinity
· abs – int, long, float,
double versions available
· floor – greatest integer
smaller than this number (look below towards the floor)
· ceil – smallest integer
greater than this number (look above towards the ceiling)
· For floor and ceil functions,
if the argument is NaN or infinity or positive zero or negative zero or already
a value equal to a mathematical integer, the result is the same as the argument.
· For ceil, if the argument is
less than zero but greater than –1.0, then the result is a negative zero
· random – returns a double
between 0.0(including) and 1.0(excluding)
· round returns a long for
double, returns an int for float. (closest int or long value to the argument)
The result
is rounded to an integer by adding ½ , taking the
floor of the result, and casting the result to type int / long.
(int)Math.floor(a + 0.5f)
(long)Math.floor(a + 0.5d)
· double rint(double) returns
closest double equivalent to a mathematical integer. If two values are equal, it
returns the even integer value. rint(2.7) is 3, rint(2.5) is 2.
· Math.min(-0.0, +0.0) returns
–0.0, Math.max(-0.0, +0.0) returns 0.0, -0.0 == +0.0 returns true.
· For a NaN or a negative
argument, sqrt returns a NaN.
· Every primitive type has a
wrapper class (some names are different – Integer, Boolean, Character)
· Wrapper class objects are
immutable.
· All Wrapper classes are
final.
· All wrapper classes, except
Character, have a constructor accepting string. A Boolean object, created by
passing a string, will have a value of false for any input other than “true”
(case doesn’t matter).
· Numeric wrapper constructors
will throw a NumberFormatException, if the passed string is not a valid number.
(empty strings and null strings also throw this exception)
· equals also tests the class
of the object, so even if an Integer object and a Long object are having the
same value, equals will return false.
· NaN’s can be tested
successfully with equals method.
Float f1 =
new Float(Float.NaN);
Float f2 =
new Float(Float.NaN);
System.out.println( ""+ (f1 == f2)+" "+f1.equals(f2)+ " "+(Float.NaN == Float.NaN) );
The above
code will print false true false.
· Numeric wrappers have 6
methods to return the numeric value – intValue(), longValue(), etc.
· valueOf method parses an
input string (optionally accepts a radix in case of int and long) and returns a
new instance of wrapper class, on which it was invoked. It’s a static method.
For empty/invalid/null strings it throws a NumberFormatException. For null
strings valueOf in Float and Double classes throw NullPointerException.
· parseInt and parseLong return
primitive int and long values respectively, parsing a string (optionally a
radix). Throw a NumberFormatException for invalid/empty/null strings.
· Numeric wrappers have
overloaded toString methods, which accept corresponding primitive values (also a
radix in case of int,long) and return a string.
· Void class represents void
primitive type. It’s not instantiable. Just a placeholder class.
· Strings are immutable.
· They can be created from a
literal, a byte array, a char array or a string buffer.
· Literals are taken from pool
(for optimization), so == will return true, if two strings are pointing to the
same literal.
· Anonymous String objects
(literals) may have been optimized even across classes.
· A String created by new
operator is always a different new object, even if it’s created from a literal.
· But a String can specify that
its contents should be placed in a pool of unique strings for possible reuse, by
calling intern() method. In programs that do a lot of String comparisons,
ensuring that all Strings are in the pool, allows to use == comparison rather
than the equals() method, which is slower.
· All string operations
(concat, trim, replace, substring etc) construct and return new strings.
· toUpperCase and toLowerCase
will return the same string if no case conversion was needed.
· equals takes an object
(String class also has a version of equals that accepts a String),
equalsIgnoreCase takes a string.
· Passing null to indexOf or
lastIndexOf will throw NullPointerException, passing empty string returns 0,
passing a string that’s not in the target string returns –1.
· trim method removes all
leading and trailing white-space from a String and returns a new String.
White-space means, all characters with value less than or equal to the space
character – ‘\u0020’.
· String class is final.
· + and += operators are
overloaded for Strings.
· reverse, append, insert are
not String methods.
· String Buffers are mutable
strings.
· StringBuffer is a final
class.
· They can be created empty,
from a string or with a capacity. An empty StringBuffer is created with
16-character capacity. A StringBuffer created from a String has the capacity of
the length of String + 16. StringBuffers created with the specified capacity has
the exact capacity specified. Since they can grow dynamically in size without
bounds, capacity doesn’t have much effect.
· append, insert, setCharAt,
reverse are used to manipulate the string buffer.
· setLength changes the length,
if the current content is larger than specified length, it’s truncated. If it is
smaller than the specified length, nulls are padded. This method doesn’t affect
the capacity.
· equals on StringBuffer does a shallow comparison. (same like ==) Will return
true only if the objects are same. Don’t use it to test content equality
· trim is not a StringBuffer
method.
· There is no relationship
between String and StringBuffer. Both extend Object class.
· String context means, ‘+’
operator appearing with one String operand. String concatenation cannot be
applied to StringBuffers.
· A new String buffer is
created.
· All operands are appended (by
calling toString method, if needed)
· Finally a string is returned
by calling toString on the String Buffer.
· String concatenation process
will add a string with the value of “null”, if an object reference is null and
that object is appearing in a concatenation expression by itself. But if we try
to access its members or methods, a NullPointerException is thrown. The same is
true for arrays, array name is replaced with null, but trying to index it when
it’s null throws a NullPointerException.
