What are the potential trips/traps in SCJP exam?
Answer: Provided by Ajith Kallambella (From Java Ranch: http://www.javaranch.com)
·
Two public classes in the same file.
·
Main method calling a non-static method.
·
Methods with the same name as the constructor(s).
·
Thread initiation with classes that dont have a run()
method.
·
Local inner classes trying to access non-final vars.
·
Case statements with values out of permissible range.
·
Math class being an option for immutable classes !!
·
instanceOf is not same as instanceof
·
Private constructors
·
An assignment statement which looks like a comparison if (
a=true)...
·
System.exit() in try-catch-finally blocks.
·
Uninitialized variable references with no path of proper
initialization.
·
Order of try-catch-finally blocks matters.
·
main() can be declared final.
·
-0.0 == 0.0 is true.
·
A class without abstract methods can still be declared
abstract.
·
RandomAccessFile descends from Object and implements
DataInput and DataOutput.
·
Map doesnot implement Collection.
·
Dictionary is a class, not an interface.
·
Collection is an Interface where as Collections is a
helper class.
·
Class declarations can come in any order ( derived first,
base next etc. ).
·
Forward references to variables gives compiler error.
·
Multi dimensional arrays can be sparce ie., if you imagine
the array as a matrix, every row need not have the same number of
columns.
·
Arrays, whether local or class-level, are always
initialized,
·
Strings are initialized to null, not empty string.
·
An empty string is NOT the same as a null string.
·
A declaration cannot be labelled.
·
continue must be in a loop( for, do , while ). It cannot
appear in case constructs.
·
Primitive array types can never be assigned to each other,
eventhough the primitives themselves can be assigned. ie.,
ArrayofLongPrimitives = ArrayofIntegerPrimitives gives compiler error
eventhough longvar = intvar is perfectly valid.
·
A constructor can throw any exception.
·
Initilializer blocks are executed in the order of
declaration.
·
Instance initializer(s) gets executed ONLY IF the objects
are constructed.
·
All comparisons involving NaN and a non-Nan would always
result false.
·
Default type of a numeric literal with a decimal point is
double.
·
integer (and long ) operations / and % can throw
ArithmeticException while float / and % will never, even in case of
division by zero.
·
== gives compiler error if the operands are
cast-incompatible.
·
You can never cast objects of sibling classes( sharing the
same parent ), even with an explicit cast.
·
.equals returns false if the object types are different.It
does not raise a compiler error.
·
No inner class can have a static member.
·
File class has NO methods to deal with the contents of the
file.
·
InputStream and OutputStream are abstract classes, while
DataInput and DataOutput are interfaces.
|