Tips and Traps
-
Upload
javier-solis -
Category
Documents
-
view
216 -
download
0
Transcript of Tips and Traps
-
8/9/2019 Tips and Traps
1/3
Tips
an empty source file will compile without error
if a .java file does not contain a publicclass or interface it can have any name
a single-type import will take precedence over an import-on-demand import-on-demand types do not increase the size of the compiled code ie only the
types actually used are added to the code
while import-on-demand adds no overhead to the compiled code, they can slow downthe speed of the compile
a constructor body can include a return statement providing no value is returned
any method can throw a Runtime or Error exception without declaring it in the throwsclause
methods having the same name and parameter types do not have the same
signature unless the parameter types are listed in the same order
main() can be declared final
main() is inherited and can be overridden if not declared as final
args[0] references first command line argument after the application name ( arrays
in Java are zero-based)
main() can be declared public static void ... or static public void ...
the variable name does not have to be args; can be anything as long as
the type is String[]
variables can have the same name as a method or a class
only field variables are automatically initialized to their types default value; local
variables must be explicitly initialized
arrays are initialized to the default value of their type when they are created, not
declared, even if they are local variables
array index operator [] has highest level of precedence
integer variables can be used as array dimension values
postfix/prefix operators have the highest level of precedence
remember that when the postfix operator is used in an expression, the current valueof the variable is used
a class may be assigned to an Interface type if the class implements the interface orone of it's sub-interfaces
you cannot cast a primitive type to an object reference, or vice versa
you cannot cast a boolean type to another primitive type
String operations whose result does not alter the original string (ie calling
toUpperCase() on a String that is already in uppercase) return the original stringreference; otherwise they return a reference to a new String
Strings are immutable; the original String value can never be changed
all the primitive type wrapper classes override the Object.equals() method to
compare the value of the objects; the default Object.equals() method checks if the
variables reference the same object
you do not have to have a default statement in a switch() block
-
8/9/2019 Tips and Traps
2/3
the default statement in a switch() blcok can appear anywhere in the construct, does
not have to be last
all sections of the for() loop are optional
finalize() can only be executed once on any object
Traps
code with package or import declarations given in wrong order
more than one package declaration
file with more than one publicclass or interface declaration
filename.java does not match name ofpublicclass declared in the file
single-type imports for two classes in different packages but with the same simplename
single-type import with the same simple name as a class defined in the source file
attempting to import a package vs a type ie import java.util vsimport java.util.*
class attempting to extend more than one other class
class declared both final and abstract
an interface method declared as native or synchronized
an interface method declared as static
subclass with default constructor when the superclass does not have a no-argsconstructor or it's no-arg constructor has a throws clause
constructor declared with a return type
an abstract method also declared private, native, final, synchronized, or strictfp
an abstract method declared in a non-abstract class
a native or abstract method with a method body
method returning a type which is not convertible to the declared return type
a void method returning a value
a static method referencing this or super
main() declared other than according to the standard convention
local (automatic) variables declared with a modifier other than final
identifiers names beginning with a number or # sign
main listed as a possible keyword
capitalized words listed as possible keywords; particularly wrapper classes Integer,Boolean, etc
C/C++ keywords listed as possible Java keywords
an empty string vs null as the default value for a String object
incorrect array declaration statements, particularly:
arrayType [#] varName;
incorrect array initialization statements, particularly:arrayType[] varName = new arrayType[2];varName = { value, value, value };
negative values for array index
long value for array index
-
8/9/2019 Tips and Traps
3/3
array declaration used as an array creation statement
variables of primitive type handled as Objects
using the char literals \u000A or \u000D in comments or Strings
String literal "c" assigned to char type
using == operator to compare values of two different string reference variables
variables requiring narrowing conversion being passed to methods without usinga cast
assigning a typed byte or short variable to a char variable
floating point operation throwing an ArithmeticException
Bitwise operator precdence is: &^|
assigning subclasses with the same parent to each other
assigning a parent class to a subclass without a cast
result of an integer operation on byte or short types being assigned to a byte or short
without an explicit cast
a non-boolean value used for operand1 in a ternary expression
using == to compare the contents of two different String objects
using a new value based on a short-circuit operation that was never evaluated
code that results in a primitive value being changed in a method (can't happen)
code that results in an unchanged object value when it was changed in a method
failing to cast a value to match a method parameter type ie assuming narrowingconversion on a method call
a non-boolean value used in a loop or if( ) statement
using the assignment operator '=' vs '==' in an loop or if()statement
using an expression vs a value promotable to int in a switch()block
switch() blocks with duplicate case values
switch() blocks with incorrectly 'typed' case statements
switch() blocks with missing break statements (unintentionally causing code to fall
through to next case)
attempting to access a variable declared in the initialization outside of the for-loop
for()loop with incorrect initialization expression
for()loop with a non-boolean expression
a question that targets a specific object for garbage collection (can't be done)
a question that presumes to force the gc to run (can only suggest it run)