FindBugs Bug DescriptionsThis document lists the standard bug patterns reported by FindBugs version 3.0.1-dev-20240220. SummaryDescriptionsBC: equals ???????????????????????????????????????????????????????????? (BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS)
BIT: ????????????????????????????????????????????? (BIT_SIGNED_CHECK)
???????????????????????? Boris Bokowski CN: Cloneable ??????????????????????????? clone ??????????????????????????????????????????????????????????????? (CN_IDIOM)
????????????????????? CN: clone ??????????????? super.clone() ??????????????????????????? (CN_IDIOM_NO_SUPER_CALL)
????????? final ???????????????
???????????? CN: Cloneable ???????????????????????????????????? clone ????????????????????????????????? (CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE)
????????????????????? CNT: ?????????????????????????????????????????? (CNT_ROUGH_CONSTANT_VALUE)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Co: ??????????????????????????? compareTo ????????????????????????????????? (CO_ABSTRACT_SELF)
?????????????????????????????? Co: compareTo()/compare() ??????????????? float ????????? double ?????????????????? (CO_COMPARETO_INCORRECT_FLOATING)??????????????????????????????????????????????????????????????? double ????????? float ??????????????????????????? ??? val1 > val2 ? 1 : val1 < val2 ? -1 : 0??? ????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????? -0.0 ??? NaN ??????????????????????????????????????? ????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????? Double.compare ????????? Float.compare ??????????????????????????????????????????????????? Co: compareTo()/compare() ??? Integer.MIN_VALUE ????????? (CO_COMPARETO_RESULTS_MIN_VALUE)
??????????????????????????????????????? Co: ????????? compareTo ????????????????????? (CO_SELF_NO_OBJECT)
?????????????????????????????? DE: ?????????????????????????????????????????????????????? (DE_MIGHT_DROP)???????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? DE: ????????????????????????????????????????????????????????? (DE_MIGHT_IGNORE)???????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? DMI: ??????????????????????????????????????????????????????Entry ???????????????????????????????????????????????????????????????????????? (DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS)entrySet ??????????????????????????? Entry ?????????????????????????????????????????????????????????????????? Map ????????????????????????????????????????????????????????? Java 1.6 ???????????????IdentityHashMap ??? EnumMap ????????????????????????????????? ??????????????? Map ?????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????addAll ?????????????????????????????? entrySet ??????????????????????????????????????????????????????????????????????????? DMI: Random ?????????????????????????????????1???????????????????????? (DMI_RANDOM_USED_ONLY_ONCE)
?????????????????????
????????????????????????????????????????????????????????????????????????????????????????????? DMI: ?????????????????????????????????????????? removeAll ?????????????????????????????? (DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION)
?????????????????? Dm: System.exit(...) ???????????????????????????????????? (DM_EXIT)
Dm: ????????????????????? runFinalizersOnExit ???????????????????????????????????? (DM_RUN_FINALIZERS_ON_EXIT)
?????????????????????????????????????????? ES: String ?????????????????? == ??? != ????????????????????????????????? (ES_COMPARING_PARAMETER_STRING_WITH_EQ)
???????????????????????????????????????????????? == ??? != ??????????????? ES: String ????????????????????? == ??? != ????????????????????????????????? (ES_COMPARING_STRINGS_WITH_EQ)
???????????????????????????????????????????????? == ??? != ??????????????? Eq: ??????????????????????????? equals ????????????????????????????????? (EQ_ABSTRACT_SELF)
?????????????????????????????? Eq: equals ??????????????????????????????????????????????????????????????????????????? (EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)
?????? public boolean equals(Object o) { if (o instanceof Foo) return name.equals(((Foo)o).name); else if (o instanceof String) return name.equals(o); else return false; }
??????????????????????????????????????? Eq: compareTo(...) ??????????????????????????? Object.equals() ?????????????????????????????? (EQ_COMPARETO_USE_OBJECT_EQUALS)
????????????????????? Comparable ???????????????????????? compareTo ??????????????? JavaDoc ??????????????????????????????
Eq: equals ?????????????????????????????????????????????????????? (EQ_GETCLASS_AND_CLASS_CONSTANT)
???????????????????????????????????????????????????????????????????????? Eq: ????????? equals ????????????????????? (EQ_SELF_NO_OBJECT)
?????????????????????????????? FI: ???????????????????????????????????????????????? (FI_EMPTY)
?????? FI: ???????????????????????????????????????????????? (FI_EXPLICIT_INVOCATION)
?????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????Java ??????????????????????????????????????????????????? FI: ?????????????????????????????????????????? null ????????? (FI_FINALIZER_NULLS_FIELDS)??????????????????????????????????????????????????? null ????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? FI: ?????????????????????????????????????????? null ??????????????? (FI_FINALIZER_ONLY_NULLS_FIELDS)
??????????????????????????????????????????????????? null ?????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
FI: ???????????????????????????????????????????????????????????????????????????????????????????????? (FI_MISSING_SUPER_CALL)
?????? FI: ????????????????????????????????????????????????????????????????????????????????????????????? (FI_NULLIFY_SUPER)
???????????? FI: ??????????????????????????????????????????????????????????????????????????????????????????????????? (FI_USELESS)
?????? FS: ?????????????????? \n ????????? %n ????????????????????? (VA_FORMAT_STRING_USES_NEWLINE)??????????????????????????????????????? (\n) ??????????????????????????? ????????????????????????????????? %n ???????????????????????????????????????????????????%n ?????????????????????????????????????????????????????????????????????????????? GC: ????????????????????????????????????????????? (GC_UNCHECKED_TYPE_IN_GENERIC_CALL)??????????????????????????????????????????????????????????????? Object ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????? Java ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? HE: equals ??????????????????????????????????????? hashCode ????????????????????????????????????????????? (HE_EQUALS_NO_HASHCODE)
????????????????????? HE: equals ??????????????????????????? Object.hashCode() ?????????????????????????????? (HE_EQUALS_USE_HASHCODE)
?????????????????????
??????????????????????????????????????? HashMap/HashTable ???????????????????????????????????????????????????????????????????????? public int hashCode() { assert false : "hashCode????????????????????????????????????????????????????????????"; return 42; // ???????????? } HE: hashCode ??????????????????????????????????????? equals ????????????????????????????????????????????? (HE_HASHCODE_NO_EQUALS)
????????????????????? HE: hashCode ??????????????????????????? Object.equals() ?????????????????????????????? (HE_HASHCODE_USE_OBJECT_EQUALS)
?????????????????????
??????????????????????????????????????? HashMap/HashTable ???????????????????????????????????????????????????????????????????????? public int hashCode() { assert false : "hashCode????????????????????????????????????????????????????????????"; return 42; // ???????????? } HE: equals ??????????????????????????? Object.hashCode() ?????????????????????????????? (HE_INHERITS_EQUALS_USE_HASHCODE)
??????????????????????????????????????????????????????
IC: ??????????????????????????????????????????????????????????????????????????? (IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZATION)
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? public class CircularClassInitialization { static class InnerClassSingleton extends CircularClassInitialization { static InnerClassSingleton singleton = new InnerClassSingleton(); } static CircularClassInitialization foo = InnerClassSingleton.singleton; } IMSE: ???????????? IllegalMonitorStateException ??????????????? (IMSE_DONT_CATCH_IMSE)
ISC: static ?????????????????????????????????????????????????????????????????????????????? (ISC_INSTANTIATE_STATIC_CLASS)?????????????????????static ?????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? static ???????????????????????????????????????????????? It: Iterator.next() ??? NoSuchElementException ???????????????????????? (IT_NO_SUCH_ELEMENT)
????????????????????? J2EE: HttpSession ??????????????????????????????????????????????????? (J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION)?????????????????????HttpSession ????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????? JCIP: ???????????????????????????????????? final ???????????? (JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS)???????????????net.jcip.annotations.Immutable ????????? javax.annotation.concurrent.Immutable ??????????????????????????????????????? ????????????????????????????????????????????????????????????????????? final ??????????????????????????????????????? ME: public ??????????????????????????????????????????????????????????????????Public enum method unconditionally sets its field (ME_ENUM_FIELD_SETTER)????????????????????????????????????????????????????????? public ???????????? public ??????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ME: ??????????????????????????? public ?????????????????? (ME_MUTABLE_ENUM_FIELD)?????? public ?????????????????? public ????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????? final ???????????????????????????????????????????????????????????????????????????????????????????????? NP: ???????????? Boolean ?????????????????????????????? null ?????????????????? (NP_BOOLEAN_RETURN_NULL)Boolean.TRUE???Boolean.FALSE???null ?????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????? Boolean ????????????????????????????????????????????????????????? null ???????????????????????? NullPointerException ??????????????????????????????????????? NP: null ??????????????????????????? clone ???????????? (NP_CLONE_COULD_RETURN_NULL)
?????? NP: equals ??????????????? null ??????????????????????????????????????? (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT)
?????? NP: null ??????????????????????????? toString ???????????? (NP_TOSTRING_COULD_RETURN_NULL)
?????? Nm: ????????????????????????????????????????????? (NM_CLASS_NAMING_CONVENTION)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? ?????????????????? (URL???HTML??????????????????????????????????????????????????????????????????????????????????????????????????????) ???????????????????????????????????? Nm: ?????????????????????????????????????????????????????????????????? Exception ?????????????????????????????? (NM_CLASS_NOT_EXCEPTION)??????????????????????????????????????????????????????????????????????????????????????????Exception?????????????????????????????? ??????????????????????????????????????????????????????????????? Nm: ???????????????????????????????????? (NM_CONFUSING)????????????????????????????????????????????????????????????????????????????????????????????????????????? Nm: ??????????????????????????????????????????????????? (NM_FIELD_NAMING_CONVENTION)final ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Nm: Java ????????????????????????????????????????????????????????????????????????????????? (NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER)???????????????Java ??????????????????????????????????????????????????????????????????????????????????????? ???????????? Java ???????????????????????????????????????????????????????????????????????????????????????????????? Nm: Java ????????????????????????????????????????????????????????????????????????????????? (NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER)?????????????????????Java ????????????????????????????????????????????????????????????????????? ?????????????????? API ???????????????????????????????????????Java ???????????????????????????????????????????????????????????????????????????????????????????????? Nm: ?????????????????????????????????????????????????????? (NM_METHOD_NAMING_CONVENTION)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Nm: ?????????????????????????????????????????????????????????????????????????????????????????? (NM_SAME_SIMPLE_NAME_AS_INTERFACE)
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????/??????????????????????????????????????????????????????????????? (??????????????? Nm: ??????????????????????????????????????????????????????????????????????????? (NM_SAME_SIMPLE_NAME_AS_SUPERCLASS)
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (??????????????? Nm: ????????????????????????????????????????????? (???????????????) (NM_VERY_CONFUSING_INTENTIONAL)????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????1???????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? API????????????????????????????????????????????????????????????????????????????????????????????????1??????????????????????????????????????????????????? Nm: ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (NM_WRONG_PACKAGE_INTENTIONAL)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? import alpha.Foo; public class A { public int f(Foo x) { return 17; } } ---- import beta.Foo; public class B extends A { public int f(Foo x) { return 42; } public int f(alpha.Foo x) { return 27; } }
????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ODR: ?????????????????????????????????????????????????????????????????????????????????????????? (ODR_OPEN_DATABASE_RESOURCE)?????????????????????????????????????????????????????? (??????????????????????????????????????????????????????????????????) ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ODR: ????????????????????????????????????????????????????????????????????????????????????????????????????????? (ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH)?????????????????????????????????????????????????????? (??????????????????????????????????????????????????????????????????) ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? OS: ??????????????????????????????????????????????????????????????????????????? (OS_OPEN_STREAM)
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????? OS: ?????????????????????????????????????????????????????????????????????????????????????????? (OS_OPEN_STREAM_EXCEPTION_PATH)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????? PZ: ?????????????????????????????????????????????????????????????????? (PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS)
?????????????????????Iterator ??? Map.Entry ????????? Map ?????????????????????????????????????????????????????? entrySet ??????????????????????????????
?????????????????????????????????Map ???????????????????????????????????????????????????????????????????????????????????????????????????????????????
Map RC: ???????????????????????????????????? (RC_REF_COMPARISON_BAD_PRACTICE)
???????????????????????? ???????????? == ????????? != ?????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????? RC: Boolean ?????????????????????????????? (RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN)
????????????????????????== ????????? != ????????????????????????2?????? Boolean ??????????????????????????????
???????????????2?????? Boolean ??? ( RR: InputStream.read() ????????????????????????????????????????????? (RR_NOT_CHECKED)
?????????????????????????????????????????????????????????????????? RR: InputStream.skip() ????????????????????????????????????????????? (SR_NOT_CHECKED)
?????????????????????????????????????????????????????????????????????????????? RV: compareTo()/compare() ??????????????????????????? (RV_NEGATING_RESULT_OF_COMPARETO)
????????????????????? RV: ??????????????????????????????????????????????????? (RV_RETURN_VALUE_IGNORED_BAD_PRACTICE)
??????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????? SI: ????????????????????????????????????????????????????????? static final ???????????????????????????????????????????????????????????????????????? (SI_INSTANCE_BEFORE_FINALS_ASSIGNED)???????????? static final ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? SW: Swing ??????????????? AWT ??????????????????????????????????????????????????????????????????????????? (SW_SWING_METHODS_INVOKED_IN_SWING_THREAD)
(From JDC Tech Tip) Se: ?????????????????????????????? transient ????????????????????????????????????????????????????????? (SE_BAD_FIELD)
????????????????????????????????????transient???Serializable??? Se: ???????????????????????????????????????????????????????????????????????? (SE_BAD_FIELD_INNER_CLASS)?????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? static ????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? Se: ???????????????????????????????????????????????????????????????????????????????????????????????????????????? (SE_BAD_FIELD_STORE)?????????????????????????????????????????????????????? ??? transient ?????????????????????????????????????????? Se: Comparator ??? Serializable ???????????????????????? (SE_COMPARATOR_SHOULD_BE_SERIALIZABLE)
?????????????????? Se: ????????????????????????????????? (SE_INNER_CLASS)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? static ????????????????????????????????????????????? Se: serialVersionUID ??? final ???????????? (SE_NONFINAL_SERIALVERSIONID)
?????????????????????final ????????? Se: serialVersionUID ??? long ???????????? (SE_NONLONG_SERIALVERSIONID)
?????????????????????long ????????? Se: serialVersionUID ??? static ???????????? (SE_NONSTATIC_SERIALVERSIONID)
?????????????????????static ????????? Se: Serializable ??????????????????????????????????????????????????????????????????????????????????????????????????? (SE_NO_SUITABLE_CONSTRUCTOR)
?????????????????? Se: Externalizable ???????????????????????????????????????????????????????????????????????? (SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION)
????????????????????? Se: readResolve ????????????????????????????????? Object ??????????????????????????? (SE_READ_RESOLVE_MUST_RETURN_OBJECT)
Se: ????????????????????????????????????????????? transient ??????????????? (SE_TRANSIENT_FIELD_NOT_RESTORED)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????? transient ?????????????????????????????? readObject/readResolve ????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????? SnVI: Serializable ??????????????? serialVersionUID ???????????????????????? (SE_NO_SERIALVERSIONID)
?????????????????? UI: ????????????????????????????????? getResource ??????????????????????????????????????????????????? (UI_INHERITANCE_UNSAFE_GETRESOURCE)
??????????????????????????????????????????????????????????????????????????? BC: ???????????????????????? (BC_IMPOSSIBLE_CAST)?????????????????????????????? ClassCastException ???????????????????????? FindBugs ??????instanceof ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? BC: ????????????????????????????????? (BC_IMPOSSIBLE_DOWNCAST)?????????????????????????????? ClassCastException ???????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????ClassCastException ???????????????????????????????????????????????? BC: toArray ????????????????????????????????????????????????????????? (BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY)
?????????????????????????????????????????? String[] getAsArray(Collection<String> c) { return (String[]) c.toArray(); }
??????????????? ClassCastException ????????????????????????????????????
????????????????????????????????????????????? BC: ?????? false ????????? instanceof (BC_IMPOSSIBLE_INSTANCEOF)?????? instanceof ????????? false ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? BIT: ?????????????????????????????????????????? (BIT_ADD_OF_SIGNED_BYTE)
?????????????????????????????????8?????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????32??????????????????????????????????????????
?????????????????? ???????????????????????? int ????????????????????????????????????????????????????????????????????????????????? int result = 0; for(int i = 0; i < 4; i++) result = ((result << 8) + b[i]); ???????????????????????????????????????????????????????????????????????? int result = 0; for(int i = 0; i < 4; i++) result = ((result << 8) + (b[i] & 0xff)); BIT: ???????????????????????????????????? (BIT_AND)????????????????????????(e & C) ??????????????? D ??????????????????????????? ?????? C ?????????????????? D ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? BIT: ((...) & 0) == 0 ??????????????????????????? (BIT_AND_ZZ)????????????????????????(e & 0) ???????????????0???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? BIT: ???????????????????????????????????? (BIT_IOR)
???????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????? ("&") ?????????????????????????????????????????? ("|") ??????????????????????????? BIT: ????????????????????????????????????????????? (BIT_IOR_OF_SIGNED_BYTE)
??????????????????????????? (????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????) ????????????????????????????????????????????????
???????????????????????????????????????????????????32??????????????????????????????????????????
?????????????????? ???????????????????????? int ????????????????????????????????????????????????????????????????????????????????? int result = 0; for(int i = 0; i < 4; i++) { result = ((result << 8) | b[i]); } ???????????????????????????????????????????????????????????????????????? int result = 0; for(int i = 0; i < 4; i++) { result = ((result << 8) | (b[i] & 0xff)); } BIT: ????????????????????????????????????????????? (BIT_SIGNED_CHECK_HIGH_BIT)
???????????????????????? Boris Bokowski BOA: ???????????????????????? Adapter ???????????????????????????????????????????????????????????????????????????????????? (BOA_BADLY_OVERRIDDEN_ADAPTER)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????java.awt.event ??? javax.swing.event ??????????????????????????????????????????????????????????????? Adapter ????????? ???????????????????????????????????????????????????????????????????????????????????????????????? BSHIFT: ?????????????????????????????????????????????????????????????????? (BSHIFT_WRONG_ADD_PRIORITY)???????????? (x << 8 + y) ???????????????????????????????????? ????????????????????????????????????????????????????????? (x << 8) + y ????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? x << (8 + y) ???????????????????????????????????? BSHIFT: 32????????? int ???-31??????31?????????????????????????????????????????? (ICAST_BAD_SHIFT_AMOUNT)?????????????????????32????????? int ???-31??????31??????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????5????????? (32??????????????????) ??????????????????????????? (???????????????40????????????????????????????????????8????????????????????????????????????????????????32????????????????????????????????????0????????????????????????????????????????????????)??? ???????????????????????????????????????????????????????????????????????????????????????????????? DLS: return ????????????????????????????????????????????? (DLS_DEAD_LOCAL_INCREMENT_IN_RETURN)
DLS: ??????????????????????????????????????? (DLS_DEAD_STORE_OF_CLASS_LITERAL)
????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????? J2SE 5.0 ????????????????????????????????????????????????????????? Sun ??? article on Java SE compatibility ?????????????????????????????? DLS: ??????????????????????????????????????? (DLS_OVERWRITTEN_INCREMENT)
???????????????????????????????????????????????? (??????????????? DMI: ????????????????????? (DMI_ARGUMENTS_WRONG_ORDER)
???????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????? DMI: ???????????????????????????????????? (DMI_BAD_MONTH)????????????????????????????????????0??????11??????????????????????????????????????????????????? DMI: ???????????????????????? double ????????????????????? BigDecimal (DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE)
?????????????????????10?????????????????????????????????????????? double ????????? BigDecimal ???????????????????????????
???????????????Java ???
???????????? DMI: hasNext ??????????????? next ???????????????????????????????????? (DMI_CALLING_NEXT_FROM_HASNEXT)
DMI: ??????????????????????????????????????????????????????????????? (DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES)
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (??????????????? DMI: D'oh! ???????????????????????????????????? (DMI_DOH)???????????????????????????????????????????????????????????????????????????????????????????????????????????? DMI: ????????? hashCode ???????????????????????????????????? (DMI_INVOKING_HASHCODE_ON_ARRAY)
?????????????????????????????? DMI: int ???????????? Double.longBitsToDouble() ???????????????????????? (DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT)
DMI: ???????????????????????????????????????????????? (DMI_VACUOUS_SELF_COLLECTION_CALL)
????????????????????????????????????????????????
??????????????????????????? Dm: ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (DMI_ANNOTATION_IS_NOT_VISIBLE_TO_REFLECTION)
??????????????????????????? Dm: ScheduledThreadPoolExecutor ?????????????????????????????????????????????????????????????????? (DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_EXECUTOR)
Dm: ???????????????????????????0??? ScheduledThreadPoolExecutor ????????? (DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO_CORE_THREADS)
???????????????????????????0??? Dm: EasyMock ????????????????????????????????????/???????????????????????? (DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD)????????????????????? EasyMock ???????????????????????????????????????????????????????????????????????????????????? Dm: Math.max ??? Math.min ?????????????????????????????? (DM_INVALID_MIN_MAX)
????????????????????? EC: equals ?????????????????????????????????????????????????????????????????? (EC_ARRAY_AND_NONARRAY)
?????????????????????????????????????????????????????????????????????????????????????????? EC: ????????? equals ??????????????????????????? == ?????????????????? (EC_BAD_ARRAY_COMPARE)
????????????????????????????????? EC: equals(...) ???????????????????????????????????????????????????????????????????????? (EC_INCOMPATIBLE_ARRAY_COMPARE)
?????????????????????????????????????????????????????????????????????????????? EC: equals(null) ??????????????? (EC_NULL_ARG)
???????????????????????? null ???????????????????????? EC: equals ???????????????????????????????????????????????????????????????????????????????????????????????? (EC_UNRELATED_CLASS_AND_INTERFACE)
????????????????????????????????????????????????????????????????????????????????????2??????????????? EC: equals ??????????????????????????????????????????????????????????????????????????????????????? (EC_UNRELATED_INTERFACES)
????????????????????????????????????????????????????????????????????????????????????????????????????????????2??????????????? EC: equals ??????????????????????????????????????????????????????????????? (EC_UNRELATED_TYPES)
????????????????????????????????????????????????2??????????????? EC: ??????????????????????????????????????????????????????????????? (EC_UNRELATED_TYPES_USING_POINTER_EQUALITY)????????????????????????????????????????????????2?????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? false ????????? Eq: equals ????????????????????? false ????????? (EQ_ALWAYS_FALSE)
?????????????????????????????? false ?????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????? public boolean equals(Object o) { return this == o; } Eq: equals ????????????????????? true ????????? (EQ_ALWAYS_TRUE)
??????????????????????????? true ????????? Eq: equals ??????????????????????????????????????????????????????????????????????????????????????? (EQ_COMPARING_CLASS_NAMES)????????????????????????????????????????????????????????????????????????2??????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? Eq: ????????????????????? equals ????????????????????????????????? (EQ_DONT_DEFINE_EQUALS_FOR_ENUM)
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????? Eq: equals(Object) ??????????????????????????????????????????????????? equals ????????????????????? (EQ_OTHER_NO_OBJECT)
????????????????????? Eq: Object.equals(Object) ??????????????????????????????????????? equals ????????????????????? (EQ_OTHER_USE_OBJECT)
????????????????????? Eq: equals ??????????????????????????????????????? equals ????????????????????????????????????????????????????????????????????????????????????????????? (EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC)
?????????????????????????????????????????? Eq: ????????? equals ??????????????????????????????Object.equals(Object) ????????????????????? (EQ_SELF_USE_OBJECT)
?????????????????????????????? FE: NaN ???????????????????????????????????????????????? (FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER)
??????????????????????????????????????????????????????????????????????????????????????????????????? (???????????? FS: ???????????????????????????????????????????????????????????? (VA_FORMAT_STRING_BAD_ARGUMENT)
????????????????????????????????????????????????????????????????????????
??????????????? FS: ?????????????????????????????????????????????????????????????????? (VA_FORMAT_STRING_BAD_CONVERSION)
?????????1????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????? FS: printf ????????????????????????????????????????????????????????? MessageFormat ???????????????????????? (VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED)Java ??? printf ???????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????? (???????????????%s) ??????????????????????????????????????????????????????????????? (???????????????{0}) ???????????????????????? printf ??????????????????????????????????????????????????????MessageFormat ????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? FS: ???????????????????????????????????????????????????????????????????????????????????? (VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? FS: ???????????????????????? (VA_FORMAT_STRING_ILLEGAL)??????????????????????????????????????????????????????????????????????????????????????????????????????????????? FS: ????????????????????????????????????????????????????????? (VA_FORMAT_STRING_MISSING_ARGUMENT)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? FS: ????????????????????????????????????????????? (VA_FORMAT_STRING_NO_PREVIOUS_ARGUMENT)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ("<")??????????????????????????????
??????????????????????????????????????????????????????
??????????????? GC: ????????????????????????????????????????????????????????? (GC_UNRELATED_TYPES)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????)???
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????
????????????2?????????????????????????????????????????????????????????????????????????????????
???????????????
????????????????????? HE: ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS)
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????? HE: ?????????????????????????????? hashCode ??????????????????????????????????????????????????? (HE_USE_OF_UNHASHABLE_CLASS)
????????????????????? ICAST: int ?????? long ?????????????????????????????????????????????????????? (ICAST_INT_2_LONG_AS_INSTANT)
?????????????????????32????????? int ??????64????????? long ?????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????1970???1???1??????00:00:00 GMT???????????????????????????????????????????????????????????????????????????????????? Date getDate(int seconds) { return new Date(seconds * 1000); } ?????????32?????????????????????????????????64???????????????????????????????????? 32??????????????????64???????????????????????????????????????????????????????????????????????????????????????1969???12??????1970???1???????????????????????????????????? ????????????????????????????????????????????????????????????????????? // ?????????2037??????????????? Date getDate(int seconds) { return new Date(seconds * 1000L); } // ???????????????????????????????????????????????? Date getDate(long seconds) { return new Date(seconds * 1000); } ICAST: ???????????? double ????????????????????? Math.ceil() ?????????????????? (ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL)
?????????????????????????????? (???????????????int ??? long) ?????????????????????????????????????????????????????????????????? ICAST: ???????????? float ????????????????????? Math.round() ?????????????????? (ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND)
????????????????????????????????? float ???????????????????????????????????????????????????????????? IJU: run ?????????????????? JUnit ????????????????????? JUnit ?????????????????????????????? (IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD)
IJU: TestCase ??? suite ???????????????????????????????????????????????? (IJU_BAD_SUITE_METHOD)
JUnit ??? TestCase ??????????????? public static junit.framework.Test suite() ??? public static junit.framework.TestSuite suite() ?????????????????????????????????????????????????????? IJU: TestCase ????????????????????? (IJU_NO_TESTS)JUnit ??? TestCase ??????????????????????????????????????????????????????????????????????????? IJU: TestCase ??? super.setup() ????????????????????? setUp ????????????????????????????????? (IJU_SETUP_NO_SUPER)
JUnit ??? TestCase ??????????????? IJU: TestCase ??? ??? static ??? suite ????????????????????????????????? (IJU_SUITE_NOT_STATIC)
JUnit ??? TestCase ??????????????? IJU: TestCase ??? super.tearDown() ????????????????????? tearDown ????????????????????????????????? (IJU_TEARDOWN_NO_SUPER)
JUnit ??? TestCase ??????????????? IL: ?????????????????????????????????????????????????????? (IL_CONTAINER_ADDED_TO_ITSELF)
??????????????????????????????????????????????????????????????????????????????hashCode ?????????????????? IL: ??????????????????????????? (IL_INFINITE_LOOP)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? IL: ????????????????????????????????? (IL_INFINITE_RECURSIVE_LOOP)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? IM: ???????????????????????????????????? (IM_MULTIPLYING_RESULT_OF_IREM)???????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????? ???????????????i % 60 * 1000 ??????i % (60 * 1000) ???????????? (i % 60) * 1000 ?????????????????? INT: int ?????? long ?????????????????????????????? (INT_BAD_COMPARISON_WITH_INT_VALUE)?????????????????????int ?????? int ?????????????????????????????????????????? long ????????????????????????????????? ?????????????????????????????????????????????????????????????????? INT: ????????????????????????????????????????????????????????????????????? (INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? INT: ?????????????????????????????????????????? (INT_BAD_COMPARISON_WITH_SIGNED_BYTE)
????????????????????????????????????????????????-128???127?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????? IO: ???????????????????????????????????????????????????????????????????????? (IO_APPENDING_TO_OBJECT_OUTPUT_STREAM)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? IP: ??????????????????????????????????????????????????????????????????????????? (IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN)?????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? MF: ????????????????????????????????????????????????????????????????????????????????????????????? (MF_CLASS_MASKS_FIELD)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? MF: ??????????????????????????????????????????????????????????????? (MF_METHOD_MASKS_FIELD)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? NP: null ???????????????????????? (NP_ALWAYS_NULL)????????? null ?????????????????????????????????????????? ?????????????????????????????? NullPointerException ????????????????????? NP: null ??????????????????????????????????????? (NP_ALWAYS_NULL_EXCEPTION)??????????????????????????? null ???????????????????????????????????????????????????????????? NullPointerException ????????????????????? ????????? FindBugs ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? switch ?????? default ?????????????????????????????????????????? FindBugs ???????????????????????? default ???????????????????????????????????????????????? NP: null ??????????????????????????????????????????????????? (NP_ARGUMENT_MIGHT_BE_NULL)?????????????????????????????????????????? null ?????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????null ??????????????????????????????null ????????????????????????????????? NP: ?????? null ??????????????????????????? close ???????????????????????????????????? (NP_CLOSING_NULL)
NP: null ???????????????????????????????????????????????? (NP_GUARANTEED_DEREF)?????????????????????????????????????????????????????????????????? null ????????????null ?????????????????? (???????????????????????????????????????????????????????????????) ????????????????????????????????????
????????? NP: null ??????????????????????????????????????????????????????????????? (NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH)???????????????????????????????????????????????????????????????????????????????????? null ????????????null ?????????????????? (???????????????????????????????????????????????????????????????) ???????????????????????????????????? NP: ??? null ????????????????????????????????????????????? (NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR)???????????????????????? null ??????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? NP: ?????????????????????????????? null ??????????????????????????? null ?????????????????? (NP_NONNULL_PARAM_VIOLATION)??????????????????????????? null ?????????????????????????????????????????????????????????????????????null ??????????????????????????? ???????????????????????????@Nonnull ????????????????????????????????????????????????????????????????????????????????? null ????????????????????????????????????????????? NP: null ?????????????????????????????????????????? @Nonnull ????????????????????? (NP_NONNULL_RETURN_VIOLATION)????????????????????????null ???????????????????????????????????????????????? (?????????????????????????????????????????????) ??????????????? @Nonnull ?????????????????????????????? NP: null ???????????????????????????????????????????????????????????????????????????????????? (NP_NULL_INSTANCEOF)????????????????????????????????? null ????????????????????????????????????????????????instanceof ????????? faluse ?????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????? NP: null ?????????????????????????????????????????? (NP_NULL_ON_SOME_PATH)??????????????????????????????????????????????????? null ????????????????????? NullPointerException ????????????????????? ??????????????????????????????????????????????????????????????????NullPointerException ????????????????????????????????????????????????????????????????????????????????? ???????????????????????? FindBugs ????????????????????????????????? NP: null ????????????????????????????????????????????????????????? (NP_NULL_ON_SOME_PATH_EXCEPTION)??????????????????????????? null ??????????????????????????????????????????????????????????????? NullPointerException ?????????????????????????????????????????? ????????? FindBugs ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? switch ?????? default ?????????????????????????????????????????? FindBugs ???????????????????????? default ???????????????????????????????????????????????? NP: ?????????????????????????????? null ??????????????????????????? null ?????????????????? (NP_NULL_PARAM_DEREF)???????????????????????????????????? null ??????????????????????????????????????? null ??????????????????????????? ?????????????????????????????? null ???????????????????????????????????????????????????????????????????????????????????????????????? null ????????????????????????????????????????????? NP: ?????????????????????????????? null ??????????????????????????? null ?????????????????? (NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS)?????????????????????????????????????????????????????? null ???????????????????????????????????????????????????????????????????????????????????? null ??????????????????????????? ?????????????????????????????? null ???????????????????????????????????????????????????????????????????????????????????????????????? null ????????????????????????????????????????????? NP: ??? null ?????????????????? null ?????????????????????????????????????????????????????? (NP_NULL_PARAM_DEREF_NONVIRTUAL)null ??????????????????????????? ??? null ?????????????????????????????????????????????????????? ?????????????????????????????? null ???????????????????????????????????????????????????????????????????????????????????????????????? null ????????????????????????????????????????????? NP: Optional ???????????????????????????????????????????????? null ????????? (NP_OPTIONAL_RETURN_NULL)Optional ???????????????????????????????????????????????? null ????????????????????????????????????????????????????????????????????? null ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? NP: @Nonnull ????????????????????????????????????????????? null ????????????????????? (NP_STORE_INTO_NONNULL_FIELD)@Nonnull ??????????????????????????????????????????????????? null ???????????????????????????????????????????????? NP: ????????????????????????????????????????????????????????? (NP_UNWRITTEN_FIELD)?????????????????????????????? null ???????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????? NullPointerException ????????????????????? Nm: ???????????? equal(Object) ???????????????????????????equals(Object) ?????????????????????? (NM_BAD_EQUAL)
????????????????????? Nm: ???????????? hashcode() ???????????????????????????hashCode() ?????????????????????? (NM_LCASE_HASHCODE)
????????????????????? Nm: ???????????? tostring() ???????????????????????????toString() ?????????????????????? (NM_LCASE_TOSTRING)
????????????????????? Nm: ????????????????????????????????????????????????????????? (NM_METHOD_CONSTRUCTOR_CONFUSION)????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????? void ???????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Nm: ????????????????????????????????????????????? (NM_VERY_CONFUSING)????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????1???????????????????????????????????????????????????????????????????????????????????????????????? Nm: ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (NM_WRONG_PACKAGE)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? import alpha.Foo; public class A { public int f(Foo x) { return 17; } } ---- import beta.Foo; public class B extends A { public int f(Foo x) { return 42; } }
????????? QBA: ???????????? boolean ???????????????????????????????????????????????? (QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT)????????????????????????if ????????? while ??????????????? boolean ????????? boolean ??????????????? (true ????????? false) ??????????????????????????? ???????????????????????? = ??????????????????????????????== ????????????????????????????????????????????????????????????????????? RANGE: ???????????????????????????????????? (RANGE_ARRAY_INDEX)???????????????????????????????????????????????????????????????????????????????????????????????? ArrayIndexOutOfBoundsException ?????????????????????????????? RANGE: ??????????????????????????? (RANGE_ARRAY_LENGTH)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????? IndexOutOfBoundsException ?????????????????????????????? RANGE: ????????????????????????????????? (RANGE_ARRAY_OFFSET)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????? IndexOutOfBoundsException ?????????????????????????????? RANGE: ??????????????????????????????????????? (RANGE_STRING_INDEX)??????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????? StringIndexOutOfBoundsException ?????????????????????????????? RC: ???????????????????????? (RC_REF_COMPARISON)
???????????????????????? == ????????? != ????????????????????????2??????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????? RCN: ?????????????????????????????? null ???????????? (RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE)??????????????? null ?????????????????????????????????????????????????????????????????????????????? null ??????????????????????????????????????? ?????? null ???????????????????????? NullPointerException ???????????????????????????????????? ????????????????????? null ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????? RE: ??????????????????????????????????????? (RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION)???????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? PatternSyntaxException ???????????????????????? RE: ?????????????????????????????????????????? File.separator (RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION)
????????????????????????????????????????????????????????? RE: ?????????????????????????????????????????? "." ????????? "|" (RE_POSSIBLE_UNINTENDED_PATTERN)String ????????????????????????????????????"." ????????? "|" ????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????? ????????????
RV: 0??????1????????????????????????0?????????????????? (RV_01_TO_INT)
0??????1????????????????????????0????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? RV: ????????????32??????????????????????????????????????????????????????????????????????????? (RV_ABSOLUTE_VALUE_OF_HASHCODE)
?????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????
????????????2^32??????1?????? RV: ???????????????????????????????????????????????????????????????????????? (RV_ABSOLUTE_VALUE_OF_RANDOM_INT)
???????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????? RV: compareTo ???????????????????????????????????????????????????????????? (RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE)?????????????????????compareTo ????????? compare ????????????????????????????????????????????????????????????????????????1?????????-1??? ????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????? compareTo ????????????????????????-1???0?????????1??????????????????????????????????????????????????????????????? RV: ?????????????????????????????????????????????????????????????????? (RV_EXCEPTION_NOT_THROWN)
??????????????????????????? (??????????????????) ??????????????????????????????????????????????????????????????????????????? if (x < 0) { new IllegalArgumentException("x must be nonnegative"); } ???????????????????????????????????????????????????????????????????????????????????????????????? if (x < 0) { throw new IllegalArgumentException("x must be nonnegative"); } RV: ?????????????????????????????????????????? (RV_RETURN_VALUE_IGNORED)
??????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? String dateString = getHeaderField(name); dateString.trim();
????????????????????? String dateString = getHeaderField(name); dateString = dateString.trim(); RpC: ?????????????????????????????? (RpC_REPEATED_CONDITIONAL_TEST)
???????????????????????????????????????2??????????????????1?????????????????????????????????????????????2????????????????????????????????????????????? (??????????????? SA: ?????????????????????????????? (SA_FIELD_SELF_ASSIGNMENT)
???????????????????????????????????????????????????????????????????????? int x; public void foo() { x = x; } ???????????????????????????????????????????????????????????????????????????????????????????????????????????? SA: ???????????????????????????????????????????????? (SA_FIELD_SELF_COMPARISON)????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? SA: ?????????????????????????????????????????? (??????????????? x & x) (SA_FIELD_SELF_COMPUTATION)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (???????????????x & x ????????? x - x)??? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????? SA: ??????????????????????????????????????????????????????????????????????????? (SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? int foo; public void setFoo(int foo) { foo = foo; } ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? SA: ??????????????????????????????????????????????????? (SA_LOCAL_SELF_COMPARISON)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????? SA: ????????????????????????????????? (???????????????x & x) (SA_LOCAL_SELF_COMPUTATION)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (???????????????x & x ????????? x - x)??? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????? SF: switch ???????????????????????????????????????????????????????????????????????? (SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH)?????? case ???????????????????????? switch ?????????????????????????????????????????????????????????????????????????????? ?????? case ??????????????? break ????????? return ?????????????????????????????????????????????????????? SF: ??????????????? switch ???????????????????????????????????????????????????????????????????????? (SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_THROW)?????? case ???????????????????????????????????????????????????????????????switch ???????????????????????????????????????????????????????????????????????? ?????? case ??????????????? break ????????? return ?????????????????????????????????????????????????????? SIC: ??? static ??????????????????????????????????????????????????????????????? (SIC_THREADLOCAL_DEADLY_EMBRACE)????????????????????????????????????????????????????????? static ???????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????? static ?????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? SIO: instanceof ??????????????????????????????????????????????????? (SIO_SUPERFLUOUS_INSTANCEOF)?????????????????????????????????????????????????????????????????????????????????????????????????????? instanceof ???????????????????????????????????????????????????????????? SQL: ?????????????????????0??? PreparedStatement ??????????????????????????????????????????????????? (SQL_BAD_PREPARED_STATEMENT_ACCESS)
?????????????????????0?????? SQL: ?????????????????????0??? ResultSet ??????????????????????????????????????????????????? (SQL_BAD_RESULTSET_ACCESS)
?????????????????????0?????? STI: interrupted ????????????????????????????????????????????? currentThread ???????????????????????????????????? (STI_INTERRUPTED_ON_CURRENTTHREAD)
???????????????????????? STI: ????????????????????????????????? static Thread.interrupted() ???????????????????????? (STI_INTERRUPTED_ON_UNKNOWNTHREAD)
????????????????????????????????????????????????????????? Thread ????????????????????????????????????????????? Thread ????????????????????? Se: ??????????????????????????? private ?????????????????????????????????????????? (SE_METHOD_MUST_BE_PRIVATE)
????????????????????? Se: readResolve ??????????????? static ?????????????????????????????????????????? (SE_READ_RESOLVE_IS_STATIC)
TQ: ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????when=ALWAYS ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? when=NEVER ???????????????????????????????????????????????? ???????????????@NonNegative ???????????????????????????????????? @Negative(when=When.NEVER) ???????????????????????? ????????????????????????return ?????? ???NonNegative ????????????????????? ???Negative ?????????????????????????????????????????????????????????????????????????????????????????? public @NonNegative Integer example(@Negative Integer value) { return value; } TQ: ???????????????????????????????????????????????? (TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS)???????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????when=ALWAYS ????????????????????????????????????????????????????????????????????????????????? when=NEVER ????????????????????????????????????????????? ???????????????@NonNegative ???????????????????????????????????? @Negative(when=When.NEVER) ???????????????????????? ????????????????????????return ?????? @NonNegative ????????????????????????@Negative ?????????????????????????????????????????????????????????????????????????????????????????? public boolean example(@Negative Integer value1, @NonNegative Integer value2) { return value1.equals(value2); } TQ: ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? TQ: ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? TQ: ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????when=NEVER ????????????????????????????????????????????????????????????????????????????????? when=ALWAYS ???????????????????????????????????????????????? TQ: ????????????????????????????????????????????????????????????????????????????????? (TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? UMAC: ?????????????????????????????????????????????????????????????????????????????? (UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? UR: ?????????????????????????????????????????????????????????????????????????????????????????? (UR_UNINIT_READ)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? UR: ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? abstract class A { int hashCode; abstract Object getValue(); A() { hashCode = getValue().hashCode(); } } class B extends A { Object value; B(Object v) { this.value = v; } Object getValue() { return value; } }
USELESS_STRING: ???????????????????????? toString ???????????????????????????????????? (DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY)
??????????????????????????????????????? USELESS_STRING: ????????? toString ???????????????????????????????????? (DMI_INVOKING_TOSTRING_ON_ARRAY)
?????????????????????????????? USELESS_STRING: ???????????????????????????????????????????????????????????????????????????????????????????????? (VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY)
????????????????????????????????????????????????????????????1?????????????????????
[I@304282 ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????? UwF: null ?????????????????????????????????????????? (UWF_NULL_FIELD)????????????????????????????????? null ??????????????????????????????????????????????????????????????????????????? null ?????????????????? ????????????????????????????????????????????????????????????????????????????????????????????? UwF: ?????????????????????????????????????????? (UWF_UNWRITTEN_FIELD)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????? (??????????????????????????????????????????????????????)?????????????????????????????????????????????????????? VA: ??????????????????????????????????????????????????????????????????????????????????????????????????? (VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG)??????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????1?????????????????????????????????????????????????????? LG: ????????????????????? OpenJDK ???????????????????????????????????????????????? (LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)
OpenJDK ??????????????????????????????????????????????????????????????? public static void initLogging() throws Exception { Logger logger = Logger.getLogger("edu.umd.cs"); logger.addHandler(new FileHandler()); // ??????????????????????????? logger.setUseParentHandlers(false); // ????????????????????????????????? }
???????????????????????????????????????????????? (?????????????????????????????????) ????????????????????????
public static void main(String[] args) throws Exception { initLogging(); // ?????????????????????????????????????????????????????? System.gc(); // ????????????????????????????????? Logger.getLogger("edu.umd.cs").info("Some message"); // ????????????????????????????????????????????????????????? } Ulf Ochsenfahrt ??? Eric Fellheimer OBL: ??????????????????????????????????????????????????????????????????????????????????????????????????? (OBL_UNSATISFIED_OBLIGATION)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (?????????????????????????????????) ??????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? try/finally ?????????????????????????????????????????? ??????????????????????????????OS_OPEN_STREAM ??? ODR_OPEN_DATABASE_RESOURCE ??????????????????????????????????????? (??????????????????????????????????????????) ????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????Weimer ??? Necula ????????? Finding and Preventing Run-Time Error Handling Mistakes ?????????????????????????????? OBL: ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (?????????????????????????????????) ??????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? try/finally ?????????????????????????????????????????? ??????????????????????????????OS_OPEN_STREAM ??? ODR_OPEN_DATABASE_RESOURCE ??????????????????????????????????????? (??????????????????????????????????????????) ????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????Weimer ??? Necula ????????? Finding and Preventing Run-Time Error Handling Mistakes ?????????????????????????????? Dm: ?????????????????????????????? Locale ??????????????????????????????????????? (DM_CONVERT_CASE)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????
Dm: ??????????????????????????????????????????????????? (DM_DEFAULT_ENCODING)byte ?????? String (????????? String ?????? byte) ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? API ????????????????????????????????????????????? Charset ????????????????????????????????????????????????????????? DP: doPrivileged ????????????????????????????????????????????????????????? (DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? doPrivileged ??????????????????????????????????????????????????? DP: doPrivileged ???????????????????????????????????????????????? (DP_DO_INSIDE_DO_PRIVILEGED)??????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? doPrivileged ????????????????????????????????????????????????????????? EI: ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (EI_EXPOSE_REP)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? EI2: ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (EI_EXPOSE_REP2)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? FI: ???????????????????????? public ???????????? protected ???????????? (FI_PUBLIC_SHOULD_BE_PROTECTED)
?????????????????? MS: static ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (EI_EXPOSE_STATIC_REP2)?????????????????????static ?????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? MS: final ??????????????????????????????????????????????????????????????????????????? (MS_CANNOT_BE_FINAL)???????????? static ????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????? MS: ?????????????????????????????????????????????????????????????????????????????? public static ???????????? (MS_EXPOSE_REP)public static ?????????????????????????????? ?????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????? MS: final ????????????????????????????????????????????????????????????????????? (MS_FINAL_PKGPROTECT)???????????? static ????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????? final ?????????/???????????????????????????????????????????????????????????? MS: ?????????????????????????????? (MS_MUTABLE_ARRAY)?????? final static ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????? MS: ?????????????????????????????????????????? (MS_MUTABLE_COLLECTION)???????????????????????????????????????????????? final static ??????????????????????????????????????????????????? ?????????????????? ??????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????? Collections.unmodifiableSet/List/Map ???????????????????????????????????????????????????????????????????????????????????? MS: ?????????????????????????????????????????????????????????????????????????????????????????? (MS_MUTABLE_COLLECTION_PKGPROTECT)???????????????????????????????????????????????? final static ??????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????? Collections.unmodifiableSet/List/Map ???????????????????????????????????????????????????????????????????????????????????????????????? MS: ?????? Hashtable ?????????????????? (MS_MUTABLE_HASHTABLE)?????? final static ?????????????????? Hashtable ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????Hashtable ??????????????????????????????????????????????????? MS: ?????????????????????????????????????????????????????????????????????????????????????????????????????? (MS_OOI_PKGPROTECT)??????????????????????????????????????? final static ??????????????????????????? Hashtable ???????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? MS: ??????????????????????????????????????????????????????????????? (MS_PKGPROTECT)???????????? static ????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????? MS: final ??????????????????????????? (MS_SHOULD_BE_FINAL)final ????????? public static ????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????? final ??????????????? MS: final ??????????????????????????????????????????????????????????????? (MS_SHOULD_BE_REFACTORED_TO_BE_FINAL)final ????????? public static ????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????? final ??????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? AT: ?????????????????????????????????????????????????????????????????????????????????????????? (AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION)???????????????????????????????????? ???????????????????????????????????????????????? ???????????????????????????????????????????????? ??????????????????????????????????????????????????????????????? DC: ??????????????????????????????????????????????????? (DC_DOUBLECHECK)
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Java ?????????????????????????????????????????????????????? DC: ????????????????????????????????????????????????????????????????????????????????? (DC_PARTIALLY_CONSTRUCTED)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????? volatile ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? volatile ??????????????????????????????????????????????????????????????? DL: Boolean ???????????? (DL_SYNCHRONIZATION_ON_BOOLEAN)
private static Boolean inited = Boolean.FALSE; synchronized(inited) { if (!inited) { init(); inited = Boolean.TRUE; } }
????????????2?????? DL: ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? (DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE)?????????????????????Integer ???????????????????????????????????????????????????????????????????????????????????????????????? private static Integer count = 0; synchronized(count) { count++; }
CERT ??? CON08-J. Do not synchronize on objects that may be reused ?????????????????????????????? DL: ???????????????????????????????????? (DL_SYNCHRONIZATION_ON_SHARED_CONSTANT)??????????????????????????????????????????????????????????????????????????? private static String LOCK = "LOCK"; synchronized(LOCK) { ... }
????????????????????????????????????Java ????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? DL: ????????????????????????????????????????????????????????? (DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE)
????????????????????????????????????????????????????????? private static final Integer fileLock = new Integer(1); synchronized(fileLock) { .. do something .. } ????????????????????? fileLock ??????????????????????????????????????????????????????????????? private static final Object fileLock = new Object();
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????IntelliJ ??? "Remove Boxing" ??????????????????????????????????????? Java ???????????????????????????????????????????????????????????? Dm: Condition ??? wait ???????????????????????????????????? (DM_MONITOR_WAIT_ON_CONDITION)
???????????????????????? Dm: ???????????????????????? run ?????????????????????????????????????????????????????? (DM_USELESS_THREAD)
???????????????????????? ESync: ?????? synchronized ???????????? (ESync_EMPTY_SYNC)??????????????????????????? synchronized ?????????????????????????????? synchronized() { } ?????? synchronized ?????????????????????????????????????????????????????????????????? ?????? synchronized ???????????????????????????????????????????????????????????????????????????????????? IS: ??????????????????????????? (IS2_INCONSISTENT_SYNC)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? IS: ???????????????????????????????????????????????????????????????????????? (IS_FIELD_NOT_GUARDED)???????????????????????????net.jcip.annotations.GuardedBy ????????? javax.annotation.concurrent.GuardedBy ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? JLM: Lock ???????????????????????? (JLM_JSR166_LOCK_MONITORENTER)
???????????????????????? JLM: java.util.concurrent ????????????????????????????????????????????? (JLM_JSR166_UTILCONCURRENT_MONITORENTER)
????????????????????????java.util.concurrent ??????????????????????????? (????????????????????????) ???????????????????????????????????????????????????
???????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? JLM: util.concurrent ????????????????????????????????? wait ????????????????????????????????? (JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT)
???????????????????????? LI: static ????????????????????????????????????????????? (LI_LAZY_INIT_STATIC)
????????????????????????volatile ????????? static ???????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????? volatile ?????????????????? LI: ??????????????? static ????????????????????????????????????????????? (LI_LAZY_INIT_UPDATE_STATIC)????????????????????????static ??????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? static ???????????????????????????????????????????????????????????????????????? ML: ???????????????????????????????????????????????????????????????????????? (ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????
????????????????????? (????????????????????????) ???????????????????????????????????????????????????????????????????????????????????? private Long myNtfSeqNbrCounter = new Long(0); private Long getNotificationSequenceNumber() { Long result = null; synchronized(myNtfSeqNbrCounter) { result = new Long(myNtfSeqNbrCounter.longValue() + 1); myNtfSeqNbrCounter = new Long(result.longValue()); } return result; } ML: ?????????????????????????????????????????????????????????????????? (ML_SYNC_ON_UPDATED_FIELD)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? MSF: ??????????????????????????????????????? (MSF_MUTABLE_SERVLET_FIELD)Web ???????????????????????????????????????????????? JSP ?????????????????????????????????1???????????????????????? (??????????????????????????????????????????????????????)??? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????? MWN: ???????????? notify ???????????? (MWN_MISMATCHED_NOTIFY)
????????????????????????????????????????????????????????????????????????????????????????????? MWN: ???????????? wait ???????????? (MWN_MISMATCHED_WAIT)
???????????????????????????????????????????????????????????????????????????????????????????????? NN: ?????? notify ???????????? (NN_NAKED_NOTIFY)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? NP: ??????????????????????????????????????? null ???????????? (NP_SYNC_AND_NULL_CHECK_FIELD)???????????????????????????????????????????????????????????? null ????????????????????????????????? null ??????????????????????????????????????? NullPointerException ??????????????????????????????null ?????????????????????????????????????????? ??????????????????????????????????????????????????????????????? No: notifyAll ???????????????????????? notify ????????????????????????????????? (NO_NOTIFY_NOT_NOTIFYALL)
???????????????????????? RS: readObject ????????????????????????????????????????????? (RS_READOBJECT_SYNC)
???????????????????????????????????????????????? RV: putIfAbsent ?????????????????????????????? putIfAbsent ???????????????????????????????????? (RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED)
Ru: ??????????????? run ???????????????????????????????????? (RU_INVOKE_RUN)
??????????????????????????????????????? ???????????? SC: Thread.start() ????????????????????????????????????????????? (SC_START_IN_CTOR)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? SP: ????????????????????????????????????????????? (SP_SPIN_ON_FIELD)??????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????? (wait/notify ??????????????????????????????) ????????????????????????????????????????????????????????? STCAL: static Calendar ??????????????? (STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE)????????? JavaDoc ?????????????????????????????????????????????????????????Calendar ????????????????????????????????????????????????????????????????????????????????? ?????????????????????static ????????????????????????????????? Calendar ???????????????????????????????????????????????????????????? ???????????????????????????????????? ????????????????????????Sun Bug #6231579 ??? Sun Bug #6178997 ?????????????????????????????? STCAL: static DateFormat ??????????????? (STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE)JavaDoc ?????????????????????????????? DateFormat ????????????????????????????????????????????????????????????????????????????????? ?????????????????????static ????????????????????????????????? DateFormat ???????????????????????????????????????????????????????????? ???????????????????????????????????? ????????????????????????Sun Bug #6231579 ??? Sun Bug #6178997 ?????????????????????????????? STCAL: static Calendar ??????????????? (STCAL_STATIC_CALENDAR_INSTANCE)
????????? JavaDoc ?????????????????????????????????????????????????????????Calendar ??????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????1?????????????????????????????????????????????????????????????????????????????????????????????????????????
JDK 5.0???????????? JDK 1.4 ????????????????????????????????????????????????????????????????????? sun.util.calendar.BaseCalendar.getCalendarDateFromFixedDate() ??? ArrayIndexOutOfBoundsExceptions ??? IndexOutOfBoundsExceptions ????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? STCAL: static DateFormat (STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE)
JavaDoc ?????????????????????????????? DateFormat ?????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????1?????????????????????????????????????????????????????????????????????????????????????????????????????????
JDK 5.0???????????? JDK 1.4 ????????????????????????????????????????????????????????????????????? sun.util.calendar.BaseCalendar.getCalendarDateFromFixedDate() ??? ArrayIndexOutOfBoundsExceptions ??? IndexOutOfBoundsExceptions ????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? SWL: ???????????????????????? Thread.sleep() ???????????????????????????????????? (SWL_SLEEP_WITH_LOCK_HELD)
??????????????????????????????????????????????????? TLW: 2???????????????????????????????????? wait ???????????????????????????????????? (TLW_TWO_LOCK_WAIT)
2?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
UG: ???????????????????????? get ???????????????????????????????????? set ???????????? (UG_SYNC_SET_UNSYNC_GET)?????????????????????????????????????????? get ??????????????? set ????????????????????????set ???????????????????????????????????????get ????????????????????????????????????????????? get ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? get ????????????????????????????????????????????? UL: ??????????????????????????????????????????????????????????????? (UL_UNRELEASED_LOCK)
????????????????????????JSR-166( Lock l = ...; l.lock(); try { // do something } finally { l.unlock(); } UL: ????????????????????????????????????????????????????????????????????? (UL_UNRELEASED_LOCK_EXCEPTION_PATH)
????????????????????????JSR-166( Lock l = ...; l.lock(); try { // do something } finally { l.unlock(); } UW: wait ???????????????????????????????????? (UW_UNCOND_WAIT)
?????????????????????????????????????????????????????????????????????????????? VO: volatile ???????????????????????????????????????????????????????????????????????? (VO_VOLATILE_INCREMENT)?????????????????????volatile ????????????????????????????????????????????????????????? volatile ????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? VO: ???????????? volatile ??????????????????????????? volatile ????????????????????? (VO_VOLATILE_REFERENCE_TO_ARRAY)????????? volatile ???????????????????????????????????????????????????????????????????????????????????????????????? ???????????? volatile ??????????????????????????????????????????????????????????????? volatile ????????????????????????????????????????????? volatile ?????????????????????????????? ??????????????? volatile ???????????????????????????????????????J2SE 5.0?????????????????? java.util.concurrent ??????????????????????????????????????????????????????????????????????????????????????? WL: ????????????????????????????????? getClass ???????????????????????? (WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL)
?????????????????????????????????????????? private static final String base = "label"; private static int nameCounter = 0; String constructComponentName() { synchronized (getClass()) { return base + nameCounter++; } }
private static final String base = "label"; private static int nameCounter = 0; String constructComponentName() { synchronized (Label.class) { return base + nameCounter++; } } Jason Mehrens ????????????????????????????????????????????? WS: writeObject ??????????????????????????????????????????????????????????????????????????????????????????????????? (WS_WRITEOBJECT_SYNC)
?????????????????????????????????????????? Wa: Condition.await() ??????????????????????????? (WA_AWAIT_NOT_IN_LOOP)
???????????????????????????????????????????????? Wa: wait ??????????????????????????????????????? (WA_NOT_IN_LOOP)
???????????????????????????????????????????????? Bx: ?????????????????????????????????????????????????????????????????????????????????????????? (BX_BOXING_IMMEDIATELY_UNBOXED)???????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????? Bx: ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION)
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (???????????? Bx: ????????????????????????3??????????????????????????????????????????????????????????????????????????? (BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR)
?????????????????????????????????????????????3???????????? ( Bx: ??????????????????????????????????????????????????????????????????????????????????????????????????? (BX_UNBOXING_IMMEDIATELY_REBOXED)????????????????????????????????????????????????????????????????????????????????????????????????????????? Bx: ???????????????????????????????????????????????????????????? (DM_BOXED_PRIMITIVE_FOR_COMPARE)??????????????????????????????????????????????????? compareTo ???????????????????????????????????????????????????????????? ????????????????????????????????? static compare ???????????? (double ??????float ??? Java 1.4??????????????????????????????????????? Java 1.7??????) ?????????????????????????????????????????? Bx: ???????????????/????????????????????????????????????????????????????????? (DM_BOXED_PRIMITIVE_FOR_PARSING)????????????????????????????????????????????????String ?????????????????????????????????????????????????????????????????????????????????????????????????????? static parseXXX ??????????????????????????????????????????????????? Bx: toString ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (DM_BOXED_PRIMITIVE_TOSTRING)
Bx: ?????????????????????????????? Number ????????????????????????????????????????????????????????? (DM_FP_NUMBER_CTOR)
???????????? J2SE 5.0???????????? Java ??????????????????????????????????????????????????????????????????????????? Bx: ??????????????? Number ????????????????????????????????????????????????????????? (DM_NUMBER_CTOR)
-128??????127??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????
???????????? J2SE 5.0???????????? Java ???????????????????????????????????????????????? Dm: URL ??? equals ??????????????? hashCode ????????????????????????????????? (DMI_BLOCKING_METHODS_ON_URL)
URL ??? Dm: URL ??? Map ??? Set ??????????????????????????? (DMI_COLLECTION_OF_URLS)
????????????????????????????????????????????????URL ??? Dm: ??????????????? Boolean ????????????????????????????????????????????????????????? (DM_BOOLEAN_CTOR)
Dm: ?????????????????????????????????????????? (DM_GC)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????? Dm: ?????????????????????????????????????????????????????????????????????????????????????????????????????? (DM_NEW_FOR_GETCLASS)
???????????????????????????????????????????????????????????????????????????????????????????????? Dm: ?????????????????????????????????????????? nextDouble ???????????? ???????????? nextInt ??????????????????????????? (DM_NEXTINT_VIA_NEXTDOUBLE)
Dm: ??????????????? new String(String) ????????????????????????????????????????????????????????? (DM_STRING_CTOR)
Dm: String ??? toString ???????????????????????????????????????????????? (DM_STRING_TOSTRING)
Dm: ??????????????? new String() ????????????????????????????????????????????????????????? (DM_STRING_VOID_CTOR)
??????????????????????????????????????????????????????????????? HSC: ?????????????????????????????????????????????????????????????????????????????????????????? (HSC_HUGE_SHARED_STRING_CONSTANT)??????????????????????????????????????????????????????????????????????????????????????????????????? final ??????????????????????????????????????????????????????Java ?????????????????????????????????????????? final ????????????????????????????????????????????????????????????????????????????????????????????????????????????
JDK ??????????????????????????????????????????1MB???????????????????????????????????? SBSC: ?????????????????? + ????????????????????????????????????????????????????????? (SBSC_USE_STRINGBUFFER_CONCATENATION)
?????????????????????????????????????????? + ???????????????
??????????????? // This is bad String s = ""; for (int i = 0; i < field.length; ++i) { s = s + field[i]; } // This is better StringBuffer buf = new StringBuffer(); for (int i = 0; i < field.length; ++i) { buf.append(field[i]); } String s = buf.toString(); SIC: static ??????????????????????????? (SIC_INNER_SHOULD_BE_STATIC)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????? static ????????????????????? SIC: ???????????? static ????????????????????????????????????????????????????????????????????? (SIC_INNER_SHOULD_BE_STATIC_ANON)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????? static ???????????????????????????????????? ???????????????????????? static ???????????????????????????????????????????????????????????????????????????????????????????????????????????? SIC: static ????????????????????????????????????????????????????????????????????? (SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????? static ???????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? SS: ???????????????????????????????????? (SS_SHOULD_BE_STATIC)????????????????????????????????????????????????????????????????????????????????????????????? final ????????????????????????????????? static ???????????????????????????????????????????????????????????? UM: ???????????? Math ???????????? static ???????????????????????????????????????????????? (UM_UNNECESSARY_MATH)
????????????????????????????????????
UPM: private ????????????????????????????????????????????? (UPM_UNCALLED_PRIVATE_METHOD)?????? private ?????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? UrF: ???????????????????????????????????? (URF_UNREAD_FIELD)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? UuF: ??????????????????????????? (UUF_UNUSED_FIELD)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? WMI: entrySet ?????????????????????????????????????????? keySet ???????????????????????????????????? (WMI_WRONG_MAP_ITERATOR)
????????????????????????keySet ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Map ??? entrySet ??????????????????????????????????????? Dm: ?????????????????????????????????????????????????????????????????? (DMI_CONSTANT_DB_PASSWORD)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Dm: ??????????????????????????????????????? (DMI_EMPTY_DB_PASSWORD)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? HRS: ????????????????????????????????????????????? HTTP cookie (HRS_REQUEST_PARAMETER_TO_COOKIE)
???????????????????????????????????? HTTP ?????????????????????????????? HTTP ???????????????????????????????????????
????????????????????? HTTP ??????????????????????????????????????????HRS(HTTP ???????????????????????????????????????) ????????????????????????????????? FindBugs ??????HRS ???????????????????????????????????????????????????????????? FindBugs ??????????????????????????????????????????????????? FindBugs ?????????????????????????????????????????????????????????????????? HRS ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? HRS: HTTP ???????????????????????????????????????????????? (HRS_REQUEST_PARAMETER_TO_HTTP_HEADER)
?????????????????????HTTP ???????????? HTTP ???????????????????????????????????????????????????????????? HRS(HTTP ???????????????????????????????????????) ????????????????????????????????? FindBugs ??????HRS ???????????????????????????????????????????????????????????? FindBugs ??????????????????????????????????????????????????? FindBugs ?????????????????????????????????????????????????????????????????? HRS ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? PT: ??????????????????????????????????????????????????? (PT_ABSOLUTE_PATH_TRAVERSAL)????????????????????????????????????????????????????????????????????????????????????????????????????????????HTTP??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????/abs/path???????????????????????????????????????????????????????????????????????????????????? ????????????http://cwe.mitre.org/data/definitions/36.html ?????????????????????????????? FindBugs ???????????????????????????????????????????????????????????????????????????????????????????????? FindBugs ??????????????????????????????????????????????????? FindBugs ?????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? PT: ??????????????????????????????????????????????????? (PT_RELATIVE_PATH_TRAVERSAL)????????????????????????????????????????????????????????????????????????????????????????????????????????????HTTP??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????..???????????????????????????????????????????????????????????????????????? ????????????http://cwe.mitre.org/data/definitions/23.html ?????????????????????????????? FindBugs ???????????????????????????????????????????????????????????????????????????????????????????????? FindBugs ??????????????????????????????????????????????????? FindBugs ?????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? SQL: SQL ??? Statement ??? execute ????????? addBatch ????????????????????????????????????????????????????????? (SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE)
???????????????????????????????????????????????????????????????????????????????????? SQL ??? ??? SQL: PreparedStatement ?????????????????????????????????????????????????????? (SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING)
??????????????????????????????????????????????????? SQL ??? XSS: ????????????????????????????????????????????????????????????????????? JSP (XSS_REQUEST_PARAMETER_TO_JSP_WRITER)
?????????????????????JSP ???????????? HTTP ???????????????????????????????????????????????????????????? XSS(??????????????????????????????????????????) ????????????????????????????????? FindBugs ??????XSS ???????????????????????????????????????????????????????????? FindBugs ??????????????????????????????????????????????????? FindBugs ?????????????????????????????????????????????????????????????????? XSS ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? XSS: ???????????????????????????????????????????????????????????????????????????????????????????????????????????? (XSS_REQUEST_PARAMETER_TO_SEND_ERROR)
??????????????????????????????????????????????????????????????? FindBugs ??????XSS ???????????????????????????????????????????????????????????? FindBugs ??????????????????????????????????????????????????? FindBugs ?????????????????????????????????????????????????????????????????? XSS ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? XSS: ??????????????????????????????????????????????????????????????????????????????????????? (XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER)
??????????????????????????????????????????????????? HTTP ????????????????????????????????????????????????????????????????????? XSS(??????????????????????????????????????????) ????????????????????????????????? FindBugs ??????XSS ???????????????????????????????????????????????????????????? FindBugs ??????????????????????????????????????????????????? FindBugs ?????????????????????????????????????????????????????????????????? XSS ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? BC: ?????????????????????????????????????????????????????? (BC_BAD_CAST_TO_ABSTRACT_COLLECTION)
?????????????????????Collection ????????????????????????????????????????????????????????? (???????????? BC: ?????????????????????????????????????????????????????? (BC_BAD_CAST_TO_CONCRETE_COLLECTION)?????????????????????????????????????????? (???????????????Collection???List???Set) ???????????????????????? (???????????????ArrayList???HashSet) ????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? BC: ???????????????/???????????????????????? (BC_UNCONFIRMED_CAST)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? BC: ????????????????????????????????????????????????/???????????????????????? (BC_UNCONFIRMED_CAST_OF_RETURN_VALUE)??????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????FindBugs ?????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? BC: ?????? true ????????? instanceof (BC_VACUOUS_INSTANCEOF)?????? instanceof ????????? true ??????????????? (??????????????????????????? null ??????????????????)??? ????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????? null ???????????????????????????????????????????????????instanceof ???????????? null ?????????????????????????????????????????????????????????????????? BSHIFT: ??????????????????????????? short/byte ??????????????????????????? (ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT)??????????????????????????????????????????????????????????????? short ????????? byte ????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????? (?????????????????????????????????) ????????????????????????????????????????????? CI: final ??????????????? protected ???????????????????????????????????? (CI_CONFUSED_INHERITANCE)?????????????????????final ??????????????????????????????????????????????????? protected ?????????????????????????????? ???????????? fainal ????????????????????????????????????protected ???????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????? private ??? public ?????????????????????????????? DB: 2???????????????????????????????????????????????????????????????????????? (DB_DUPLICATE_BRANCHES)???????????????????????????????????????2??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? DB: switch ??????2?????? case ???????????????????????????????????????????????????????????? (DB_DUPLICATE_SWITCH_CLAUSES)????????????????????????switch ??????2?????? case ?????????????????????????????????????????????????????????????????? ?????????????????? case ???????????????????????????????????????????????????????????????????????? DLS: ??????????????????????????????????????? (DLS_DEAD_LOCAL_STORE)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????? Sun ??? javac ?????????????????? final ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? FindBugs ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? DLS: return ??????????????????????????????????????? (DLS_DEAD_LOCAL_STORE_IN_RETURN)???????????????return ???????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????? DLS: ????????????????????????????????? null ?????? (DLS_DEAD_LOCAL_STORE_OF_NULL)??????????????????????????????????????? null ????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????Java SE 6 ????????????????????????????????????????????????????????????????????? DLS: ??????????????????????????????????????????????????????????????? (DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? DMI: ??????????????????????????????????????????????????????????????? (DMI_HARDCODED_ABSOLUTE_FILENAME)
?????????????????????????????????????????????????????????????????????????????? File ?????????????????????????????????????????? (???????????? DMI: ObjectOutput ????????????????????????????????????????????????????????? (DMI_NONSERIALIZABLE_OBJECT_WRITTEN)
????????????????????? DMI: substring(0) ???????????????????????????????????? (DMI_USELESS_SUBSTRING)
????????????????????????????????? Dm: Thread ????????????????????? Runnable ?????????????????????????????????????????????????????? (DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED)Thread????????????????????? Runnable ?????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Eq: ???????????????????????? equals ???????????????????????????????????????????????????????????? (EQ_DOESNT_OVERRIDE_EQUALS)
????????????????????? Eq: ????????? equals ???????????? (EQ_UNUSUAL)
?????????????????? FE: ???????????????????????????????????????????????? (FE_FLOATING_POINT_EQUALITY)
???????????????????????????????????????2???????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????? float ??? double ???????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????? FS: Boolean ????????????????????? ???b ???????????????????????????????????????????????????????????? (VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN)Boolean ????????????????????? %b ???????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????? null ????????? true ???null ?????? false ????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????? IA: ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD)
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????? ?????????????????????????????????????????????????????????????????? super ???????????? (??????super.foo(17)) ?????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? FindBugs ???????????????????????????
IC: ?????????????????????????????? (IC_INIT_CIRCULARITY)???????????????????????????????????????????????????2????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????? ICAST: ??????????????????????????? double ????????? float ??????????????????????????? (ICAST_IDIV_CAST_TO_DOUBLE)
?????????????????? ??????????????????????????? double ????????? float ?????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????
????????? double ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????1????????????????????? double ??????????????????????????????????????? int x = 2; int y = 5; // Wrong: yields result 0.0 double value1 = x / y; // Right: yields result 0.4 double value2 = x / (double) y; ICAST: ???????????????????????? long ??????????????????????????? (ICAST_INTEGER_MULTIPLY_CAST_TO_LONG)???????????????????????????????????????????????????????????????????????????????????? long ??????????????????????????? long convertDaysToMilliseconds(int days) { return 1000*3600*24*days; }
long ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? long convertDaysToMilliseconds(int days) { return 1000L*3600*24*days; } ????????? static final long MILLISECONDS_PER_DAY = 24L*3600*1000; long convertDaysToMilliseconds(int days) { return days * MILLISECONDS_PER_DAY; } IM: ??????????????????????????????????????????????????????????????? (IM_AVERAGE_COMPUTATION_COULD_OVERFLOW)
?????????????????????????????????????????????????????????????????????2????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????? (?????????????????????????????????????????????)???
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????? ??????????????????????????????????????????????????????????????????????????????????????????????????? Martin Buchholz ??? JDK ??????????????????????????????????????????????????????????????? Joshua Bloch ??? ???????????????????????????????????????????????? IM: ?????????????????????????????????????????? (IM_BAD_CHECK_FOR_ODD)
????????????????????? INT: 1?????????????????????????????? (INT_BAD_REM_BY_1)
???????????? INT: ???????????????????????????????????????????????? (INT_VACUOUS_BIT_OPERATION)
????????????????????????????????????????????????????????? (AND???OR???XOR) ?????? (???????????? INT: ?????????????????????????????? (INT_VACUOUS_COMPARISON)
?????????????????????????????????????????????????????? (???????????? MTIA: Servlet ???????????????????????????????????????????????????????????????????????? (MTIA_SUSPECT_SERVLET_INSTANCE_FIELD)Servlet?????????????????????????????????????????????????????????????????????????????????????????? Servlet ????????????1????????????????????????????????? Java EE ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????? MTIA: Struts Action ??????????????????????????????????????????????????????????????? (MTIA_SUSPECT_STRUTS_INSTANCE_FIELD)Struts Action ?????????????????????????????????????????????????????????????????????????????????????????? Struts Action ????????????1????????????????????????????????? Struts ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????? NP: readLine ???????????????????????? null ??????????????????????????????????????????????????? (NP_DEREFERENCE_OF_READLINE_VALUE)
NP: readLine ??????????????????????????????????????????????????? (NP_IMMEDIATE_DEREFERENCE_OF_READLINE)
NP: null ???????????????????????????????????? (NP_LOAD_OF_KNOWN_NULL_VALUE)??????????????????????????????????????????????????? null ??????????????????????????????????????? null ?????????????????????????????????????????? ????????????????????????????????????????????????????????? (??????????????????????????????????????????????????????????????????????????????????????? null ??????????????? null ??????????????????????????????????????????)??? NP: ????????????????????????????????? nullness ?????????????????????????????????????????? (NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION)?????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? @Nullable ????????????????????????????????????????????????????????????????????????????????????????????????????????? @Nonnull ?????????????????????????????????????????????????????????????????????????????? ?????????????????????????????? null ????????????????????????????????????????????????????????? NP: ??????????????????????????? nullness ?????????????????????????????????????????? (NP_METHOD_RETURN_RELAXING_ANNOTATION)?????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? @Nonnull ????????????????????????????????????????????????????????????????????????????????????????????? @Nullable ????????? @CheckForNull ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????? null ?????????????????????????????????????????????????????? NP: null ????????????????????????????????????????????????????????????????????????????????? (NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE)????????????????????????????????? null ??????????????????????????????????????????????????????????????????????????? null ?????????????????????????????????????????? ?????????????????????????????? NullPointerException ?????????????????????????????????????????? NP: null ???????????????????????????????????????????????????????????????????????????????????? (NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE)?????????????????????????????????????????????null ????????????????????? NullPointerException ????????????????????? ??????????????????????????????????????????????????????????????????NullPointerException ????????????????????????????????????????????????????????????????????????????????? ???????????????????????? FindBugs ????????????????????????????????? ?????????????????? null ??????????????????????????????????????????????????????????????????????????????????????? NP: ?????????????????? ??? null ?????????????????????????????? null ????????????????????????????????????????????? (NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE)????????????????????????????????? ??? null ??????????????????????????????????????????????????????????????????????????????????????????????????? null ??????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????? NP: ??????????????????????????? public ????????? protected ?????????????????????????????? (NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD)?????????????????????????????? null ???????????????????????????????????????????????? public ????????? protected ?????????????????? null ?????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? NullPointerException ????????????????????? NS: ????????????????????????????????????????????? (NS_DANGEROUS_NON_SHORT_CIRCUIT)????????????????????????????????? (&& ??? ||) ??????????????????????????? (& ??? |) ?????????????????????????????????????????? ??????????????????????????????????????????????????????????????? (??????????????????????????????????????????????????????????????????) ????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????the Java Language Specification ?????????????????????????????? NS: ???????????????????????????????????? (NS_NON_SHORT_CIRCUIT)????????????????????????????????? (&& ??? ||) ??????????????????????????? (& ??? |) ?????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????the Java Language Specification ?????????????????????????????? PZLA: null ?????????????????????0??????????????????????????????????????? (PZLA_PREFER_ZERO_LENGTH_ARRAYS)????????????????????? (???????????????????????????????????????) ?????????????????? null ???????????????????????????0????????? ???????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????? null ???????????????????????????????????????????????????
??????????????? QF: ?????????????????????????????????????????????????????? for ????????? (QF_QUESTIONABLE_FOR_LOOP)??????????????? for ???????????????????????????????????????????????????????????????????????? ??????????????? for ???????????????????????????????????????????????????????????????????????????????????? RCN: ??? null ?????? null ???????????????????????? (RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL_VALUE)????????????????????????null ????????????????????????????????????????????? null ??????????????????????????????????????????????????????????????? RCN: 2?????? null ????????????????????? (RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES)???????????????????????????????????????????????? null ?????????????????????2???????????????????????????????????????????????? RCN: null ??????????????????????????????????????????????????? null ???????????? (RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE)???????????????????????? null ??????????????????????????????????????????????????? null ?????????????????????????????? RCN: null ???????????????????????????????????? null ???????????? (RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE)????????????????????????null ???????????????????????????????????? null ?????????????????????????????? REC: ????????????????????????????????????????????????????????????????????? (REC_CATCH_EXCEPTION)
????????????????????????????????????????????????????????????????????? try-catch ??????????????????????????????????????????????????? try ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????? catch ???????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????? RuntimeException ???????????????????????????????????????????????????????????????????????????????????? try { ... } catch (RuntimeException e) { throw e; } catch (Exception e) { ... deal with all non-runtime exceptions ... } RI: ????????????????????????????????????????????????????????????????????????????????? (RI_REDUNDANT_INTERFACES)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? RV: String.indexOf ????????????????????????????????????????????? (RV_CHECK_FOR_POSITIVE_INDEXOF)
????????????????????? RV: readLine ???????????????????????? null ???????????????????????????????????????????????? (RV_DONT_JUST_NULL_CHECK_READLINE)
RV: ?????????????????????????????????????????????????????? (RV_REM_OF_HASHCODE)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????2?????????????????????????????????????????????????????????????????????????????????????????????????????? (??????????????? RV: ????????????32????????????????????????????????? (RV_REM_OF_RANDOM_INT)
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????? RV: ??????????????????????????????????????????????????????????????????????????????????????????? (RV_RETURN_VALUE_IGNORED_INFERRED)
??????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????FindBugs ??????????????? @CheckReturnValue ??????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? RV: ???????????????????????????????????????????????????????????? (RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT)??????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????? (????????????????????????????????????????????????) ?????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????? - ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
- ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? - ???????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????FindBugs ????????????????????????????????????????????????????????????????????????????????????????????? @CheckReturnValue ???????????????????????????????????????????????????????????? SA: ?????????????????????????????? (SA_FIELD_DOUBLE_ASSIGNMENT)
???????????????????????????????????????????????????????????????????????? int x,y; public void foo() { x = x = 17; } ??????????????????2???????????????????????????????????????????????????????????????????????????????????????????????????????????? SA: ????????????????????????????????? (SA_LOCAL_DOUBLE_ASSIGNMENT)
??????????????????????????????????????????????????????????????????????????? public void foo() { int x,y; x = x = 17; } ?????????????????????2???????????????????????????????????????????????????????????????????????????????????????????????????????????? SA: ????????????????????????????????? (SA_LOCAL_SELF_ASSIGNMENT)
??????????????????????????????????????????????????????????????????????????? public void foo() { int x = 3; x = x; } ???????????????????????????????????????????????????????????????????????????????????????????????????????????? SF: 1?????? case ????????? case ????????????????????? switch ?????????????????? (SF_SWITCH_FALLTHROUGH)????????????????????????1?????? case ????????? case ????????????????????? switch ????????????????????? ????????????break ??? return ????????? case ?????????????????????????????????????????? SF: default ????????? switch ?????????????????? (SF_SWITCH_NO_DEFAULT)????????????????????????default ????????? switch ????????????????????? ????????????default ??????????????????????????????????????? ?????????????????????????????????????????????????????????????????????default ??? switch ???????????????????????????????????????????????? break ??????????????????????????????????????????????????????????????????????????? ST: ???????????????????????????????????? static ????????????????????????????????? (ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD)??????????????????????????????????????????static ??????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Se: ???????????????????????????????????? private ??? readResolve ???????????? (SE_PRIVATE_READ_RESOLVE_NOT_INHERITED)
?????????????????????private ??? Se: Serializable ????????????????????? transient ??????????????? (SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS)?????????????????????transient ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????? transient ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? TQ: ??????????????????????????????????????????????????????????????????????????????????????? (TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????? TQ: ???????????????????????????????????????????????????????????????????????????????????? (TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????? UC: ???????????????????????? (UC_USELESS_CONDITION)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????? UC: ????????????????????????????????????????????? (UC_USELESS_CONDITION_TYPE)????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????? UC: ??????????????????????????????????????????????????? (UC_USELESS_OBJECT)??????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? - ??????????????????????????????????????????????????? - ???????????????????????????????????????????????????????????? - ???/????????????????????????????????????????????????????????????????????? UC: ?????????????????????????????????????????????????????????????????? (UC_USELESS_OBJECT_STACK)?????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? UC: ????????????????????????????????? void ???????????? (UC_USELESS_VOID_METHOD)?????????????????????????????????????????? void ???????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? - ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? - ??????????????????????????????????????????????????????????????????????????????????????????????????? UCF: ????????????????????????????????? (UCF_USELESS_CONTROL_FLOW)
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? if (argv.length == 0) { // TODO: handle this case } UCF: ???????????????????????????????????????????????????????????? (UCF_USELESS_CONTROL_FLOW_NEXT_LINE)
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? if (argv.length == 1); System.out.println("Hello, " + argv[0]); UrF: ????????????????????? public ????????? protected ??????????????? (URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD)???????????????????????????????????????????????????????????? ?????????????????????public ??? protected ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????? UuF: ???????????? public ????????? protected ??????????????? (UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD)????????????????????????????????????????????????????????? ?????????????????????public ??? protected ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????? UwF: ????????????????????????????????????????????????????????????????????? null ????????????????????? null ???????????????????????? (UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????null ???????????????????????????????????? ????????????????????????????????????????????????null ????????????????????? null ??????????????????????????? ???????????????????????????????????????????????????????????? NullPointerException ??????????????????????????????????????????????????????????????????????????? UwF: ??????????????????????????? public ????????? protected ??????????????? (UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD)?????? public ????????? protected ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????? (??????????????????????????????????????????????????????)?????????????????????????????????????????????????????? XFB: XML????????????????????????????????????????????????????????????????????????????????????????????? (XFB_XML_FACTORY_BYPASS)
????????????????????????XML???????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Send comments to findbugs@cs.umd.edu |