Java Possible Coding Errors

Java Possible Coding Errors

Rulesavailableinthiscategory:

  1. Use_proper_primitive_type_literals
  2. Do_not_instantiate_class_before_initializing_static_final_fields
  3. Do_not_create_threads_using_the_default_empty_run_method
  4. Avoid_calling_wait_on_Condition_object
  5. Possible_bug_in_method_invocation_on_an_immutable_object
  6. Possible_NPE_due_to_earlier_check_against_null
  7. Possible_overflow_in_average_computation_for_large_numbers
  8. Avoid_comparing_with_one_to_check_if_number_is_odd
  9. Possible_bug_in_control_flow_statement
  10. Remainder_of_32-bit_signed_random_integer_could_be_negative
  11. Remainder_of_hashCode_could_be_negative
  12. Possible_ConcurrentModificationException
  13. Possible_bug_in_the_usage_of_loop_variables
  14. Avoid_more_than_one_getter_or_setter_per_field
  15. Possible_null_pointer_exception_during_constructor_execution
  16. Ensure_boxing_unboxing_correct_behaviour
  17. Possible_typos_in_wrapper_class
  18. Always_compare_chars_with_values_within_their_range
  19. Avoid_using_put_putAll_and_get_methods_for_java.util.Properties_objects
  20. Avoid_dangling_else_statements
  21. Avoid_calling_equals_on_unrelated_types
  22. Avoid_unconditional_wait
  23. Avoid_waiting_with_two_locks_held
  24. Avoid_calling_notify_on_unlocked_objects
  25. Interface_method_conflicts_with_protected_Object_method
  26. Avoid_using_char_array_in_string_concatenation
  27. Avoid_calling_wait_on_unlocked_objects
  28. Avoid_calling_Thread_sleep_with_lock_held
  29. Avoid_declaring_variables_of_type_ThreadGroup
  30. Possible_bug_in_assigning_value_to_boolean
  31. Questionable_Octate_Escape_In_String
  32. Switch_case_does_not_cover_all_enums
  33. Invalid_regular_expression_syntax
  34. Possibly_incorrect_regular_expression_pattern
  35. Avoid_adding_collection_to_itself
  36. Always_rethrow_ThreadDeath
  37. Avoid_possible_typos_in_switch_statement
  38. Use_System_dot_exit_with_care
  39. Avoid_wrong_increment_in_for
  40. Never_call_overridable_method_from_constructor
  41. Avoid_assigning_values_to_method_parameter
  42. Avoid_non_Serializable_field_inside_Serializable_Class
  43. Avoid_serializable_class_extending_a_class_without_a_zero_arg_constructor
  44. Always_null_pointer_exception
  45. Possible_null_pointer_exception_passing_null_value_as_method_parameter
  46. Always_class_cast_exception
  47. Avoid_calling_applet_methods_relying_on_stubs_in_constructor
  48. Avoid_double_checked_locking
  49. Avoid_immediate_dereference_of_readLine
  50. Result_of_readLine_not_used
  51. Declare_Runnable_run_as_synchronized
  52. Avoid_TODO_comments
  53. Avoid_using_spin_locks
  54. Avoid_down_casting_to_concrete_collection
  55. Bad_cast_to_another_abstract_collection
  56. Avoid_empty_statement
  57. Avoid_fields_with_closely_similar_names
  58. Avoid_mutable_exception
  59. Do_not_cast_to_lower_precision
  60. Avoid_casting_without_check
  61. Do_not_cast_integer_division_to_double
  62. Do_not_cast_integer_multiplication_to_long
  63. Use_random_nextInt
  64. Avoid_casting_random_value_to_integer
  65. Overwritten_increment
  66. Overwritten_decrement
  67. Invalid_month_argument
  68. Do_not_call_run_explicitly
  69. Avoid_catching_IllegalMonitorStateException
  70. Always_call_swing_methods_in_swing_event_thread
  71. Erroneous_use_of_binary_AND_with_ZERO
  72. Erroneous_use_of_binary_AND
  73. Declare_Object_as_parameter_for_compareTo_method
  74. Always_explicitly_initialize_all_fields_in_a_constructor
  75. Avoid_passing_decimal_literals_to_BigDecimal_constructor
  76. Use_string_equals_method
  77. Avoid_circular_initialization_for_static_fields
  78. Always_ensure_get_set_methods_access_correct_fields
  79. Declare_fields_of_user-defined_Exception_as_final_or_private
  80. Avoid_overloading_methods_on_argument_types
  81. Private_field_is_never_written
  82. Do_not_call_synchronized_method_from_synchronized_method
  83. Always_place_literals_first_in_string_comparison
  84. Avoid_equals_operator_for_decimal_point_values
  85. Avoid_returning_java_lang_Object
  86. Avoid_invoking_runFinalizersOnExit
  87. Avoid_contiguous_non_String_values_during_concatenation
  88. Conditional_expression_always_evaluates_to_constant_value
  89. Avoid_accessing_uninitialized_fields_in_constructors
  90. Avoid_accessing_uninitialized_fields
  91. Avoid_Serializable_class_having_non_Serializable_parent
  92. Avoid_comparison_with_float_NaN
  93. Declare_get_method_synchronized
  94. Avoid_using_float_or_double
  95. Avoid_assigning_variable_to_same_variable
  96. Erroneous_use_of_binary_OR
  97. Avoid_unsynchronized_lazy_initialization_of_static_field
  98. Avoid_using_volatile_modifier_for_array
  99. Avoid_synchronization_on_mutable_field
  100. Avoid_methods_with_closely_similar_names
  101. Use_serializable_objects_as_argument
  102. Do_not_call_methods_that_use_AppletStub
  103. readResolve_method_should_have_java_lang_Object_as_its_return_type
  104. Avoid_setSize_in_componentResized
  105. Avoid_unnecessary_call_to_Math_ceil
  106. Avoid_unnecessary_call_to_Math_class_method
  107. Always_use_method_return_values
  108. Always_check_return_value_of_input_stream_read
  109. Always_check_return_value_of_input_stream_skip
  110. Erroneous_indexOf_check
  111. Calling_equals_of_final_classes
  112. Possible_infinite_recursion
  113. Possible_infinite_loop
  114. instanceOf_will_always_return_false
  115. Avoid_classes_that_are_not_accessible
  116. Avoid_rethrowing_an_exception_in_a_catch_clause
  117. Avoid_initializing_array_dimensions_with_negative_values
  118. Use_Equals_Instead_Equality_Operator
  119. Possible_spelling_mistake_while_overriding_method
  120. Do_not_use_zero_as_index_with_resuset
  121. Do_not_use_zero_as_index_with_PreparedStatement
  122. Always_call_wait_inside_while_or_doWhile_loop
  123. Always_call_Condition_await_inside_a_loop
  124. Avoid_public_semaphores
  125. Do_not_call_interrupted_method_on_thread_object
  126. Avoid_unnecessary_comparison_of_two_null_references
  127. Avoid_unnecessary_comparison_of_non_null_reference_with_null_reference
  128. Avoid_unnecessary_comparison_with_int
  129. Do_not_start_Thread_in_constructor
  130. Classes_or_interfaces_having_same_name_as_java_file_should_be_public
  131. Always_ensure_only_one_class_or_interface_has_same_name_as_java_file
  132. Avoid_returning_this
  133. Avoid_calling_getResource_on_getClass
  134. Non_instantiable_class_should_contain_non_private_static_method
  135. Do_not_override_synchronized_method_with_unsynchronized_method

Rule1:Use_proper_primitive_type_literals

Severity:Medium
Rule:Useproperprimitivetypeliteralswhereeveravailable.
Reason:Useproperprimitivetypeliteralswhereeveravailable.

UsageExample:

packagecom.rule;
publicclassUse_proper_primitive_type_literals_violation
{
	publicvoidmethod()
	{
		floatf2=0;//VIOLATION
	}
}

Shouldbewrittenas:

packagecom.rule;
publicclassUse_proper_primitive_type_literals_correction
{
	publicvoidmethod()
	{
		floatf2=0.0f;//CORRECTION
	}
}

Reference:ReferenceNotAvailable.

Rule2:Do_not_instantiate_class_before_initializing_static_final_fields

Severity:Medium
Rule:Creatinganinstanceoftheclassbeforeinitializingstaticfinalfieldscancauseerrors.
Reason:Creatinganinstanceoftheclassbeforeinitializingstaticfinalfieldscancauseerrors.

UsageExample:

packagecom.rule;

publicclassDo_not_instantiate_class_before_initializing_static_final_fields_violation
{
	privatestaticfinallongMAX_VALUE;
	privatestaticDo_not_instantiate_class_before_initializing_static_final_fields_violationinstance;
	
	static
	{
		instance=newDo_not_instantiate_class_before_initializing_static_final_fields_violation();//VIOLATION
		MAX_VALUE=1000;
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassDo_not_instantiate_class_before_initializing_static_final_fields_correction
{
	privatestaticfinallongMAX_VALUE;
	privatestaticDo_not_instantiate_class_before_initializing_static_final_fields_correctioninstance;
	
	static
	{
		MAX_VALUE=1000;
		instance=newDo_not_instantiate_class_before_initializing_static_final_fields_correction();//CORRECTION
	}
}

Reference:Noreferenceavailable.

Rule3:Do_not_create_threads_using_the_default_empty_run_method

Severity:High
Rule:Sincethethreadhasnotasktoexecute,itsimplywastestimeanddegradesperformance.
Reason:Sincethethreadhasnotasktoexecute,itsimplywastestimeanddegradesperformance.

UsageExample:

classNoopThreadextendsThread
{
	publicNoopThread()
	{
		
	}
	
	publicNoopThread(Strings,ThreadGrouptg)
	{
		super(tg,s);
	}
	
	publicNoopThread(Runnabler)
	{
		super(r);
	}

	publicvoidtest1(){
		Threadt=newNoopThread();
		t.start();
	}

	publicvoidtest2(){
		Threadt=newThread("CoolThread");//VIOLATION
		t.start();
	}

	publicvoidtest3(){
		ThreadGrouptg=newThreadGroup("MyCoolThreadGroup");
		Threadt=newThread(tg,"CoolThread");//VIOLATION
		t.start();
	}
	
	publicvoidrun()
	{
		super.run();
		//...
	}

}

Shouldbewrittenas:

classNoopThreadextendsThread
{
	privateRunnabler=null;

	publicNoopThread()
	{
		
	}
	
	publicNoopThread(Strings,ThreadGrouptg)
	{
		super(tg,s);
	}
	
	publicNoopThread(Runnabler)
	{
		super(r);
		this.r=r;
	}

	publicvoidtest1(){
		Threadt=newNoopThread();
		t.start();
	}

	publicvoidtest2(){
		Threadt=newThread(r,"CoolThread");//FIXED
		t.start();
	}

	publicvoidtest3(){
		ThreadGrouptg=newThreadGroup("MyCoolThreadGroup");
		Threadt=newThread(tg,r,"CoolThread");//FIXED
		t.start();
	}
	
	publicvoidrun()
	{
		super.run();
		//...
	}

}

Reference:NotAvailable.

Rule4:Avoid_calling_wait_on_Condition_object

Severity:Medium
Rule:WaitingforaConditionshouldbedoneusingoneoftheawaitmethodsdefinedbytheConditioninterface.
Reason:WaitingforaConditionshouldbedoneusingoneoftheawaitmethodsdefinedbytheConditioninterface.

UsageExample:

importjava.util.concurrent.locks.*;

publicclassTest
{
	intx;

	voidwaitOnCondition(Conditioncond)throwsInterruptedException
	{
			while(x==0)
			{
				cond.wait();//VIOLATION
			}
	}
}

Shouldbewrittenas:

importjava.util.concurrent.locks.*;

publicclassTest
{
	intx;

	voidwaitOnCondition(Conditioncond)throwsInterruptedException
	{
			while(x==0)
			{
				cond.await();//FIXED
			}
	}
}

Reference:NotAvailable.

Rule5:Possible_bug_in_method_invocation_on_an_immutable_object

Severity:Medium
Rule:Anoperationonanimmutableobjectwon'tchangetheobjectitself.
Reason:Anoperationonanimmutableobjectwon'tchangetheobjectitself.

UsageExample:

importjava.math.*;

publicclassTest
{
	voidfubar()
	{
		BigDecimalbd=newBigDecimal(10);
		bd.add(newBigDecimal(5));//VIOLATION
	}
}

Shouldbewrittenas:

importjava.math.*;

publicclassTest
{
	voidfubar()
	{
		BigDecimalbd=newBigDecimal(10);
		bd=bd.add(newBigDecimal(5));//FIXED
	}
}

Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.htmlandhttp://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html

Rule6:Possible_NPE_due_to_earlier_check_against_null

Severity:Medium
Rule:Thevariablereferencedatthispointisknowntobenullduetoanearliercheckagainstnull.
Reason:Thevariablereferencedatthispointisknowntobenullduetoanearliercheckagainstnull.

UsageExample:

publicclassTest
{
	publicvoidfubar()
	{
		ObjectnullObject=null;
		if(nullObject==null)
		{
			try
			{
				System.out.println("hello");
				nullObject="notnull";
			}
			catch(RuntimeExceptionex)
			{
				System.out.println(nullObject.getClass());//VIOLATION
			}
		}
	}
}

Shouldbewrittenas:

publicclassTest
{
	publicvoidfubar()
	{
		ObjectnullObject=null;
		if(nullObject!=null)//FIXED
		{
			try
			{
				System.out.println("hello");
				nullObject="notnull";
			}
			catch(RuntimeExceptionex)
			{
				System.out.println(nullObject.getClass());
			}
		}
	}
}

Reference:NotAvailable.

Rule7:Possible_overflow_in_average_computation_for_large_numbers

Severity:Medium
Rule:Ifthesumofthetwonumbersisgreaterthanthemaximumpositiveintvalue,thenitoverflowstoanegativevalue,andthevaluestaysnegativewhendividedbytwo.
Reason:Ifthesumofthetwonumbersisgreaterthanthemaximumpositiveintvalue,thenitoverflowstoanegativevalue,andthevaluestaysnegativewhendividedbytwo.

UsageExample:

publicclassTest
{
	publicstaticintbinarySearch(int[]a,intkey)
	{
		intlow=0;
		inthigh=a.length-1;
		while(low<=high)
		{
			intmid=(low+high)/2;//VIOLATION
			intmidVal=a[mid];
			if(midVal<key)
			{
				low=mid+1;
			}
			elseif(midVal>key)
			{
				high=mid-1;
			}
			else
			{
				returnmid;//keyfound
			}
		}
		return-(low+1);//keynotfound.
	}		
}

Shouldbewrittenas:

publicclassTest
{
	publicstaticintbinarySearch(int[]a,intkey)
	{
		intlow=0;
		inthigh=a.length-1;
		while(low<=high)
		{
			intmid=(low+high)>>>1;//FIXED
			intmidVal=a[mid];
			if(midVal<key)
			{
				low=mid+1;
			}
			elseif(midVal>key)
			{
				high=mid-1;
			}
			else
			{
				returnmid;//keyfound
			}
		}
		return-(low+1);//keynotfound.
	}		
}

Reference:http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html

Rule8:Avoid_comparing_with_one_to_check_if_number_is_odd

Severity:Medium
Rule:Itwontworkfornegativenumbers.
Reason:Itwontworkfornegativenumbers.

UsageExample:

publicclassTest
{
	publicbooleanisOdd(intx)
	{
		returnx%2==1;//VIOLATION
	}
}

Shouldbewrittenas:

publicclassTest
{
	publicbooleanisOdd(intx)
	{
		returnx%2!=0;//FIXED
	}
}

Reference:NotAvailable.

Rule9:Possible_bug_in_control_flow_statement

Severity:Medium
Rule:Havinganemptystatementasthebodymighthavenotbeenintended.
Reason:Havinganemptystatementasthebodymighthavenotbeenintended.

UsageExample:

publicclassTest
{
	publicstaticvoidmain(String[]args)
	{
		if(args.length==1);//VIOLATION
			System.out.println(args[0]);	
	}
}

Shouldbewrittenas:

publicclassTest
{
	publicstaticvoidmain(String[]args)
	{
		if(args.length==1)//FIXED
			System.out.println(args[0]);	
	}
}

Reference:NotAvailable.

Rule10:Remainder_of_32-bit_signed_random_integer_could_be_negative

Severity:Medium
Rule:Pleaseensurethatthepossibilityoftheresultoftheremainderoperationbeingnegativeishandled.
Reason:Pleaseensurethatthepossibilityoftheresultoftheremainderoperationbeingnegativeishandled.

UsageExample:

importjava.security.SecureRandom;
importjava.util.Random;

classTest
{
	Randomr=newRandom();
	SecureRandomsr=newSecureRandom();

	publicintgetRandomElement(inta[])
	{
		returna[r.nextInt()%a.length];//VIOLATION
	}
	
	publicintgetSecureRandomElement(inta[])
	{
		returna[sr.nextInt()%a.length];//VIOLATION
	}
}

Shouldbewrittenas:

importjava.security.SecureRandom;
importjava.util.Random;

classTest
{
	Randomr=newRandom();
	SecureRandomsr=newSecureRandom();

	publicintgetRandomElement(inta[])
	{
		intindex=r.nextInt()%a.length;
		if(index!=-1)
		{
			returna[index];//FIXED
		}
	}
	
	publicintgetSecureRandomElement(inta[])
	{
		intindex=sr.nextInt()%a.length;
		if(index!=-1)
		{
			returna[sr.nextInt()%a.length];//FIXED	
		}

	}
}

Reference:NotAvailable.

Rule11:Remainder_of_hashCode_could_be_negative

Severity:Medium
Rule:Pleaseensurethatthepossibilityoftheresultoftheremainderoperationbeingnegativeishandled.
Reason:Pleaseensurethatthepossibilityoftheresultoftheremainderoperationbeingnegativeishandled.

UsageExample:

publicclassTest
{
	publicstaticObjectgetHashBucket(Objecta[],Objectx)
	{
		returna[x.hashCode()%a.length];//VIOLATION
	}
	publicstaticObjectgetHashBucket2(Objecta[],Objectx)
	{
		inti=x.hashCode()%a.length;//VIOLATION
		returna[i];
	}
}

Shouldbewrittenas:

publicclassTest
{
	publicstaticObjectgetHashBucket(Objecta[],Objectx)
	{
		returna[Math.abs(x.hashCode()%a.length)];//FIXED
	}
	publicstaticObjectgetHashBucket2(Objecta[],Objectx)
	{
		inti=Math.abs(x.hashCode()%a.length);//FIXED
		returna[i];
	}
}

Reference:NotAvailable.

Rule12:Possible_ConcurrentModificationException

Severity:Medium
Rule:PossibilityofaConcurrentModificationExceptiontobethrownatruntime.
Reason:PossibilityofaConcurrentModificationExceptiontobethrownatruntime.

UsageExample:

importjava.util.*;

publicclassTest
{
	publicvoidsomeMethod(Collectioncollection)
	{
		Iteratoriter=collection.iterator();
		while(iter.hasNext())
		{
			Objectelement=iter.next();
			collection.remove(element);//VIOLATION
		}
	}
}

Shouldbewrittenas:

importjava.util.*;

publicclassTest
{
	publicvoidsomeMethod(Collectioncollection)
	{
		Iteratoriter=collection.iterator();
		while(iter.hasNext())
		{
			iter.remove();//FIXED
		}
	}
}

Reference:NotAvailable.

Rule13:Possible_bug_in_the_usage_of_loop_variables

Severity:High
Rule:Thereisahighprobabilitythatthewrongvariablewasusedintheloop.
Reason:Thereisahighprobabilitythatthewrongvariablewasusedintheloop.

UsageExample:

publicclassTest
{
publicvoidmyMethod()
{
int[]a=newint[5];

for(inti=0;i<a.length;i++)
	{
int[]b=newint[5];
for(intj=0;j<b.length;j++)
	{
b[i]=1;//VIOLATION
}
}
for(intj=0;j<a.length;i++)//VIOLATION
	{
System.out.println("Theindexis:"+j);
}
}
}

Shouldbewrittenas:

publicclassTest
{
publicvoidmyMethod()
{
int[]a=newint[5];

for(inti=0;i<a.length;i++)
	{
int[]b=newint[5];
for(intj=0;j<b.length;j++)
	{
b[j]=1;//FIXED
}
}
for(intj=0;j<a.length;j++)//FIXED
	{
System.out.println("Theindexis:"+j);
}
}
}

Reference:NotAvailable.

Rule14:Avoid_more_than_one_getter_or_setter_per_field

Severity:Medium
Rule:Itispossiblethatthesecondgetterorsetterwasmeanttoaccessorsetanotherfield.
Reason:Itispossiblethatthesecondgetterorsetterwasmeanttoaccessorsetanotherfield.

UsageExample:

publicclassTest
{
privateObject_obj,_obj1;

publicObjectgetObj()
{
return_obj;
}

publicObjectgetObj1(intnum)//VIOLATION
{
return_obj;
}
}

Shouldbewrittenas:

publicclassTest
{
privateObject_obj,_obj1;

publicObjectgetObj()
{
return_obj;
}

publicObjectgetObj1(intnum)
{
return_obj1;			//FIXED
}
}

Reference:NotAvailable.

Rule15:Possible_null_pointer_exception_during_constructor_execution

Severity:High
Rule:Violatesonpossiblecasesofmethodinvocationsfromconstructorswhichthrowanullpointerexception.
Reason:Violatesonpossiblecasesofmethodinvocationsfromconstructorswhichthrowanullpointerexception.

UsageExample:

publicclassTest
{
	publicTest()
	{
		methodThrowingNPE();	//VIOLATION
	}

	protectedvoidmethodThrowingNPE()
	{
		//...
	}
}

classSubextendsTest
{
	Sub()
	{
		//...
	}
	
	protectedvoidmethodThrowingNPE()
	{
		Objects=null;
		inti=2;
		if(i==3)
		{
			s=newObject();
		}
		System.out.println(s.toString());
	}
	
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule16:Ensure_boxing_unboxing_correct_behaviour

Severity:MediumRule:Autoboxingcapabilitycanleadtounexpectedbehaviorespeciallywhenpassingarguments.Reason:Autoboxingcapabilitycanleadtounexpectedbehaviorespeciallywhenpassingarguments.

UsageExample:

publicclassTest
{

	publicstaticvoidmain(String[]args)
	{
		Integernumber=newInteger(10);
		newTest().foo(number/10);//VIOLATION
	}

	privatevoidfoo(inti)
	{
		System.out.println("primitive="+i);
	}
	
	privatevoidfoo(Integeri)
	{
		System.out.println("wrapper="+i);
	}

}

Shouldbewrittenas:

Intheabovecodefoo(int)methodwillbecalledandnotfoo(Integer);pleaseensureifthisisexpectedbehaviour.

Reference:NoreferencesAvailable.

Rule17:Possible_typos_in_wrapper_class

Severity:Medium
Rule:Possibletyposinargumentstowrapperclasses.
Reason:Possibletyposinargumentstowrapperclasses.

UsageExample:

publicclassTypos
{
	Integeri=newInteger("15A");//VIOLATION

	publicBooleanmyMethod()
	{
		returnBoolean.valueOf("true");//VIOLATION,wouldreturn"false"
	}
}

Shouldbewrittenas:

publicclassTypos
{
	Integeri=newInteger("10");	//CORRECTION

	publicBooleanmyMethod()
	{
		returnBoolean.valueOf("true");//CORRECTION
	}

}

Reference:Noreferencesavailable.

Rule18:Always_compare_chars_with_values_within_their_range

Severity:Medium
Rule:Iftheconstantisnotwithintherangeofpossible"char"value,thebooleanwouldalwaysresulttotrueorfalse.
Reason:Iftheconstantisnotwithintherangeofpossible"char"value,thebooleanwouldalwaysresulttotrueorfalse.

UsageExample:

publicclassAlwaysCompareCharsWithValuesWithinTheirRange
{
publicstaticStringgetAsciiString(StringinString)
{
StringBufferoutStringBuffer=newStringBuffer();
for(inti=0;i<inString.length();i++)
	{
charcurrentChar=inString.charAt(i);
if(currentChar>-1&&currentChar<256)	//VIOLATION
		{				
outStringBuffer.append(currentChar);
}
}
returnoutStringBuffer.toString();
}
}

Shouldbewrittenas:

publicclassAlwaysCompareCharsWithValuesWithinTheirRange
{
	publicstaticStringgetAsciiString(StringinString)
	{
StringBufferoutStringBuffer=newStringBuffer();
for(inti=0;i<inString.length();i++)
	{
charcurrentChar=inString.charAt(i);
if(currentChar<256)						//CORRECTION
		{
outStringBuffer.append(currentChar);
}
}
returnoutStringBuffer.toString();
}
}

Reference:

Rule19:Avoid_using_put_putAll_and_get_methods_for_java.util.Properties_objects

Severity:Medium
Rule:Using'put'and'putAll'mightallownon-stringentries,whichshouldbeavoidedandgetPropertydirectlyreturnsastringasareturnvalue.
Reason:Using'put'and'putAll'mightallownon-stringentries,whichshouldbeavoidedandgetPropertydirectlyreturnsastringasareturnvalue.

UsageExample:

publicclassPropClass
{
java.util.Propertiesproperties=newjava.util.Properties();

publicStringsomeMethod()
{
properties.put("A","someString");//VIOLATION
return(String)properties.get("A");//VIOLATION
}
}

Shouldbewrittenas:

publicclassPropClass
{
java.util.Propertiesproperties=newjava.util.Properties();

publicStringsomeMethod()
{
properties.setProperty("A","someString");//CORRECTION
returnproperties.getProperty("A");//CORRECTION

}
}

Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html

Rule20:Avoid_dangling_else_statements

Severity:Medium
Rule:Danglingelsestatementleadtoambiguityandpossibleerrorinlogic.
Reason:Danglingelsestatementleadtoambiguityandpossibleerrorinlogic.

UsageExample:

publicclassAvoidDanglingElseStatements
{
voidmethod()
{
intnum=23;
if(num<24)//VIOLATION:shouldhave"{}"braces
if(num<5)
num++;
else
num--;
}
}

Shouldbewrittenas:

publicclassAvoidDanglingElseStatements
{
voidmethod()
{
intnum=23;
if(num<24)
	{					//CORRECTION
if(num<5)
num++;
	}
else
	{
num--;
	}
}
}

Reference:Noreferencesavailable.

Rule21:Avoid_calling_equals_on_unrelated_types

Severity:Medium
Rule:Thisequalscomparisonwillalwaysreturnfalse.
Reason:Thisequalscomparisonwillalwaysreturnfalse.

UsageExample:

importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.Vector;

publicclassTest
{
	publicvoidaMethod()
	{
		Collectional=newArrayList();
		Collectionv=newVector();
		if(al.equals(v))//VIOLATION
		{
			System.out.println("Neverhere");
		}
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule22:Avoid_unconditional_wait

Severity:MediumRule:Thecalltojava.lang.Object.wait()isnotwithinaconditionalcontrolflow.Reason:Thecalltojava.lang.Object.wait()isnotwithinaconditionalcontrolflow.

UsageExample:

publicclassTest
{
	voidclueless()throwsException
	{
		synchronized(this)
		{
			this.wait();//VIOLATION
		}
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule23:Avoid_waiting_with_two_locks_held

Severity:MediumRule:Avoidwaitingonamonitorwhiletwolocksareheld.Reason:Avoidwaitingonamonitorwhiletwolocksareheld.

UsageExample:

publicclassTest
{
	Objectlock=newObject();

	Objectvalue;

	publicsynchronizedvoidnotifyMethod(Objectv)
	{
		synchronized(lock)
		{
			value=v;
			lock.notifyAll();
		}
	}
	
	publicsynchronizedObjectwaitMethod()throwsInterruptedException
	{
		synchronized(lock)
		{
			while(value==null)
			{
				lock.wait();//VIOLATION
			}
			returnvalue;
		}
	}

	publicvoidsomeMethod(Objecta,Objectb)
	{
		try
		{
			synchronized(a)
			{
				synchronized(b)
				{
					a.wait();//VIOLATION
				}
			}
		}catch(InterruptedExceptione)
		{
			System.out.println("Interrupted");
		}
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule24:Avoid_calling_notify_on_unlocked_objects

Severity:CriticalRule:Thismethodcallsnotify()ornotifyAll()withoutobviouslyholdingalockontheobject.Reason:Thismethodcallsnotify()ornotifyAll()withoutobviouslyholdingalockontheobject.

UsageExample:

publicclassTest
{
	publicvoidbar(Objecta,Objectb)throwsInterruptedException{
		synchronized(a){
			b.notify();//VIOLATION
			b.notifyAll();//VIOLATION
		}
	}
}

Shouldbewrittenas:

publicclassTest
{
	publicvoidbar(Objecta,Objectb)throwsInterruptedException{
		synchronized(b){
			b.notify();
			b.notifyAll();
		}
	}
}

Reference:Noreferencesavailable.

Rule25:Interface_method_conflicts_with_protected_Object_method

Severity:Critical
Rule:ThisinterfacehasamethodwhichisincompatiblewiththeprotectedObjectmethod.
Reason:ThisinterfacehasamethodwhichisincompatiblewiththeprotectedObjectmethod.

UsageExample:

interfacesomeInterface
{
	intclone();//VIOLATION	
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule26:Avoid_using_char_array_in_string_concatenation

Severity:CriticalRule:ThechararrayisnotconvertedtoanequivalentString.Reason:ThechararrayisnotconvertedtoanequivalentString.

UsageExample:

publicclassTest
{
	publicvoidaMethod()
	{
		Stringh="hello";
		char[]arr={'w','o','r','l','d'};
		Stringmsg=h+""+arr;//VIOLATION
	}
}

Shouldbewrittenas:

publicclassTest
{
	publicvoidaMethod()
	{
		Stringh="hello";
		char[]arr={'w','o','r','l','d'};
		Stringworld=String.valueOf(arr);
		Stringmsg=h+""+world;
	}
}

Reference:Noreferencesavailable.

Rule27:Avoid_calling_wait_on_unlocked_objects

Severity:Critical
Rule:Thismethodcallswait()withoutobviouslyholdingalockontheobject.
Reason:Thismethodcallswait()withoutobviouslyholdingalockontheobject.

UsageExample:

publicclassTest
{
	publicvoidfoo(Objecta,Objectb)throwsInterruptedException
	{
		synchronized(a)
		{
			b.wait();//VIOLATION
		}
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule28:Avoid_calling_Thread_sleep_with_lock_held

Severity:MediumRule:AvoidcallingThread.sleep(),whilelockheld.Reason:AvoidcallingThread.sleep(),whilelockheld.

UsageExample:

packagecom.rule;

publicclassAvoid_calling_Thread_sleep_with_lock_held_violation
{
	publicsynchronizedvoidmethod()
	{
		longtime=100000;
		try
		{
			Thread.sleep(time);		//Violation.
		}
		catch(InterruptedExceptione)
		{
			//HandleException.
		}	
	}
		
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_calling_Thread_sleep_with_lock_held_correction
{
	publicsynchronizedvoidmethod()
	{
		try
		{
			wait();//Correction.
		}
		catch(InterruptedExceptione)
		{
			//HandleException.
		}	
	}
	
}

Reference:Referencenotavailable.

Rule29:Avoid_declaring_variables_of_type_ThreadGroup

Severity:Medium
Rule:AvoiddeclaringvariablesoftypeThreadGroup
Reason:AvoiddeclaringvariablesoftypeThreadGroup

UsageExample:

publicclassThreadGroupTest
	{
publicstaticvoidmain(String[]args)
{
ThreadGroupsquares=newThreadGroup("Squares");//VIOLATION
Threadt1=newThread(squares,newT(),"t1");
Threadt2=newThread(squares,newT(),"t2");
t1.start();
t2.start();
System.out.println("ThreadGroupnameis:"+squares.getName());
System.out.println("Therearecurrently"+squares.activeCount()+"threadsrunning");
System.out.println("ThemaximumpriorityofaThreadthatcanbecontained
within"+squares.getName()+"is"+squares.getMaxPriority());
System.out.println("Therearecurrently"+squares.activeGroupCount()+"activegroups");
System.out.println(squares.getName()+"parentis"+squares.getParent());
}
}

classTimplementsRunnable
{
privateintsquare;

publicvoidrun()
{
for(inti=1;i<5;i++)
{
square=i*i;
System.out.println("Thread"+Thread.currentThread().getName()+
	"hasapriorityof"+Thread.currentThread().getPriority()+
	":"+square);
}
}
}

Shouldbewrittenas:

AvoidusingThreadGroup.

Reference:JoshuaBloch:"EffectiveJava-ProgrammingLanguageGuide"

Rule30:Possible_bug_in_assigning_value_to_boolean

Severity:Low
Rule:Mostprobablythiswassupposedtobeabooleancomparisonusing==,notanassignmentusing=
Reason:Mostprobablythiswassupposedtobeabooleancomparisonusing==,notanassignmentusing=

UsageExample:

classTest
{
	publicvoidtest1(booleanb)
	{
		if(b=true)//VIOLATION
		{
			System.out.println("Hi");
		}
	}

	publicvoidtest2(inta,intb,intc,intd,booleane)
	{
		if(e=false)//VIOLATION
		{
			System.out.println("Hi");
		}
	}

	publicvoidtest3(booleanb)
	{
		while(b=true)//VIOLATION
		{
			System.out.println("Wow");
		}
	}

}

Shouldbewrittenas:

classTest
{
	publicvoidtest1(booleanb)
	{
		if(b)//FIXED
		{
			System.out.println("Hi");
		}
	}

	publicvoidtest2(inta,intb,intc,intd,booleane)
	{
		if(!e)//FIXED
		{
			System.out.println("Hi");
		}
	}

	publicvoidtest3(booleanb)
	{
		while(b)//FIXED
		{
			System.out.println("Wow");
		}
	}

}

Reference:NotAvailable.

Rule31:Questionable_Octate_Escape_In_String

Severity:High
Rule:AvoidquestionableuseofOctateEscapeInString
Reason:AvoidquestionableuseofOctateEscapeInString

UsageExample:

packagecom.rule;

classQuestionable_Octate_Escape_In_String_violation
{
	publicvoidmethod()
	{
		Stringstr="Allowed:\012";

		Stringstr1="Allowed:\377";

		System.out.println("suspicious:\128");	//Violation.

		Stringstr2="suspicious:\318\013";	//Violation.

		Stringstr3="suspicious:\013\318";	//Violation.
	}
}

Shouldbewrittenas:

 

Reference:Noreferenceavailable

Rule32:Switch_case_does_not_cover_all_enums

Severity:HighRule:Thecompilercanoptionallyflagincompleteenumswitchstatements.Reason:Thecompilercanoptionallyflagincompleteenumswitchstatements.

UsageExample:

publicclassBadSwitch
{
	voidfubar(Colorsc)	
	{
		switch(c)//VIOLATION
		{
			caseBLUE:
			caseWHITE:
			{
				//....
				break;
			}
		}
	}
}

enumColors
{
	BLUE,WHITE,RED;
}

Shouldbewrittenas:

publicclassBadSwitch
{
	voidfubar(Colorsc)	
	{
		switch(c)//FIXED
		{
			caseRED:
			{
				//..
				break;
			}
			caseBLUE:
			caseWHITE:
			{
				//....
				break;
			}
		}
	}
}

enumColors
{
	BLUE,WHITE,RED;
}

Reference:Noreferenceavailable.

Rule33:Invalid_regular_expression_syntax

Severity:High
Rule:Thesyntaxoftheregularexpressionisinvalid.
Reason:Thesyntaxoftheregularexpressionisinvalid.

UsageExample:

importjava.util.regex.*;
	
	publicclassWillThrowPatternSyntaxException
{
	voidx(Strings)throwsException
	{
		Pattern.matches("][",s);//VIOLATION
	}
}

Shouldbewrittenas:

Pleaseverifytheregexpattern.

Reference:Noreferencesavailable.

Rule34:Possibly_incorrect_regular_expression_pattern

Severity:High
Rule:AStringfunctionisbeinginvokedand"."isbeingpassedtoaparameterthattakesaregularexpressionasanargument.
Reason:AStringfunctionisbeinginvokedand"."isbeingpassedtoaparameterthattakesaregularexpressionasanargument.

UsageExample:

publicclassTest
{
	publicvoidfubar(Strings)
	{
		s.replaceAll(".","/");//VIOLATION
	}
}

Shouldbewrittenas:

Pleaseensurethisisintended.

Reference:NotAvailable.

Rule35:Avoid_adding_collection_to_itself

Severity:High
Rule:Avoidaddingacollectiontoitself.
Reason:Avoidaddingacollectiontoitself.

UsageExample:

packagecom.rule;
	
importjava.util.ArrayList;
importjava.util.Collection;

publicclassAvoid_adding_collection_to_itself_violation
{
	publicvoidmethod()
	{
		Collectionc=newArrayList();
		
		c.add("Item1");
		c.add("Item2");
		
		c.addAll(c);		//Violation.
	}
		
}

Shouldbewrittenas:

 

Reference:Referencenotavailable.

Rule36:Always_rethrow_ThreadDeath

Severity:MediumRule:AlwaysrethrowThreadDeathError.Reason:AlwaysrethrowThreadDeathError.

UsageExample:

packagecom.rule;

/**
*@authorAdministrator
*
*/
publicclassAlways_rethrow_ThreadDeath_violation
{
	publicstaticvoidmain(Stringargs[])
	{
	newThread()
		{
			publicvoidrun()
			{
				run1();
			}

			privatevoidrun1()
			{
				for(inti=0;i<100;i++)
				{
					try
					{
						doStop(i);
					}
					catch(ThreadDeathth)//Violation
					{
						System.out.println("th.getClass()="+th.getClass());
						th.printStackTrace();
					}
					System.out.println("i="+i);
				}
			}

			privatevoiddoStop(inti)
			{
					if(i==5)
						stop();
			}
		}.start();
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAlways_rethrow_ThreadDeath_correction
{
	publicstaticvoidmain(Stringargs[])
	{
	newThread()
		{
			publicvoidrun()
			{
				run1();
			}


			privatevoidrun1()
			{
				for(inti=0;i<100;i++)
				{
					try
					{
						doStop(i);
					}
					catch(ThreadDeathth)
					{
						System.out.println("th.getClass()="+th.getClass());
						th.printStackTrace();
						throwth;//Correction
					}
					System.out.println("i="+i);
				}
			}

			privatevoiddoStop(inti)
			{
					if(i==5)
						stop();
			}
		}.start();
	}
}

Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ThreadDeath.html

Rule37:Avoid_possible_typos_in_switch_statement

Severity:Medium
Rule:Labelsshouldnotappearinswitchstatementsbecausetheywillnotbeused.
Reason:Labelsshouldnotappearinswitchstatementsbecausetheywillnotbeused.

UsageExample:

publicclassMyClass
{

	staticintmethod(inti){
switch(i){
case4:
case3://VIOLATION:labeltypo
i++;
break;
case25:
unusedlabel://VIOLATION:unusedlabel.
break;
}
returni;
}

}

Shouldbewrittenas:

publicclassMyClass
{
	staticintmethod(inti){
switch(i){
case4:
case3://CORRECTION
i++;
break;
case25:
//CORRECTION
break;
}
returni;
}

}

Reference:Noreferencesavailable.

Rule38:Use_System_dot_exit_with_care

Severity:High
Rule:UseSystem.exitwithcare.
Reason:UseSystem.exitwithcare.

UsageExample:

packagecom.rule;
publicclassUse_System_dot_exit_with_care_violation
{
	publicstaticvoidmain(String[]s)
	{
		intia[]={1,2,3,4,5,6,7,8,9,10,11,12,13};
		(newThreadDoSum(ia)).start();
		System.exit(0);//Violation
	}
}

classThreadDoSumextendsThread
{
	int[]ia=null;
	publicThreadDoSum(intia[])
	{
		this.ia=ia;
	}

	publicvoidrun()
	{
		intsum=0;
		for(inti=0;i<ia.length;i++)
		{
			sum+=ia[i];
		}
		System.out.println(sum);
	}
}

Shouldbewrittenas:

packagecom.rule;
publicclassUse_System_dot_exit_with_care_correction
{
	publicstaticvoidmain(String[]s)
	{
		intia[]={1,2,3,4,5,6,7,8,9,10,11,12,13};
		(newThreadDoSum(ia)).start();
		return;//Correction
	}
}

classThreadDoSumextendsThread
{
	int[]ia=null;
	publicThreadDoSum(intia[])
	{
		this.ia=ia;
	}

	publicvoidrun()
	{
		intsum=0;
		for(inti=0;i<ia.length;i++)
		{
			sum+=ia[i];
		}
		System.out.println(sum);
	}
}

Reference:http://www.javapractices.com/Topic86.cjp
http://www.devx.com/tips/Tip/14560

Rule39:Avoid_wrong_increment_in_for

Severity:Medium
Rule:Avoidwrongincrementinforloop.
Reason:Avoidwrongincrementinforloop.

UsageExample:

packagecom.rule;

classAvoid_wrong_increment_in_for_violation
{
	publicvoidmethod()
	{	
		intarray[]={10,20,30,40};
		intlength=array.length;
		intj=0;
		
		for(inti=0;i<length;j++)		//Violation.
		{
			//SomeCode...
		}	
}
}

Shouldbewrittenas:

packagecom.rule;

classAvoid_wrong_increment_in_for_Correction
{
	publicvoidmethod()
	{	
		intarray[]={10,20,30,40};		
		intlength=array.length;
		
		for(inti=0;i<length;i++)		//Correction.
		{
			//SomeCode...
		}	
}
}

Reference:Referencenotavailable.

Rule40:Never_call_overridable_method_from_constructor

Severity:High
Rule:Nevercalloverridablemethodfromconstructor.
Reason:Nevercalloverridablemethodfromconstructor.

UsageExample:

publicclassNever_call_overridable_method_from_constructor_violation
{
	publicstaticvoidmain(String[]a)
	{
		Childc=newChild();
		System.out.println(c.type);//isnulleventhoughChild'sinititlize()wasexecuted.
	}

	publicNever_call_overridable_method_from_constructor_violation()
	{
		inititlize();//Violation
	}

	publicvoidinititlize()
	{
	}
}

classChildextendsNever_call_overridable_method_from_constructor_violation
{
	publicStringtype=null;

	publicChild()
	{
		super();
	}

	publicvoidinititlize()
	{
		type="CHART";
	}
}

Shouldbewrittenas:

Donotcalloverridablemethodinsideconstructor.

Reference:http://www.javapractices.com/Topic11.cjp

Rule41:Avoid_assigning_values_to_method_parameter

Severity:High
Rule:Itcanleadtopossibleerrors.
Reason:Itcanleadtopossibleerrors.

UsageExample:

publicclassTest
{
	publicvoidmethod(int[]a)
	{
		a[0]=0;//VIOLATION
	}

}

Shouldbewrittenas:

publicclassTest
{
	publicvoidmethod(int[]a)
	{
		finalintlen=a.length;
	int[]b=newint[len];
	System.arraycopy(a,0,b,0,len);
	b[0]=0;//FIXED
	}

}

Reference:Notavailable.

Rule42:Avoid_non_Serializable_field_inside_Serializable_Class

Severity:Critical
Rule:Avoidnon-SerializableandnonprimitiveinstancefieldinsideSerializableclass.
Reason:Avoidnon-SerializableandnonprimitiveinstancefieldinsideSerializableclass.

UsageExample:

packagecom.rule;
importjava.io.*;

publicclassAvoid_non_Serializable_field_inside_Serializable_class_violationimplementsSerializable
{
	MyClassmc=newMyClass();//Violation
	privateintiNum=90;
	
	publicstaticvoidmain(Stringargs[])throwsIOException
	{
		FileOutputStreamout=newFileOutputStream("Test");
		ObjectOutputStreamoos=newObjectOutputStream(out);
		oos.writeObject(newAvoid_non_Serializable_field_inside_Serializable_class_violation());
		oos.flush();
	}
}

classMyClass
{
	intj=89;
}

Shouldbewrittenas:

AvoidnonSerializablefieldinsideSerializableclass.

Reference:Referencenotavailable.

Rule43:Avoid_serializable_class_extending_a_class_without_a_zero_arg_constructor

Severity:Critical
Rule:Ifanynon-serializablesuperclassesdon'thaveazero-argumentconstructor,serializationwillfail.
Reason:Ifanynon-serializablesuperclassesdon'thaveazero-argumentconstructor,serializationwillfail.

UsageExample:

publicclassSomeClassimplementsjava.io.Serializable
extendsSuperClass//VIOLATION
{
SomeClass()
{
super(0);
}
}

classSuperClass
{
	SuperClass(inti){}
}

Shouldbewrittenas:

publicclassSomeClassimplementsjava.io.Serializable
extendsSuperClass
{
SomeClass()
{
super(0);
}
}

classSuperClass
{
	SuperClass(inti){}
	SuperClass(){}//CORRECTION
}

Reference:Noreferencesavailable.

Rule44:Always_null_pointer_exception

Severity:Critical
Rule:Thiscodewoulddefinitelythrowajava.lang.NullPointerException.
Reason:Thiscodewoulddefinitelythrowajava.lang.NullPointerException.

UsageExample:

publicclassErroneous_null_check_violation
{

	publicvoidaMethod()
	{
		Objectx=newObject();
		if(x==null)
		{
			System.out.println(x.toString());//VIOLATION
		}
	}
}

Shouldbewrittenas:

 

Reference:Referencenotavailable.

Rule45:Possible_null_pointer_exception_passing_null_value_as_method_parameter

Severity:CriticalRule:Apossibly-nullvalueispassedtoamethodwhichunconditionallydereferencesitresultinginanullpointerexception.Reason:Apossibly-nullvalueispassedtoamethodwhichunconditionallydereferencesitresultinginanullpointerexception.

UsageExample:

publicclassTest
{
	publicvoidfubar()
	{
		Objects=null;
		//...
		System.out.println(getStringRepresentation(s));//VIOLATION
	}

	privateStringgetStringRepresentation(Objects)
	{
		returns.toString();
	}
}

Shouldbewrittenas:

publicclassTest
{
	publicvoidfubar()
	{
		Objects=null;
		//...
		System.out.println(getStringRepresentation(s));
	}

	privateStringgetStringRepresentation(Objects)
	{
		returns!=null?s.toString():"";//FIXED
	}
}

Reference:NotAvailable.

Rule46:Always_class_cast_exception

Severity:Critical
Rule:Thiscodewoulddefinitelythrowajava.lang.ClassCastException.
Reason:Thiscodewoulddefinitelythrowajava.lang.ClassCastException.

UsageExample:

importjava.util.Hashtable;
importjava.util.Vector;

publicclassTest
{
	Hashtablebaz()
	{
		returnnewHashtable();
	}
	
	Vector[]faz()
	{
		returnnewVector[10];
	}

	intf2()
	{
		Objecto=faz();
		return((Hashtable[])o).length;//VIOLATION
	}

	inthx()
	{
		Objecto=baz();
		return((Vector)o).size();//VIOLATION
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule47:Avoid_calling_applet_methods_relying_on_stubs_in_constructor

Severity:CriticalRule:ThiscodeintheconstructorcallsmethodsintheparentAppletthatrelyontheAppletstub.Reason:ThiscodeintheconstructorcallsmethodsintheparentAppletthatrelyontheAppletstub.

UsageExample:

importjava.applet.Applet;
importjava.net.URL;

publicclassTestextendsApplet
{
	publicTest()
	{
		URLu1=getDocumentBase();//VIOLATION
		URLu2=getCodeBase();//VIOLATION
		
		if(u1.equals(u2))
			return;
		
		if(getParameter("bad")!=null)//VIOLATION
			return;
			
		if(getAppletContext()!=null)//VIOLATION
			return;
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule48:Avoid_double_checked_locking

Severity:CriticalRule:Avoiddoublecheckedlocking.Reason:Avoiddoublecheckedlocking.

UsageExample:

packagecom.rule;

publicclassAvoid_double_checked_locking
{
	ObjectobjOne=null;
	
	if(objOne==null)
	{
		synchronized(this)
		{
			if(objOne==null)		//Violation.
			{
				objOne=null;
			}
		}
	}
}

Shouldbewrittenas:

 

Reference:http://www.javaworld.com/javaworld/jw-02-2001/jw-0209-double.html.

Rule49:Avoid_immediate_dereference_of_readLine

Severity:MediumRule:AvoidimmediatedereferenceofresultofreadLine()method.Reason:AvoidimmediatedereferenceofresultofreadLine()method.

UsageExample:

packagecom.rule;

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.FileReader;

classAvoid_immediate_dereference_of_readLine_violation
{
	publicvoidmethod()
	{
		BufferedReaderin=newBufferedReader(newFileReader("InputFile.txt"));

		if(in.readLine().equals("AppPerfect"))		//Violation
		{
			//SomeCode...
		}
}
}

Shouldbewrittenas:

packagecom.rule;

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.FileReader;

classAvoid_immediate_dereference_of_readLine_Correction
{
	publicvoidmethod()
	{
		BufferedReaderin=newBufferedReader(newFileReader("InputFile.txt"));
		Stringstr=in.readLine();
		
		if(str!=null)
		{
			if(str.equals("AppPerfect"))		//Correction
			{
				//SomeCode...
			}
		}
}
}

Reference:Referencenotavailable.

Rule50:Result_of_readLine_not_used

Severity:Medium
Rule:ResultofreadLine()isnotused.
Reason:ResultofreadLine()isnotused.

UsageExample:

packagecom.rule;

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.FileReader;

publicclassResult_of_readLine_not_used_violation
{
	publicvoidmethod()
	{
		BufferedReaderin=newBufferedReader(newFileReader("InputFile.txt"));
		Stringstr=null;
		
		if(in.readLine()!=null)		//Violation
		{
			str=in.readLine();
		}
	}
		
}

Shouldbewrittenas:

packagecom.rule;

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.FileReader;

publicclassResult_of_readLine_not_used_correction
{
	publicvoidmethod()
	{
		BufferedReaderin=newBufferedReader(newFileReader("InputFile.txt"));
		Stringstr=null;
		
		if((str=in.readLine())!=null)	//Correction.		
		{
			str;
		}				
	}
	
}

Reference:Referencenotavailable.

Rule51:Declare_Runnable_run_as_synchronized

Severity:Low
Rule:Therunmethodshouldbedeclaredassynchronized.
Reason:Therunmethodshouldbedeclaredassynchronized.

UsageExample:

packagecom.rule;

publicclassDeclare_Runnable_run_as_synchronized_violationimplementsRunnable
{
	publicvoidrun()//VIOLATION
	{
		System.out.println("Declare_Runnable_run_as_synchronized_violation.run()");
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassDeclare_Runnable_run_as_synchronized_correctionimplementsRunnable
{
	publicsynchronizedvoidrun()//CORRECTION
	{
		System.out.println("Declare_Runnable_run_as_synchronized_correction.run()");
	}
}

Reference:Noreferenceavailable.

Rule52:Avoid_TODO_comments

Severity:Low
Rule:TODOcommentsleftinthecodecouldindicatethattheimplementationisincompleteorsomebugneedstobefixed.
Reason:TODOcommentsleftinthecodecouldindicatethattheimplementationisincompleteorsomebugneedstobefixed.

UsageExample:

publicclassMyClass
{
publicvoidmyMethod()
{
		//TODOAuto-generatedmethodstub//VIOLATION
}
}

Shouldbewrittenas:

publicclassMyClass
{
publicvoidmyMethod()
{
//...
//FIXED,TODOcommentisremoved
}
}

Reference:Notavailable.

Rule53:Avoid_using_spin_locks

Severity:Low
Rule:Avoidusingprimitivespinlocks.
Reason:Avoidusingprimitivespinlocks.

UsageExample:

publicclassTest
{
	booleanflag;
	voidwaitForTrue()
	{
		for(;flag;);//VIOLATION
	}
	Testfoo;
	Testbar;

	voidwaitForNonNull()
	{
		while(foo==null);//VIOLATION
	}
	staticvoidwaitForNonNullIndirect(intx,Testbaz)
	{
		while(baz.foo==null);//VIOLATION
		while(baz.foo.bar==null);//VIOLATION
	}
	staticbooleansflag;
	staticvoidwaitForStatic()
	{
		do
		{
		}while(!sflag);//VIOLATION
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule54:Avoid_down_casting_to_concrete_collection

Severity:HighRule:Avoiddowncastingtoconcretecollection.Reason:Avoiddowncastingtoconcretecollection.

UsageExample:

publicclassTest
{
	Lista;

	publicVectorswap(Listb)
	{
		Vectorv=(Vector)a;
		a=(Vector)b;//VIOLATION
		returnv;
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule55:Bad_cast_to_another_abstract_collection

Severity:HighRule:Avoidcastingjava.util.Collectionorjava.util.Iterabletoanotherabstractcollection.Reason:Avoidcastingjava.util.Collectionorjava.util.Iterabletoanotherabstractcollection.

UsageExample:

importjava.util.Hashtable;
importjava.util.Map;
importjava.util.Set;

publicclassTest
{
	Mapbar()
	{
		returnnewHashtable();
	}

	intd()
	{
		Mapm=bar();
		Sets=(Set)m.values();//VIOLATION
		returns.size();
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule56:Avoid_empty_statement

Severity:MediumRule:DonotuseemptystatementsReason:Donotuseemptystatements

UsageExample:

packagecom.rule;

publicclassAvoid_empty_statement
{
	publicvoidsaveAndExit(booleanbExit)
	{
		for(i=0;i<fileCount;saveFile(i++));	//violation
		if(bExit)
		{
			exitEditor();
		};											//Violation
		
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_empty_statement
{
	publicvoidsaveAndExit()
	{
		for(i=0;i<fileCount;saveFile(i++))	
		{											//Correction
		}
		if(bExit)
		{
			exitEditor();
		}											//Correction
	}
}

Reference:http://www.faqs.org/docs/javap/c3/s6.html

Rule57:Avoid_fields_with_closely_similar_names

Severity:Low
Rule:Avoidfieldswithcloselysimilarnames
Reason:Avoidfieldswithcloselysimilarnames

UsageExample:

packagecom.rule;
publicclassAvoid_fields_with_closely_similar_names_violation
{
	intfield;
	intField;//VIOLATION
}

Shouldbewrittenas:

packagecom.rule;
publicclassAvoid_fields_with_closely_similar_names_correction
{
	intfield1;
	intfield2;//CORRECTION
}

Reference:Referencenotavailable.

Rule58:Avoid_mutable_exception

Severity:Low
Rule:Fieldsaremutable.
Reason:Fieldsaremutable.

UsageExample:

publicclasssomeExceptionextendsException
{
	privateStringmessage;//VIOLATION
	
	publicsomeException(Stringmessage)
	{
		//...
	}
}

Shouldbewrittenas:

publicclasssomeExceptionextendsException
{
	privatefinalStringmessage;
	
	publicsomeException(Stringmessage)
	{
		//...
	}
}

Reference:Noreferencesavailable.

Rule59:Do_not_cast_to_lower_precision

Severity:Medium
Rule:Avoidcastingprimitivetypestolowerprecisiondatatypes.
Reason:Avoidcastingprimitivetypestolowerprecisiondatatypes.

UsageExample:

packagecom.rule;

publicclassDo_not_cast_to_lower_precision
{
	voidmethod(longl,doubled,floatf,Stringstr)
	{
		shorts=(short)l;				//VIOLATION
		inti=s;
		i=(int)f;						//VIOLATION
		f=(float)d;					//VIOLATION
		
		method((byte)i);
		
		Objectobj=(Object)str;
	}
	
	voidmethod(byteb)
	{
	}
}

Shouldbewrittenas:

Tryusingdatatypesofproperprecision.

Reference:ReferenceNotAvailable.

Rule60:Avoid_casting_without_check

Severity:Medium
Rule:Thiscodecouldpossiblythrowajava.lang.ClassCastException.
Reason:Thiscodecouldpossiblythrowajava.lang.ClassCastException.

UsageExample:

importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.List;
importjava.util.Vector;

publicclassTest
{
	publicstaticvoidmain(String[]args)
	{
		Collectionh=newArrayList();
		inti=2;
		if(i==3)
		{
			h=newVector();
		}
		Listj=(Vector)h;//VIOLATION
		if(hinstanceofArrayList)
		{
			j=(ArrayList)h;
		}
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule61:Do_not_cast_integer_division_to_double

Severity:MediumRule:Donotcastresultofintegerdivisiontoadouble.Reason:Donotcastresultofintegerdivisiontoadouble.

UsageExample:

packagecom.rule;

classDo_not_cast_integer_division_to_double_violation
{
	publicvoidmethod()
	{	
		intx=2;
		inty=5;
		
		doublevalue1=x/y;		//Violation.		
}
}

Shouldbewrittenas:

packagecom.rule;

classDo_not_cast_integer_division_to_double_Correction
{
	publicvoidmethod()
	{	
		intx=2;
		inty=5;
		
		doublevalue1=(double)x/y;		//Correction.		
}
}

Reference:Referencenotavailable.

Rule62:Do_not_cast_integer_multiplication_to_long

Severity:Medium
Rule:Ifthemultiplicationisdoneusinglongarithmetic,youcanavoidthepossibilitythattheresultwilloverflow.
Reason:Ifthemultiplicationisdoneusinglongarithmetic,youcanavoidthepossibilitythattheresultwilloverflow.

UsageExample:

publicclassTest
{
	longconvertDaysToMilliseconds(intdays)
	{
		return1000*3600*24*days;//VIOLATION
	}
}

Shouldbewrittenas:

publicclassTest
{
	staticfinallongMILLISECONDS_PER_DAY=24L*3600*1000;//FIXED
	
	longconvertDaysToMilliseconds(intdays)
	{
		returndays*MILLISECONDS_PER_DAY;
	}
}

Reference:NotAvailable.

Rule63:Use_random_nextInt

Severity:Medium
Rule:Userandom.nextInt()insteadof(int)(random.nextDouble()).
Reason:Userandom.nextInt()insteadof(int)(random.nextDouble()).

UsageExample:

packagecom.rule;

importjava.util.Random;

publicclassUse_random_nextInt_violation
{
	publicvoidmethod()
	{
		Randomr=newRandom();

		inti=(int)(r.nextDouble()*100);		//Violation.
	}
	
}

Shouldbewrittenas:

packagecom.rule;

importjava.util.Random;

publicclassUse_random_nextInt_correction
{
	publicvoidmethod()
	{
		Randomr=newRandom();
				
		inti=r.nextInt(100);		//Corection.
	}
	
}

Reference:Referencenotavailable.

Rule64:Avoid_casting_random_value_to_integer

Severity:Medium
Rule:Avoidcastingrandomvaluefrom0to1tointegerbeforeitsuse.
Reason:Avoidcastingrandomvaluefrom0to1tointegerbeforeitsuse.

UsageExample:

importjava.util.Random;

publicclassAvoid_casting_random_value_to_integer_violation
{
	publicvoidmethod()
	{
		Randomr=newRandom(3);
		inti=(int)r.nextFloat();//Violation.
	}
}

Shouldbewrittenas:

importjava.util.Random;

publicclassAvoid_casting_random_value_to_integer_violation
{
	publicvoidmethod()
	{
		Randomr=newRandom();
		inti=r.nextInt(3);
	}
}

Reference:http://java.sun.com/developer/JDCTechTips/2001/tt0925.html#tip1

Rule65:Overwritten_increment

Severity:Medium
Rule:Avoidoverwritingtheincrementofavariable.
Reason:Avoidoverwritingtheincrementofavariable.

UsageExample:

packagecom.rule;

publicclassOverwritten_increment_violation
{
	publicvoidmethod()
	{
		inti=10;
		
		i=i++;		//Violation.
	}
	
}

Shouldbewrittenas:

packagecom.rule;

publicclassOverwritten_increment_correction
{
	publicvoidmethod()
	{
		inti=10;
		
		i++;		//Correction.		
	}
	
}

Reference:Referencenotavailable.

Rule66:Overwritten_decrement

Severity:Medium
Rule:Avoidoverwritingthedecrementofavariable.
Reason:Avoidoverwritingthedecrementofavariable.

UsageExample:

packagecom.rule;

publicclassOverwritten_decrement_violation
{
	publicvoidmethod()
	{
		inti=10;
		
		i=i--;		//Violation.
	}
		
}

Shouldbewrittenas:

packagecom.rule;

publicclassOverwritten_decrement_correction
{
	publicvoidmethod()
	{
		inti=10;
		
		i--;		//Correction.		
	}
	
}

Reference:Referencenotavailable.

Rule67:Invalid_month_argument

Severity:Medium
Rule:Avoidpassingwrongmonthvalue.
Reason:Avoidpassingwrongmonthvalue.

UsageExample:

packagecom.rule;

importjava.util.Date;
importjava.util.Calendar;
importjava.util.GregorianCalendar;

publicclassInvalid_month_argument_violation
{
	publicvoidmethod()
	{
		Datedate=newDate();
		date.setMonth(12);		//Violation.
		
		Calendarcal=newGregorianCalendar();
		cal.set(Calendar.MONTH,14);		//Violation.
	}
		
}

Shouldbewrittenas:

packagecom.rule;
	
importjava.util.Date;
importjava.util.Calendar;
importjava.util.GregorianCalendar;

publicclassInvalid_month_argument_correction
{
	publicvoidmethod()
	{
		Datedate=newDate();
		date.setMonth(0);		//Correction
		
		Calendarcal=newGregorianCalendar();
		cal.set(Calendar.MONTH,2);		//Correction
	}
	
}

Reference:Referencenotavailable.

Rule68:Do_not_call_run_explicitly

Severity:High
Rule:CallingrunmethodofRunnableobjectdirectlywillnotcreateanewthread.
Reason:CallingrunmethodofRunnableobjectdirectlywillnotcreateanewthread.

UsageExample:

packagecom.rule;

publicclassDo_not_call_run_explicitly_violation
{
	publicvoidmethod(Do_not_call_run_explicitly_violation1obj)
	{
		obj.run();//VIOLATION
	}
}

classDo_not_call_run_explicitly_violation1implementsRunnable
{
	publicvoidrun()
	{
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassDo_not_call_run_explicitly_correction
{
	publicvoidmethod(Do_not_call_run_explicitly_violation1obj)
	{
		newThread(obj).start();//CORRECTION
	}
}

classDo_not_call_run_explicitly_violation1implementsRunnable
{
	publicvoidrun()
	{
	}
}

Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runnable.html
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html

Rule69:Avoid_catching_IllegalMonitorStateException

Severity:Medium
Rule:CatchingIllegalMonitorStateExceptionrepresentsalogicalerrorinthecode.
Reason:CatchingIllegalMonitorStateExceptionrepresentsalogicalerrorinthecode.

UsageExample:

packagecom.rule;

publicclassAvoid_catching_IllegalMonitorStateException_violation
{
	publicvoidmethod(Objectobj)
	{
		try
		{
			obj.wait(1000);
		}
		catch(InterruptedExceptione)
		{
			e.printStackTrace();
		}
		catch(IllegalMonitorStateExceptione)//VIOLATION
		{
			e.printStackTrace();
		}
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_catching_IllegalMonitorStateException_correction
{
	publicvoidmethod(Objectobj)
	{
		try
		{
			//usepropersynchronization
			synchronized(obj)//CORRECTION
			{
				obj.wait(1000);
			}
		}
		catch(InterruptedExceptione)
		{
			e.printStackTrace();
		}
	}
}

Reference:NoReferenceavailable.

Rule70:Always_call_swing_methods_in_swing_event_thread

Severity:Medium
Rule:Certainswingmethodsshouldonlybecalledinswingeventthread.
Reason:Certainswingmethodsshouldonlybecalledinswingeventthread.

UsageExample:

packagecom.rule;

importjavax.swing.JFrame;

publicclassAlways_call_swing_methods_in_swing_event_thread_violation
{
	publicstaticvoidmain(Stringargs[])
	{
		JFrameframe=newJFrame();
		frame.setTitle("Title");
	frame.setSize(200,100);
		frame.show();	//Violation
frame.pack();	//Violation
frame.setVisible(true);	//Violation
	}
		
}

Shouldbewrittenas:

packagecom.rule;

importjavax.swing.JFrame;

publicclassAlways_call_swing_methods_in_swing_event_thread_correctionimplementsRunnable
{
		finalFrameframe;
publicFrameShower(Frameframe)
{
this.frame=frame;
}
publicvoidrun()
{
frame.show();		//Correction
}
		publicstaticvoidmain(Stringargs[])
		{
	JFrameframe=newJFrame();
	frame.setTitle("Title");
	frame.setSize(200,100);
	Runnablerunner=newFrameShower(frame);
}
}

Reference:http://java.sun.com/developer/JDCTechTips/2003/tt1208.html#1

Rule71:Erroneous_use_of_binary_AND_with_ZERO

Severity:Medium
Rule:AvoiderroneoususeofbinaryANDoperatorwithzero.
Reason:AvoiderroneoususeofbinaryANDoperatorwithzero.

UsageExample:

packagecom.rule;

publicclassErroneous_use_of_binary_AND_with_ZERO_violation
{
	publicstaticfinalintHSCROLLBAR=1;
	publicstaticfinalintVSCROLLBAR=2;
	publicstaticfinalintNONE=0;

	publicstaticfinalintBOTHSCROLLBARS=3;

	publicbooleancheck(intattribs)
	{
		return((attribs&NONE)==NONE);
	}
}

Shouldbewrittenas:

Nocorrectionavailable.

Reference:Referencenotavailable.

Rule72:Erroneous_use_of_binary_AND

Severity:Medium
Rule:AvoidexpressioninvolingspecificuseofbitwiseANDoperatorthatalwaysevaluatetofalse.
Reason:AvoidexpressioninvolingspecificuseofbitwiseANDoperatorthatalwaysevaluatetofalse.

UsageExample:

packagecom.rule;

publicclassErroneous_use_of_BAND_violation
{
	publicstaticfinalintHSCROLLBAR=1;
	publicstaticfinalintVSCROLLBAR=2;
	publicstaticfinalintNONE=0;

	publicstaticfinalintBOTHSCROLLBARS=3;

	publicbooleancheck(intattribs)
	{
		return((attribs&VSCROLLBAR)==BOTHSCROLLBARS);
	}
}

Shouldbewrittenas:

Nocorrectionavailable.

Reference:Referencenotavailable.

Rule73:Declare_Object_as_parameter_for_compareTo_method

Severity:Medium
Rule:IfcompareTomethodisdeclared,itshouldhavetheparameteroftypejava.lang.Object.
Reason:IfcompareTomethodisdeclared,itshouldhavetheparameteroftypejava.lang.Object.

UsageExample:

packagecom.rule;

publicclassDeclare_Object_as_parameter_for_compareTo_method_violation
{
	publicintcompareTo(Declare_Object_as_parameter_for_compareTo_method_violationo)//VIOLATION
	{
		return0;
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassDeclare_Object_as_parameter_for_compareTo_method_correction
{
	publicintcompareTo(Objecto)//CORRECTION
	{
		return0;
	}
}

Reference:Noreferenceavailable.

Rule74:Always_explicitly_initialize_all_fields_in_a_constructor

Severity:Medium
Rule:Explicitlyintializeallfieldsconstructor.
Reason:Explicitlyintializeallfieldsconstructor.

UsageExample:

publicclassInit
{
	privateinti=5;
	privateintj;
	privateintk;

	publicInit()
	{
		this(12);
		k=0;
	}

	publicInit(intval)//VIOLATION:kisnotinitialized.
	{
		j=val;
	}
}

Shouldbewrittenas:

publicclassInit
{
	privateinti=5;
	privateintj;
	privateintk;

	publicInit()
	{
		this(12);
	}

	publicInit(intval)
	{
		j=val;
		k=0;				//CORRECTION
	}
}

Reference:Noreferencesavailable.

Rule75:Avoid_passing_decimal_literals_to_BigDecimal_constructor

Severity:Medium
Rule:Thisshouldbeavoidedbecausedecimalliteralsarenotpreciselyequaltotheirdesiredvalues.
Reason:Thisshouldbeavoidedbecausedecimalliteralsarenotpreciselyequaltotheirdesiredvalues.

UsageExample:

importjava.math.*;

publicclassTest
{
publicvoidmethod()
{
BigDecimalbd=newBigDecimal(.1);//VIOLATION
}
}

Shouldbewrittenas:

Usethe'BigDecimal'constructorwhichtakesaStringasanargumentinstead
oftheonewhichtakesadoublesincethisconstructorwillproduceaprecise
value.


importjava.math.*;

publicclassTest
{
publicvoidmethod()
{
BigDecimalbd=newBigDecimal(".1");//FIXED
}
}

Reference:Notavailable.

Rule76:Use_string_equals_method

Severity:Medium
Rule:UseequalsmethodforStringcomparison.
Reason:UseequalsmethodforStringcomparison.

UsageExample:

packagecom.rule;

publicclassUse_string_equals_method_violation
{
	publicvoidfoo()
	{
		Stringstr="compare";
		Stringtemp=newString("compare");
		if(str==temp)//Violation
		{
			//...
			System.out.println("samecontent");			
		}
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassUse_string_equals_method_correction
{
	publicvoidfoo()
	{
		Stringstr="compare";
		Stringtemp=newString("compare");
		if(str.equals(temp))//Correction
		{
			//...
			System.out.println("samecontent");			
		}
	}
}

Reference:Referencenotavailable.

Rule77:Avoid_circular_initialization_for_static_fields

Severity:Medium
Rule:Initializationsthatdependonstaticfieldsfromdifferentclassesorfilesshouldbeavoided.
Reason:Initializationsthatdependonstaticfieldsfromdifferentclassesorfilesshouldbeavoided.

UsageExample:

publicclassNoCirc
{
publicstaticvoidmain(Stringargs[])
	{
		//Iftheorderisswitched,theresultwouldbedifferent
		IC2ref2=newIC2();
	IC1ref1=newIC1();
		System.out.println(IC1.a+""+IC2.b);
}
}

classIC1
{
staticinta=IC2.b+1;//VIOLATION
}

classIC2
{
staticintb=IC1.a;//VIOLATION
}

Shouldbewrittenas:

publicclassNoCirc
{
publicstaticvoidmain(Stringargs[])
	{
IC2ref2=newIC2();
IC1ref1=newIC1();
System.out.println(IC1.a+""+IC2.b);
}
}

classIC1
{
staticinta=IC2.b+1;//CORRECTION
}

classIC2
{
staticintb=0;//CORRECTION
}

Reference:Noreferencesavailable.

Rule78:Always_ensure_get_set_methods_access_correct_fields

Severity:High
Rule:Ifthegetterorsettersaresettingfieldsotherthantheonementionedinitname,thenitcouldbeapossiblebug.
Reason:Ifthegetterorsettersaresettingfieldsotherthantheonementionedinitname,thenitcouldbeapossiblebug.

UsageExample:

publicclassAlwaysEnsureGetSetMethodsAccessCorrectFields
{

privateString_str1;
privateString_str2;
	
	publicvoidsetStr1(Stringstr)//VIOLATION
	{
		_str2=str;
	}
	
	publicStringgetStr2()//VIOLATION
	{
	return_str1;
	}
}

Shouldbewrittenas:

publicclassAlwaysEnsureGetSetMethodsAccessCorrectFields
{

privateString_str1;
privateString_str2;
	
	publicvoidsetStr1(Stringstr)//CORRECTION
	{
	_str1=str;
	}

	publicStringgetStr2()//CORRECTION
	{
	return_str2;
	}
}

Reference:Noreferencesavailable.

Rule79:Declare_fields_of_user-defined_Exception_as_final_or_private

Severity:Medium
Rule:Declarethefieldsasfinalorprivatesoastopreventthemfromunauthorizedmodifications.
Reason:Declarethefieldsasfinalorprivatesoastopreventthemfromunauthorizedmodifications.

UsageExample:

publicclassMyExceptionextendsjava.lang.Exception//VIOLATION
{
StringextraMessage;
intseverity;
//...
}

Shouldbewrittenas:

publicclassMyExceptionextendsjava.lang.Exception
{
finalStringextraMessage;
privateseverity;
//...
}

Reference:

Rule80:Avoid_overloading_methods_on_argument_types

Severity:Medium
Rule:Methodoverloadingbasedontheargument'sdatatypeshouldbeavoided.
Reason:Methodoverloadingbasedontheargument'sdatatypeshouldbeavoided.

UsageExample:

packagecom.rule;

publicclassAvoid_overloading_methods_on_argument_types_violation
{
	voidmethod(IntegerintVal)//VIOLATION
	{
		//handleInteger
	}
	
	voidmethod(StringstrVal)
	{
		//handleString
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_overloading_methods_on_argument_types_correction
{
	voidmethod(Objectval)//CORRECTION
	{
		if(valinstanceofInteger)
		{
			//handleInteger
		}
		elseif(valinstanceofString)
		{
			//handleString
		}
	}
}

Reference:Noreferenceavailable.

Rule81:Private_field_is_never_written

Severity:Medium
Rule:Novaluewasassignedtoprivatefield.
Reason:Novaluewasassignedtoprivatefield.

UsageExample:

packagecom.rule;

publicclassPrivate_field_is_never_written_violation
{
	privateStringname;//VIOLATION
	
	publicvoiddebug()
	{
		System.out.println("name="+name);
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassPrivate_field_is_never_written_correction
{
//	privateStringname;//CORRECTION
	
	publicvoiddebug()
	{
//		System.out.println("name="+name);
	}
}

Reference:Noreferenceavailable

Rule82:Do_not_call_synchronized_method_from_synchronized_method

Severity:Critical
Rule:Donotcallsynchronizedmethodfromsynchronizedmethod.
Reason:Donotcallsynchronizedmethodfromsynchronizedmethod.

UsageExample:

packagecom.rule;

publicclassDo_not_call_synchronized_method_from_synchronized_method_violation
{
	publicsynchronizedvoidmeth()
	{
		Testtt=newTest();
		//...
		tt.foo();//Violation
	}
}
classTest
{
	publicsynchronizedvoidfoo()
	{
		//...
	}
}

Shouldbewrittenas:

Avoidcallingsynchronizedmethodfromsynchronizedmethod.

Reference:http://www.onjava.com/pub/a/onjava/2004/10/20/threads2.html

Rule83:Always_place_literals_first_in_string_comparison

Severity:High
Rule:Alwaysplaceliteralsfirstinstringcomparison.
Reason:Alwaysplaceliteralsfirstinstringcomparison.

UsageExample:

packagecom.rule;

publicclassAlways_place_literals_first_in_string_comparison_violation
{
	publicvoidmethod()
	{
		Stringstr="AppPerfect";
		if(str.equals("AppPerfect"))		//Violation.
		{

		}
	}
		
}

Shouldbewrittenas:

packagecom.rule;

publicclassAlways_place_literals_first_in_string_comparison_correction
{
	publicvoidmethod()
	{
		Stringstr="AppPerfect";
		
		if("AppPerfect".equals(str))		//Correction.
		{

		}
	}
	
}

Reference:Referencenotavailable.

Rule84:Avoid_equals_operator_for_decimal_point_values

Severity:Medium
Rule:Donotuseequalsoperatorfordecimalpointvaluestoavoidpossibleerrors
Reason:Donotuseequalsoperatorfordecimalpointvaluestoavoidpossibleerrors

UsageExample:

packagecom.rule;
classAvoid_equals_operator_for_decimal_point_values_violation
{
	publicbooleanisEqual(floatf1,floatf2)
	{
		returnf1==f2;
	}
}

Shouldbewrittenas:

Insteadofcheckingforexactequality,checkforsufficientequality.Thatisfindthedifferenceoftwovaluesandseeifitsinthepermissiblelimits.

packagecom.rule;
classAvoid_equals_operator_for_decimal_point_values_correction
{
	publicbooleanisEqual(floatf1,floatf2)
	{
		return(Math.abs(f1-f2)<0.01);
	}
}

Reference:http://www-106.ibm.com/developerworks/java/library/j-jtp0114/

Rule85:Avoid_returning_java_lang_Object

Severity:Medium
Rule:Avoidreturningjava.lang.Object.
Reason:Avoidreturningjava.lang.Object.

UsageExample:

publicclassNoObject
{
	privateStringstr;

	publicNoObject(Stringstr)
	{
		super();
		this.str=str;	
	}

	publicObjectgetMyString()//VIOLATION
	{
		returnstr;
	}

	publicstaticvoidmain(String[]args)throwsException
	{
		NoObjectno=newNoObject("Test");
		Stringstr=(String)no.getMyString();
		System.out.println(str);
	}
}

Shouldbewrittenas:

publicclassNoObject
{
	privateStringstr;

	publicNoObject(Stringstr)
	{
		super();
		this.str=str;	
	}

	publicStringgetMyString()//CORRECTION
	{
		returnstr;
	}

	publicstaticvoidmain(String[]args)throwsException
	{
		NoObjectno=newNoObject("Test");
		Stringstr=no.getMyString();
		System.out.println(str);
	}
}

Reference:Noreferencesavailable.

Rule86:Avoid_invoking_runFinalizersOnExit

Severity:High
Rule:AvoidinvokingSystem.runFinalizersOnExitorRuntime.runFinalizersOnExit.
Reason:AvoidinvokingSystem.runFinalizersOnExitorRuntime.runFinalizersOnExit.

UsageExample:

packagecom.rule;

publicclassAvoid_invoking_runFinalizersOnExit_violation
{
	publicvoidmethod()
	{
		Object[]oa=getObjects();
		process(oa);
		
		System.runFinalizersOnExit(true);		//Violation.		
		Runtime.runFinalizersOnExit(true);		//Violation.
	}
		
}

Shouldbewrittenas:

 

Reference:Referencenotavailable.

Rule87:Avoid_contiguous_non_String_values_during_concatenation

Severity:MediumRule:AvoidcontiguousnonStringvaluesduringStringconcatenation.Reason:AvoidcontiguousnonStringvaluesduringStringconcatenation.

UsageExample:

packagecom.rule;
publicclassAvoid_contiguous_non_String_values_during_concatenation_violation
{
	publicvoidmethod()
	{
		intprinciple=100;
		intinterest=10;
		System.out.println("Netpayable="+principle+interest+"rupees");//VIOLATION
	}
}

Shouldbewrittenas:

packagecom.rule;
publicclassAvoid_contiguous_non_String_values_during_concatenation_correction
{
	publicvoidmethod()
	{
		intprinciple=100;
		intinterest=10;
		inttotal=principle+interest
		System.out.println("Netpayable="+total+"rupees");//CORRECTION
	}
}

Reference:ReferenceNotAvailable.

Rule88:Conditional_expression_always_evaluates_to_constant_value

Severity:Medium
Rule:Aconditionalexpressionthatalwaysevaluatestofalseismostlylikelyapossiblebug.
Reason:Aconditionalexpressionthatalwaysevaluatestofalseismostlylikelyapossiblebug.

UsageExample:

publicclassMyClass
{
	publicvoidprocess(intarray_size,booleanb1,booleanb2)
	{
		if(array_size<0&&array_size>100)		//VIOLATION
			thrownewIllegalArgumentException("invalidarraysize");
	
	}

}

Shouldbewrittenas:

publicclassMyClass
{
	publicvoidprocess(intarray_size,booleanb1,booleanb2)
	{
		if(array_size<0||array_size>100)		//CORRECTION
			thrownewIllegalArgumentException("invalidarraysize");
		
	}

}

Reference:Noreferencesavailable.

Rule89:Avoid_accessing_uninitialized_fields_in_constructors

Severity:Medium
Rule:Donotuseanyclassfieldsthathavenotassignedanyvalueinconstructors.
Reason:Donotuseanyclassfieldsthathavenotassignedanyvalueinconstructors.

UsageExample:

packagecom.rule;

publicclassAvoid_accessing_uninitialized_fields_in_constructors_violation
{
	privateStringname;
	privateintid;
	
	publicAvoid_accessing_uninitialized_fields_in_constructors_violation(intID)
	{
		name="name"+id;//VIOLATION
		id=ID;
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_accessing_uninitialized_fields_in_constructors_correction
{
	privateStringname;
	privateintid;
	
	publicAvoid_accessing_uninitialized_fields_in_constructors_correction(intID)
	{
		name="name"+ID;//CORRECTION
		id=ID;
	}
}

Reference:Noreferenceavailable.

Rule90:Avoid_accessing_uninitialized_fields

Severity:Medium
Rule:Donotuseanyclassfieldsthathavenotassignedanyvalueinmethods.
Reason:Donotuseanyclassfieldsthathavenotassignedanyvalueinmethods.

UsageExample:

packagecom.rule;

publicclassAvoid_accessing_uninitialized_fields_violation
{
	privateStringname;
	privateintid;
	
	publicvoidmethod()
	{
		name="name"+id;//VIOLATION
		id=ID;
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_accessing_uninitialized_fields_correction
{
	privateStringname;
	privateintid;
	
	publicvoidmethod()
	{
		name="name"+ID;//CORRECTION
		id=ID;
	}
}

Reference:Noreferenceavailable.

Rule91:Avoid_Serializable_class_having_non_Serializable_parent

Severity:Critical
Rule:Theerrorisdetectedatruntime.
Reason:Theerrorisdetectedatruntime.

UsageExample:

packagecom.rule;

publicclassAvoid_Serializable_class_having_non_Serializable_parent_violationextendsSuperimplementsjava.io.Serializable//VIOLATION
{
	Avoid_Serializable_class_having_non_Serializable_parent_violation()
	{
		super(0);
	}
}

classSuper
{
	Super(inti)
	{
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_Serializable_class_having_non_Serializable_parent_correctionextendsSuperimplementsjava.io.Serializable
{
	Avoid_Serializable_class_having_non_Serializable_parent_violation()
	{
		super();
	}
}

classSuper
{
	Super()
	{
	}
}

Reference:http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html

Rule92:Avoid_comparison_with_float_NaN

Severity:Medium
Rule:AvoidcomparisonwithFloat.NaNandDouble.NaN.
Reason:AvoidcomparisonwithFloat.NaNandDouble.NaN.

UsageExample:

packagecom.rule;

publicclassAvoid_comparison_with_float_NaN_violation
{
	publicvoidmethod()
	{
		if(performDivision(0.0f,0.0f)==Float.NaN)//Violation
		{
			System.out.println("NotaNumber");
		}
		else
		{
			System.out.println("aNumber");
		}

	}

	publicfloatperformDivision(floatf1,floatf2)
	{
		returnf1/f2;
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_comparison_with_float_NaN_correction
{
	publicvoidmethod()
	{
		if(Float.isNan(performDivision(0.0,0.0)))//Correction
		{
			System.out.println("NotaNumber");
		}
		else
		{
			System.out.println("aNumber");
		}

	}

	publicfloatperformDivision(floatf1,floatf2)
	{
		returnf1/f2;
	}
}

Reference:http://www.concentric.net/~Ttwang/tech/javafloat.htm

Rule93:Declare_get_method_synchronized

Severity:High
Rule:Ifthesetmethodissynchronized,thegetmethodshouldalsobesynchronized.
Reason:Ifthesetmethodissynchronized,thegetmethodshouldalsobesynchronized.

UsageExample:

packagecom.rule;

publicclassDeclare_get_method_synchronized_violation
{
	privateintvalue;
	
	publicintgetValue()//VIOLATION
	{
		returnvalue;
	}
	
	publicsynchronizedvoidsetValue(intval)
	{
		value=val;
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassDeclare_get_method_synchronized_correction
{
	privateintvalue;
	
	publicsynchronizedintgetValue()//CORRECTION
	{
		returnvalue;
	}
	
	publicsynchronizedvoidsetValue(intval)
	{
		value=val;
	}
}

Reference:Noreferenceavailable.

Rule94:Avoid_using_float_or_double

Severity:High
Rule:Floatanddoubledonotprovideexactresultsandshouldnotbeusedwhereexactresultsarerequired.
Reason:Floatanddoubledonotprovideexactresultsandshouldnotbeusedwhereexactresultsarerequired.

UsageExample:

publicclassBadFloatAndDouble
{
	publicstaticvoidmain(String[]args)
	{
	doublefunds=1.0;
	intitemsBought=0;
	for(doubleprice=.10;funds>=price;price+=.10)//VIOLATION
		{
	funds-=price;//VIOLATION
	itemsBought++;
	}
	System.out.println(itemsBought+"itemsbought.");
	System.out.println("Change:$"+funds);//VIOLATION
}

}

Shouldbewrittenas:

publicclassBadFloatAndDouble
{
	publicstaticvoidmain(String[]args)
	{
		finalBigDecimalTEN_CENTS=newBigDecimal(".10");
		intitemsBought=0;
		BigDecimalfunds=newBigDecimal("1.00");
		for(BigDecimalprice=TEN_CENTS;funds.compareTo(price)>=0;
			price=price.add(TEN_CENTS))
		{
			itemsBought++;
			funds=funds.subtract(price);
		}
		System.out.println(itemsBought+"itemsbought.");
		System.out.println("Moneyleftover:$"+funds);
	}
}

Reference:JoshuaBloch:"EffectiveJava-ProgrammingLanguageGuide"AddisonWesley,2001,pp.149-151

Rule95:Avoid_assigning_variable_to_same_variable

Severity:Critical
Rule:Avoidassigningvariabletosamevariable.
Reason:Avoidassigningvariabletosamevariable.

UsageExample:

packagecom.rule;

publicclassAvoid_assigning_variable_to_same_variable_violation
{
	privateintiVar;
	Avoid_assigning_variable_to_same_variable_violation(intiVar)
	{
		iVar=iVar;//Violation
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_assigning_variable_to_same_variable_correction
{
	privateintiVar;
	Avoid_assigning_variable_to_same_variable_violation(intiVar)
	{
		this.iVar=iVar;//Correction
	}
}

Reference:Referencenotavailable.

Rule96:Erroneous_use_of_binary_OR

Severity:Medium
Rule:AvoiderroneoususeofbinaryORoperator.
Reason:AvoiderroneoususeofbinaryORoperator.

UsageExample:

packagecom.rule;

publicclassErroneous_use_of_binary_OR_violation
{
	publicstaticfinalintHSCROLLBAR=1;
	publicstaticfinalintVSCROLLBAR=2;
	publicstaticfinalintNONE=0;

	publicstaticfinalintBOTHSCROLLBARS=3;

	publicbooleancheck(intattribs)
	{
		return((attribs|BOTHSCROLLBARS)==HSCROLLBAR);
	}
}

Shouldbewrittenas:

Nocorrectionavailable.

Reference:Referencenotavailable.

Rule97:Avoid_unsynchronized_lazy_initialization_of_static_field

Severity:Critical
Rule:Avoidunsynchronizedlazyinitializationofnon-volatilestaticfield.
Reason:Avoidunsynchronizedlazyinitializationofnon-volatilestaticfield.

UsageExample:

packagecom.rule;

publicclassAvoid_Lazy_initialization_of_unsynchronized_static_field_violation
{
	privatestaticSingletoninstance=null;

	publicstaticSingletongetInstance()
	{
		if(instance==null)
				instance=newSingleton();//Violation
		returninstance;
	}
}

Shouldbewrittenas:

 

Reference:http://www.cs.umd.edu/users/pugh/java/memoryModel/jsr-133-faq.html

Rule98:Avoid_using_volatile_modifier_for_array

Severity:HighRule:Avoidusingvolatilemodifierforarray.Reason:Avoidusingvolatilemodifierforarray.

UsageExample:

packagecom.rule;

publicclassAvoid_using_volatile_modifier_for_array_violation
{
	publicstaticvolatileinti=10;
	
	publicstaticvolatileint[]array={10,20,30};	//Violation.
		
}

Shouldbewrittenas:

 

Reference:Referencenotavailable.

Rule99:Avoid_synchronization_on_mutable_field

Severity:CriticalRule:Avoidsynchronizationonobjectswhosereferencesaremutable.Reason:Avoidsynchronizationonobjectswhosereferencesaremutable.

UsageExample:

packagecom.rule;

publicclassAvoid_synchronization_on_mutable_field_violation
{
	MyClassmyClass=newMyClass();
	
	publicvoidfoo()
	{
		synchronized(myClass)//Violation
		{
			//...
		}
	}
}

Shouldbewrittenas:

Avoidsynchronizationonobjectswhosereferencesaremutable.

Reference:Referencenotavailable.

Rule100:Avoid_methods_with_closely_similar_names

Severity:Low
Rule:Avoidmethodsinsameclasswhichdifferonlyincase.
Reason:Avoidmethodsinsameclasswhichdifferonlyincase.

UsageExample:

packagecom.rule;
publicclassAvoid_methods_with_closely_similar_names_violation
{
	publicvoidmethod()
	{
	}
	publicvoidMethod()//VIOLATION
	{
	}
}

Shouldbewrittenas:

packagecom.rule;
publicclassAvoid_methods_with_closely_similar_names_correction
{
	publicvoidmethod1()
	{
	}
	publicvoidmethod2()//CORRECTION
	{
	}
}

Reference:Referencenotavailable.

Rule101:Use_serializable_objects_as_argument

Severity:Medium
Rule:TheobjectspassedtosomeofthemethodsneedtobeSerializable.
Reason:TheobjectspassedtosomeofthemethodsneedtobeSerializable.

UsageExample:

packagecom.rule;
importjava.io.IOException;
importjava.io.ObjectOutputStream;
importjava.io.OutputStream;

publicclassUse_serializable_objects_as_argument_violation
{
	publicvoidmethod1(ObjectOutputStreamoos)throwsException
	{
		oos.writeObject(this);//VIOLATION
	}
	
	classUSOAAV_ObjectOutputStreamextendsObjectOutputStream
	{
		USOAAV_ObjectOutputStream(OutputStreamos)throwsIOException
		{
			super(os);
		}
	}
}

Shouldbewrittenas:

packagecom.rule;
importjava.io.IOException;
importjava.io.ObjectOutputStream;
importjava.io.OutputStream;

publicclassUse_serializable_objects_as_argument_correctionimplementsSerializable//Correction
{
	publicvoidmethod1(ObjectOutputStreamoos)throws	Exception
	{
		oos.writeObject(this);
	}
	
	classUSOAAV_ObjectOutputStreamextendsObjectOutputStream
	{
		USOAAV_ObjectOutputStream(OutputStreamos)throwsIOException
		{
			super(os);
		}
	}
}

Reference:Noreferenceavailable.

Rule102:Do_not_call_methods_that_use_AppletStub

Severity:High
Rule:ThemethodsofAppletthatuseAppletStubshouldnotbecalledfromconstructor.
Reason:ThemethodsofAppletthatuseAppletStubshouldnotbecalledfromconstructor.

UsageExample:

packagecom.rule;

importjava.applet.Applet;

publicclassDo_not_call_methods_that_use_AppletStub_violationextendsApplet
{
	privateStringdocBase;
	
	publicDo_not_call_methods_that_use_AppletStub_violation()
	{
		docBase=getDocumentBase().toString();//VIOLATION
	}
}

Shouldbewrittenas:

packagecom.rule;

importjava.applet.Applet;

publicclassDo_not_call_methods_that_use_AppletStub_correctionextendsApplet
{
	privateStringdocBase;
	
	publicvoidinit()//CORRECTION
	{
		docBase=getDocumentBase().toString();
	}
}

Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/applet/AppletStub.html

Rule103:readResolve_method_should_have_java_lang_Object_as_its_return_type

Severity:Critical
Rule:ThisistheconventiontobefollowedforthereadResolvemethodtoberecognizedbytheserializationmechanism.
Reason:ThisistheconventiontobefollowedforthereadResolvemethodtoberecognizedbytheserializationmechanism.

UsageExample:

importjava.io.ObjectStreamException;
importjava.io.Serializable;

publicclassTestimplementsSerializable
{
	publicTestreadResolve()throwsObjectStreamException//VIOLATION
	{
		returnnull;
	}
}

Shouldbewrittenas:

importjava.io.ObjectStreamException;
importjava.io.Serializable;

publicclassTestimplementsSerializable
{
	publicObjectreadResolve()throwsObjectStreamException//VIOLATION
	{
		returnnull;
	}
}

Reference:NotAvailable.

Rule104:Avoid_setSize_in_componentResized

Severity:High
Rule:DonotcallsetSizemethodinsidethecomponentResizedmethod
Reason:DonotcallsetSizemethodinsidethecomponentResizedmethod

UsageExample:

packagecom.rule;

importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Component;
importjava.awt.Frame;
importjava.awt.Panel;
importjava.awt.event.ComponentAdapter;
importjava.awt.event.ComponentEvent;

publicclassAvoid_setSize_in_componentResized_violationextendsFrame
{
	publicAvoid_setSize_in_componentResized_violation()
	{
		Panelpan=newPanel();
		pan.setBackground(Color.blue);
		this.add(pan,BorderLayout.CENTER);
				
		pan.addComponentListener(newComponentAdapter(){
			publicvoidcomponentResized(ComponentEvente)
			{
				setSize();
				Frameparent=Avoid_setSize_in_componentResized_violation.this;
				parent.setSize(200,200);	//VIOLATION
				parent.validate();
			}
			
			publicvoidsetSize()
			{
			}
		});


		this.addComponentListener(newComponentAdapter(){
			publicvoidcomponentResized(ComponentEvente)
			{
				e.getComponent().setSize(10,10);			//VIOLATION
				((Component)e.getSource()).setSize(20,20);		//VIOLATION
				setSize(100,100);					//VIOLATION
			}
		});
	}
}

Shouldbewrittenas:

RemovecallstosetSizemethodsfromcomponentResizedmethod.

Reference:ReferenceNotAvailable.

Rule105:Avoid_unnecessary_call_to_Math_ceil

Severity:Medium
Rule:AvoidunnecessarycalltoMath.ceil().
Reason:AvoidunnecessarycalltoMath.ceil().

UsageExample:

packagecom.rule;

publicclassAvoid_unnecessary_call_to_Math_ceil_violation
{
	publicvoidmethod()
	{
		inti=10;

		doubleresult=Math.ceil((double)i);	//Violation
	}
	
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_unnecessary_call_to_Math_ceil_correction
{
	publicvoidmethod()
	{
		doublei=10.2;

		doubleresult=Math.ceil(i);	//Correction
	}
	
}

Reference:Referencenotavailable.

Rule106:Avoid_unnecessary_call_to_Math_class_method

Severity:Medium
Rule:AvoidunnecessarycalltoamethodofMathclass.
Reason:AvoidunnecessarycalltoamethodofMathclass.

UsageExample:

packagecom.rule;

publicclassAvoid_unnecessary_call_to_Math_class_method_violation
{
	publicstaticfinaldoubleNUMBER=-10.2;
	
	publicvoidmethod()
	{
		doubled=Math.abs(NUMBER);		//Violation.
	}
		
}

Shouldbewrittenas:

packagecom.rule;

publicclassAvoid_unnecessary_call_to_Math_class_method_correction
{
	publicstaticfinaldoubleNUMBER=-10.2;
	publicstaticfinaldoubleABSNUMBER=10.2;

	publicvoidmethod()
	{
		doubled=ABSNUMBER;		//Correction.
	}
	
}

Reference:Referencenotavailable.

Rule107:Always_use_method_return_values

Severity:Low
Rule:Thereturnvalueofthemethodcallshouldnotbeignored.
Reason:Thereturnvalueofthemethodcallshouldnotbeignored.

UsageExample:

packagecom.rule;

publicclassAlways_use_method_return_values
{
	publicvoidfubar()
	{
		StringsomeString=getString();
		someString.trim();
	}
	
	privateStringgetString()
	{
		return"hello";
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassAlways_use_method_return_values
{
	publicvoidfubar()
	{
		StringsomeString=getString();
		someString=someString.trim();
	}
	
	privateStringgetString()
	{
		return"hello";
	}
}

Reference:Noreferenceavailable.

Rule108:Always_check_return_value_of_input_stream_read

Severity:Low
Rule:ThereturnvalueofthemethodcallInputStream.read(byte[]b)andInputStream.read(byte[]b,intoff,intlen)shouldalwaysbechecked.
Reason:ThereturnvalueofthemethodcallInputStream.read(byte[]b)andInputStream.read(byte[]b,intoff,intlen)shouldalwaysbechecked.

UsageExample:

packagecom.rule;

importjava.io.InputStream;
importjava.io.FileInputStream;
importjava.io.IOException;

publicclassAlways_check_return_value_of_input_stream_read_violation
{
	publicvoidmethod()
	{
		InputStreamin=null;
		try
		{
			in=newFileInputStream("Filename.txt");
			
			in.read(b,3,10);	//Violation.
		}
		catch(IOExceptionioe)
		{
			//HandleException.
		}
		finally
		{
			in.close();
		}
	}
		
}

Shouldbewrittenas:

packagecom.rule;

importjava.io.InputStream;
importjava.io.FileInputStream;
importjava.io.IOException;

publicclassAlways_check_return_value_of_input_stream_read_correction
{
	publicvoidmethod()
	{
		InputStreamin=null;
		try
		{
			in=newFileInputStream("Filename.txt");
			
			inti=in.read(b,3,10);	//Correction
			
			//Checkvalueofi.
		}
		catch(IOExceptionioe)
		{
			//HandleException.
		}
		finally
		{
			in.close();
		}
	}
	
}

Reference:Referencenotavailable.

Rule109:Always_check_return_value_of_input_stream_skip

Severity:Low
Rule:ThereturnvalueofthemethodcallInputStream.skip(longn)shouldalwaysbechecked.
Reason:ThereturnvalueofthemethodcallInputStream.skip(longn)shouldalwaysbechecked.

UsageExample:

packagecom.rule;

importjava.io.InputStream;
importjava.io.FileInputStream;
importjava.io.IOException;

publicclassAlways_check_return_value_of_input_stream_skip_violation
{
	publicvoidmethod()
	{
		InputStreamin=null;
		try
		{
			longcount=100000;
			in=newFileInputStream("Filename.txt");
			
			in.skip(count);	//Violation.
		}
		catch(IOExceptionioe)
		{
			//HandleException.
		}
		finally
		{
			in.close();
		}
	}
		
}

Shouldbewrittenas:

packagecom.rule;

importjava.io.InputStream;
importjava.io.FileInputStream;
importjava.io.IOException;

publicclassAlways_check_return_value_of_input_stream_skip_correction
{
	publicvoidmethod()
	{
		InputStreamin=null;
		try
		{
			longcount=100000;
			
			in=newFileInputStream("Filename.txt");
			inti=in.skip(count);	//Correction
			
			//Checkvalueofi.
		}
		catch(IOExceptionioe)
		{
			//HandleException.
		}
		finally
		{
			in.close();
		}
	}
	
}

Reference:Referencenotavailable.

Rule110:Erroneous_indexOf_check

Severity:Low
Rule:TheconditionshouldcheckwhetherindexOfreturnsnegativeornon-negativevalue.
Reason:TheconditionshouldcheckwhetherindexOfreturnsnegativeornon-negativevalue.

UsageExample:

publicclassSomeClass
{
	publicvoidaMethod()
	{
		Strings="hello";
		if(s.indexOf("e")>0)//VIOLATION
		{
			//...
		}
		if(s.indexOf("s")<1)//VIOLATION
		{
			//...
		}
		if(s.indexOf("h")>=1)//VIOLATION
		{
			//....
		}
		If(s.indexOf("o")<=0)//VIOLATION
		{
			//...
		}
	}
}

Shouldbewrittenas:

publicclassSomeClass
{
	publicvoidaMethod()
	{
		Strings="hello";
		if(s.indexOf("e")>=0)
		{
			//...
		}
		if(s.indexOf("s")==-1)
		{
			//...
		}
		if(s.indexOf("h")!=-1)
		{
			//....
		}
		If(s.indexOf("o")==-1)
		{
			//...
		}
	}
}

Reference:Referencenotavailable.

Rule111:Calling_equals_of_final_classes

Severity:Low
Rule:Thiscodecallsequalsonanobjectofafinalclasswhichdoesn'thaveequals()methodoverriden.
Reason:Thiscodecallsequalsonanobjectofafinalclasswhichdoesn'thaveequals()methodoverriden.

UsageExample:

publicfinalclassTest
{
	publicvoidcheck(Testne)
	{
		if(ne.equals(this))//VIOLATION
		{
			System.out.println("it'sequal");
		}
	}
}

Shouldbewrittenas:

CheckifequalsneedstobeoverrideninclassTestornot.

Reference:Noreferencesavailable.

Rule112:Possible_infinite_recursion

Severity:Critical
Rule:Possibleinfiniterecursion.
Reason:Possibleinfiniterecursion.

UsageExample:

packagecom.rule;

importcom.appperfect.common.dstruct.Color;
importcom.appperfect.common.dstruct.Font;

publicclassPossible_infinite_recursion_violation
{
	publicvoidshowMessage(Strings,Fontf)
	{
		showMessage(s,f,null);
	}

	publicvoidshowMessage(Strings,Fontf,Colorfg)
	{
		showMessage(s,f,fg);//Violation
	}

	publicvoidshowMessage(Strings,Fontf,Colorfg,Colorbg)
	{
		//..codethatrendersactually
	}
}

Shouldbewrittenas:

Nocorrectionavailable.

Reference:Referencenotavailable.

Rule113:Possible_infinite_loop

Severity:Critical
Rule:Possibleinfiniteloop.
Reason:Possibleinfiniteloop.

UsageExample:

importjava.util.List;
importjava.util.Iterator;

publicclassTest
{
publicvoidmethod(Listl)
{
booleanbool=true;
do
	{
//...
}while(bool);//VIOLATION


Iteratoriter;
for(iter=l.iterator();iter.hasNext();)//VIOLATION
	{
//...
}


while(true)//VIOLATION
	{
//...
}
}
}

Shouldbewrittenas:

importjava.util.List;
importjava.util.Iterator;


publicclassTest
{
publicvoidmethod(Listl)
{
booleanbool=true;
do
	{
//...
bool=false;//FIXED
}while(bool);


Iteratoriter;
for(iter=l.iterator();iter.hasNext();)
	{
//...
System.err.println(iter.next());//FIXED
}

while(true)
	{
//...
break;//FIXED
}
}
}

Reference:NotAvailable.

Rule114:instanceOf_will_always_return_false

Severity:Medium
Rule:ThisinstanceOfcheckwillalwaysreturnfalse.
Reason:ThisinstanceOfcheckwillalwaysreturnfalse.

UsageExample:

importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.Vector;

publicclassTest
{
	publicstaticvoidmain(String[]args)
	{
		Collections=newArrayList();
		if(sinstanceofVector)//VIOLATION
		{
			//...
		}
		else
		{
			//...
		}
	}
}

Shouldbewrittenas:

 

Reference:Noreferencesavailable.

Rule115:Avoid_classes_that_are_not_accessible

Severity:MediumRule:Fields,methods,andtypesthatarenot"private"andnot"static"areuselessiftheonlyconstructorsavailableareprivate.Reason:Fields,methods,andtypesthatarenot"private"andnot"static"areuselessiftheonlyconstructorsavailableareprivate.

UsageExample:

publicclassTest//VIOLATION
{

privatestaticTest_test;

privateTest()
{
}

publicTestgetInstance()
{
if(_test==null)
{
_test=newTest();
}
return_test;
}
}

Shouldbewrittenas:

publicclassTest//FIXED
{

privateTest_test;

privateTest()
{
}

publicstaticTestgetInstance()
{
if(_test==null)
{
_test=newTest();
}
return_test;
}
}

Reference:NotAvailable.

Rule116:Avoid_rethrowing_an_exception_in_a_catch_clause

Severity:Low
Rule:Removingitimprovescodereadabilityandmakescodelesserror-prone.
Reason:Removingitimprovescodereadabilityandmakescodelesserror-prone.

UsageExample:

publicclassTest
{
publicvoidmethod()throwsException
{

try
	{
//...
}
	catch(Exceptione)//VIOLATION
	{
throwe;
}
}
}

Shouldbewrittenas:

publicTest
{

publicvoidmethod()throwsException
{
	//FIXED:try-catchstatementisremoved
//...
}
}

Reference:NotAvailable.

Rule117:Avoid_initializing_array_dimensions_with_negative_values

Severity:Critical
Rule:Whenanarrayisdeclaredwithanegativedimenson,aNegativeArraySizeExceptionwouldbethrown.
Reason:Whenanarrayisdeclaredwithanegativedimenson,aNegativeArraySizeExceptionwouldbethrown.

UsageExample:

publicclassTest
{
privatestaticfinalintA_SIZE=10;
privatestaticfinalintB_SIZE=15;
privatestaticint[]diffSet=newint[A_SIZE-B_SIZE];//VIOLATION
}

Shouldbewrittenas:

publicclassTest
{
privatestaticfinalintA_SIZE=10;
privatestaticfinalintB_SIZE=15;
privatestaticint[]diffSet=newint[A_SIZE-B_SIZE>=0?A_SIZE-B_SIZE:0];//FIXED
}

Reference:NotAvailable.

Rule118:Use_Equals_Instead_Equality_Operator

Severity:Medium
Rule:Useequals()insteadof'=='operator.
Reason:Useequals()insteadof'=='operator.

UsageExample:

packagecom.rule;
publicclassUseEqualsInsteadEqualityOperator_Violation
{
	privatevoidfoo()
	{
		Stringstr="compare";
		Stringtemp=newString("compare");
		if(str==temp)//Violation
		{
			//...
		}
	}
}

Shouldbewrittenas:

packagecom.rule;
publicclassUseEqualsInsteadEqualityOperator_Correction
{
	privatevoidfoo()
	{
		Stringstr="compare";
		Stringtemp=newString("compare");
		if(str.equals(temp))//Correction
		{
			//...
		}
	}
}

Reference:http://www.devx.com/tips/Tip/14219

Rule119:Possible_spelling_mistake_while_overriding_method

Severity:Medium
Rule:Possiblespellingmistakewhileoverridingmethod.
Reason:Possiblespellingmistakewhileoverridingmethod.

UsageExample:

packagecom.rule;
publicclassPossible_spelling_mistake_while_overriding_method_violation
{
	publicStringToString()//VIOLATION
	{
		returnsuper.toString();
	}
}

Shouldbewrittenas:

packagecom.rule;
publicclassPossible_spelling_mistake_while_overriding_method_correction
{
	publicStringtoString()//CORRECTION
	{
		returnsuper.toString();
	}
}

Reference:ReferenceNotAvailable.

Rule120:Do_not_use_zero_as_index_with_resuset

Severity:Critical
Rule:TheindexforgetandupdatemethodsofResultSetstartsfrom1.
Reason:TheindexforgetandupdatemethodsofResultSetstartsfrom1.

UsageExample:

packagecom.rule;

importjava.sql.ResultSet;
importjava.sql.SQLException;

publicclassDo_not_use_zero_as_index_with_ResultSet_violation
{
	publicStringgetName(ResultSetrs)throwsSQLException
	{
		returnrs.getString(0);//VIOLATION
	}
	
	publicvoidsetName(ResultSetrs,Stringname)throwsSQLException
	{
		rs.updateString(0,name);//VIOLATION
	}
}

Shouldbewrittenas:

packagecom.rule;

importjava.sql.ResultSet;
importjava.sql.SQLException;

publicclassDo_not_use_zero_as_index_with_ResultSet_correction
{
	publicStringgetName(ResultSetrs)throwsSQLException
	{
		returnrs.getString(1);//CORRECTION
	}
	
	publicvoidsetName(ResultSetrs,Stringname)throwsSQLException
	{
		rs.updateString(1,name);//CORRECTION
	}
}

Reference:http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/resultset.html
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html

Rule121:Do_not_use_zero_as_index_with_PreparedStatement

Severity:Critical
Rule:TheindexforthesettersofPreparedStatementstartfrom1.
Reason:TheindexforthesettersofPreparedStatementstartfrom1.

UsageExample:

importjava.sql.PreparedStatement;
importjava.sql.SQLException;

publicclassTest
{
	publicvoidsetName(PreparedStatementps,Stringname)throwsSQLException
	{
		ps.setObject(0,name);//VIOLATION
	}
}

Shouldbewrittenas:

importjava.sql.PreparedStatement;
importjava.sql.SQLException;

publicclassTest
{
	publicvoidsetName(PreparedStatementps,Stringname)throwsSQLException
	{
		ps.setObject(1,name);//FIXED
	}
}

Reference:NotAvailable.

Rule122:Always_call_wait_inside_while_or_doWhile_loop

Severity:High
Rule:Alwayscallwaitfromwithinawhileordo-whileloop.
Reason:Alwayscallwaitfromwithinawhileordo-whileloop.

UsageExample:

packagecom.rule;
publicclassAlwaysCall_wait_inside_while_or_doWhile_loop_Violation
{
	intavailable=0;
	synchronizedpublicvoidconsume()
	{
		try
		{
			if(available<0)
			{
				wait();//VIOLATION
			}
		}
		catch(InterruptedExceptione)
		{
			//consume
		}
	}
}

Shouldbewrittenas:

packagecom.rule;
publicclassAlwaysCall_wait_inside_while_or_doWhile_loop_Correction
{
	intavailable=0;
	synchronizedpublicvoidconsume()
	{
		try
		{
			while(available<0)
			{
				wait();//CORRECTION
			}
		}
		catch(InterruptedExceptione)
		{
			//consume
		}
	}
}

Reference:http://today.java.net/cs/user/create/cs_msg?x-lr=cs_msg/7296&x-lr2=a/131

Rule123:Always_call_Condition_await_inside_a_loop

Severity:High
Rule:Iftheobjectisusedformultipleconditions,theconditionthecallerintendedtowaitformightnotbetheonethatactuallyoccurred.
Reason:Iftheobjectisusedformultipleconditions,theconditionthecallerintendedtowaitformightnotbetheonethatactuallyoccurred.

UsageExample:

publicclassTest
{
	voidfubar(Conditioncond)throwsInterruptedException//VIOLATION
	{
		cond.await();
	}
}

Shouldbewrittenas:

publicclassTest
{
	intx;
	voidfubar(Conditioncond)throwsInterruptedException
	{
		while(x==0)
		{
			cond.wait();//FIXED
		}
	}
}

Reference:NotAvailable.

Rule124:Avoid_public_semaphores

Severity:High
Rule:Avoidusingwait(),notify()ornotifyAll()onthe"this"reference.
Reason:Avoidusingwait(),notify()ornotifyAll()onthe"this"reference.

UsageExample:

importjava.util.*;

publicclassTestextendsThread
{
	ArrayListobjects=newArrayList();
	
	publicstaticvoidmain(String[]args)
	{
		finalTesttest=newTest();
		Threadt1=newThread()
		{
			publicvoidrun()
			{
				try
				{
					test.add(newObject());
				}
				catch(InterruptedExceptione)
				{
					e.printStackTrace();
				}
			}
		};
		t1.start();
		Threadt2=newThread()
		{
			publicvoidrun()
			{
				try
				{
					test.add(newObject());
				}
				catch(InterruptedExceptione)
				{
					e.printStackTrace();
				}
			}
		};
		t2.start();
	}
	
	publicsynchronizedvoidadd(Objectobj)throwsInterruptedException
	{
		while(objects.size()==10)
		{
			wait();//VIOLATION
		}
		objects.add(obj);
		if(objects.size()==1)
		{
			notify();
		}
	}
}

Shouldbewrittenas:

Considerusingaprivatemembervariabletocontrolsynchronization.

Reference:Noreferenceavailable.

Rule125:Do_not_call_interrupted_method_on_thread_object

Severity:High
Rule:ThestaticmethodinterruptedinThreadclassshouldnotbecalledonathreadobject.
Reason:ThestaticmethodinterruptedinThreadclassshouldnotbecalledonathreadobject.

UsageExample:

packagecom.rule;

publicclassDo_not_call_interrupted_method_on_thread_object_violation
{
	publicvoidmethod(Threadth)
	{
		booleanb=th.interrupted();//VIOLATION
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassDo_not_call_interrupted_method_on_thread_object_correction
{
	publicvoidmethod(Threadth)
	{
		booleanb=th.isInterrupted();//CORRECTION
	}
}

Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html#interrupted()
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html#isInterrupted()

Rule126:Avoid_unnecessary_comparison_of_two_null_references

Severity:Low
Rule:Avoidunnecessarycomparisonoftworeferenceswhicharedefinitelynull.
Reason:Avoidunnecessarycomparisonoftworeferenceswhicharedefinitelynull.

UsageExample:

publicclassTest
{
	publicvoidfubar()
	{
		Objectob1=null;
		Objectob2=null;
		//...
		if(ob1!=ob2)//VIOLATION
		{
			//...
		}
	}
}

Shouldbewrittenas:

Checkiftheob1andob2aretoalwaysremainnull,thentheconditioncanberemoved.

Reference:NotAvailable.

Rule127:Avoid_unnecessary_comparison_of_non_null_reference_with_null_reference

Severity:Low
Rule:Avoidunnecessarycomparisonoftworeferenceswhereoneisdefinitelynonnullandtheotherisdefinitelynull.
Reason:Avoidunnecessarycomparisonoftworeferenceswhereoneisdefinitelynonnullandtheotherisdefinitelynull.

UsageExample:

publicclassTest
{
	publicvoidfubar()
	{
		Objectob1=null;
		Objectob2=null;
		//...
		ob2=newObject();
		//...
		if(ob1==ob2)//VIOLATION
		{
			//...
		}
	}
}

Shouldbewrittenas:

Ifonevalueisalwaysgoingtobenullandtheotheralwaysnon-null,thentheconditioncanberemoved.

Reference:NotAvailable.

Rule128:Avoid_unnecessary_comparison_with_int

Severity:Medium
Rule:Thiswillreturnaconstantvalue.
Reason:Thiswillreturnaconstantvalue.

UsageExample:

publicclassTest
{
	intmethod(intx)
	{
		for(inti=0;i<=Integer.MAX_VALUE;i++)//VIOLATION
		{
			if(i*i==x)
			{
				returni;
			}
		}
		return0;
	}
	
	intmethod2(intx)
	{
		if(x<0||x>Integer.MAX_VALUE)//VIOLATION
		{
			return-1;
		}
		returnx;
	}
}

Shouldbewrittenas:

Pleaserecheckcondition.

Reference:NotAvailable.

Rule129:Do_not_start_Thread_in_constructor

Severity:Low
Rule:Thestart()methodofathreadshouldnotbecalledinit'sconstructor.
Reason:Thestart()methodofathreadshouldnotbecalledinit'sconstructor.

UsageExample:

packagecom.rule;

publicclassDo_not_start_Thread_in_constructor_violation
{
	voidmethod()
	{
		newThread_sub();
	}
	classThread_subextendsThread
	{
		publicThread_sub()
		{
			start();//VIOLATION
		}
	}
}

Shouldbewrittenas:

packagecom.rule;

publicclassDo_not_start_Thread_in_constructor_correction
{
	voidmethod()
	{
		newThread_sub().start();//CORRECTION:calltostart()movedhere
	}
	classThread_subextendsThread
	{
		publicThread_sub()
		{
			//CORRECTION:calltostart()ismovedtowhereobjectiscreated
		}
	}
}

Reference:https://lists.xcf.berkeley.edu/lists/advanced-java/2001-April/016440.html

Rule130:Classes_or_interfaces_having_same_name_as_java_file_should_be_public

Severity:Low
Rule:Classesorinterfaceshavingsamenameasjavafileshouldbedeclaredaspublic.
Reason:Classesorinterfaceshavingsamenameasjavafileshouldbedeclaredaspublic.

UsageExample:

filename:MyFile.java

classMyFile//VIOLATION
{}

Shouldbewrittenas:

filename:MyFile.java

publicclassMyFile//CORRECTION
{}

Reference:Noreferencesavailable.

Rule131:Always_ensure_only_one_class_or_interface_has_same_name_as_java_file

Severity:Low
Rule:Atleastoneclassorinterfaceshouldhavethesamenameasthejavafileinwhichitisdeclared.
Reason:Atleastoneclassorinterfaceshouldhavethesamenameasthejavafileinwhichitisdeclared.

UsageExample:

filename:MyClass.java

classMyClass_//VIOLATION
{
}

Shouldbewrittenas:

filename:MyClass.java

classMyClass//CORRECTION
{
}

Reference:Norefrerencesavailable.

Rule132:Avoid_returning_this

Severity:Medium
Rule:Avoidreturningthisfromamethod.
Reason:Avoidreturningthisfromamethod.

UsageExample:

packagecom.rule;
publicclassAvoid_returning_this_violation
{
	publicAvoid_returning_this_violationmethod1()
	{
		returnthis;//VIOLATION
	}
	publicvoidmethod2()
	{
		//somethingsynchronized
	}
	publicstaticvoidmain(String[]args)
	{
		Avoid_returning_this_violationa=newAvoid_returning_this_violation();
		a.method1().method2();
	}
}

Shouldbewrittenas:

packagecom.rule;
publicclassAvoid_returning_this_correction
{
	publicvoidmethod1()
	{
		return;//CORRECTION
	}
	publicvoidmethod2()
	{
		//somethingsynchronized
	}
	publicstaticvoidmain(String[]args)
	{
		Avoid_returning_this_correctiona=newAvoid_returning_this_correction();
		a.method1();
		a.method2();
	}
}

Reference:http://gee.cs.oswego.edu/dl/html/javaCodingStd.html#secRec

Rule133:Avoid_calling_getResource_on_getClass

Severity:Medium
Rule:CallinggetResource()ontheclassreturnedbygetClass()mightcauseunexpectedresults.
Reason:CallinggetResource()ontheclassreturnedbygetClass()mightcauseunexpectedresults.

UsageExample:

packagecom.rule;

importjava.net.URL;

publicclassAvoid_calling_getResource_on_getClass_violation
{
	publicURLloadResource(Stringstr)
	{
		returnthis.getClass().getResource(str);//VIOLATION
	}
}

Shouldbewrittenas:

packagecom.rule;

importjava.net.URL;

publicclassAvoid_calling_getResource_on_getClass_correction
{
	publicURLloadResource(Stringstr)
	{
		returnAvoid_calling_getResource_on_getClass_correction.class.getResource(str);//CORRECTION
	}
}

Reference:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getResource(java.lang.String)
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String)

Rule134:Non_instantiable_class_should_contain_non_private_static_method

Severity:Critical
Rule:Thereshouldbeatleastonenon-private,staticmethodintheclasshavingonlyprivateconstructors
Reason:Thereshouldbeatleastonenon-private,staticmethodintheclasshavingonlyprivateconstructors

UsageExample:

packagecom.rule;

classNon_instantiable_class_should_contain_non_private_static_member_violation
{
	privateNon_instantiable_class_should_contain_non_private_static_member_violation()
	{
	}

	privatestaticintgetValue()//VIOLATION
	{
		return1;
	}
}

Shouldbewrittenas:

packagecom.rule;

classNon_instantiable_class_should_contain_non_private_static_member_correction
{
	privateNon_instantiable_class_should_contain_non_private_static_member_correction()
	{
	}
	
	staticintgetValue()//CORRECTION
	{
		return1;
	}
}

Reference:ReferenceNotAvailable.

Rule135:Do_not_override_synchronized_method_with_unsynchronized_method

Severity:High
Rule:Donotoverridesynchronizedmethodwithunsynchronizedmethod.
Reason:Donotoverridesynchronizedmethodwithunsynchronizedmethod.

UsageExample:

packagecom.rule;

publicclassDo_not_override_synchronized_method_with_unsynchronized_method_violation
{
	publicsynchronizedvoidfoo()	{}
}
classchild
{
	publicvoidfoo(){}//Violation
}

Shouldbewrittenas:

packagecom.rule;

publicclassDo_not_override_synchronized_method_with_unsynchronized_method_correction
{
	publicsynchronizedvoidfoo()	{}
}
classchild
{
	publicsynchronizedvoidfoo()	{}//Correction
}

Reference:Referencenotavailable.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值