`

Java十大低级错误

阅读更多

JAVA十大低级错误

1、方法和变量命名随意而不规范,没有类注释、方法注释或注释不规范,代码修改后,不同步修改注释,导致注释与代码不符。

 

2、数据类不重载toString()方法(说明:编程规范要求“所有的数据类必须重载toString() 方法,返回该类有意义的内容”)

 

3、对方法的调用不进行空指针判断而造成空指针异常。

 

4、数据库操作、IO操作的资源没有及时释放,数据库结果集和连接释放顺序不正确,或者使用没有必要的预处理。

 

5、循环体内包含了大量没有必要在循环中处理的语句,循环体内循环获取数据库连接,循环体内进行不必要的try-catch操作。(说明:编程规范中建议“不要在循环体内调用同步方法和使用 try-catch 块”)。

 

6、嵌套使用try-catch或者try-catch后面没有必要的finally操作(说明:数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally finallyclose())。

 

7、不对数组下标作范围校验。

 

8equals操作时没有将常量放在equals操作符的左边(说明:字符串变量与常量比较时,先写常量,这样可以避免空指针异常)。

 

9、字符串转化为数字时没有做异常处理。

 

10、没有在异常分支记录日志导致问题定位困难。

 

 

代码案例(说明:所有样例都是错误的代码)

1、方法和变量命名随意而不规范,没有类注释、方法注释或注释不规范,代码修改后,不同步修改注释,导致注释与代码不符。

 

public class MethodName

{

//错误:没有类的注释

//错误:方法的注释不规范、方法名不规范

    public void a( int i )

    {     

//错误:变量名称太短

String b = "";    

 

//错误:变量名称太长,超过40个字符

String longVariableLongVariableLongVariableLongVariable = "";

}

 

    /**

     * <一句话功能简述>方法命名约定:应以小写字母开头、同时命名不应含有下划线字符。

     * <功能详细描述>

     * @param i

     * @see [类、类#方法、类#成员]

     */

    public void Check_Method( int i )

    {

        // 错误:方法名称不规范

//错误:变量名称不规范

String b = "";  

    }

 

    /**

    * <一句话功能简述>变量、方法名、类名、接口名避免出现美元字符$

    * <功能详细描述>

    * @param i

    * @see [类、类#方法、类#成员]

    */

    public void Fo$o ()

{ 

// 错误:方法名称不规范     

}

 

    /**

     * <一句话功能简述>注意hashCode方法大小写。此规则用于推测作者可能是要实现hashCode方法,但大小写错了。

     * <功能详细描述>

     * @return

     * @see [类、类#方法、类#成员]

     */

    public int hashcode()

    {

        // 错误:方法名称不规范

int temp = 0;

        // oops, this probably was supposed to be hashCode

        return temp;

 

    }

 

    /**

     *

     * @param o 只有参数类型和返回值类型不一致,方法名equals完全相同(包括大小写也相同),推测可能是想实现equals方法。

     * @return

     */

    public int equals(Object o)

    {

        // 错误:方法名称不规范

// oops, this probably was supposed to be boolean equals

        int temp = 0;

        return temp;

    }

 

    /**

     * <一句话功能简述>只有参数类型和返回值类型不一致,方法名equals完全相同(包括大小写也相同),推测可能是想实现equals方法。

     * <功能详细描述>

     * @param s

     * @return

     * @see [类、类#方法、类#成员]

     */

    public boolean equals(String s)

    {

        // 错误:方法名称不规范

// oops, this probably was supposed to be equals(Object)

        return true;

    }

 

    /**

     * <一句话功能简述>'getX()'方法同时返回值又是 'boolean' ,则建议用'isX()'命名。checkParameterizedMethods属性用于决定是否对带参数的方法检测。

     * <功能详细描述>

     * @return

     * @see [类、类#方法、类#成员]

     */

    public boolean getFoo()

    {

        // 错误:方法名称不规范

// bad

        return true;

    }

 

}

 

 

2、数据类不重载toString()方法(说明:编程规范要求“所有的数据类必须重载toString() 方法,返回该类有意义的内容”)

public class Content extends BaseMetaData

{

   private String oldCID;

 

    private String cId;

 

    private String spId;

 

    private int type;

 

private int serviceType;

.........................

    /**

     * 设置修改标识

     * @param update_flag 修改标识

     */

    public void setUpdate_flag(String update_flag)

    {

        this.updateFlg = update_flag;

 

    }

    public void setVersion(String version)

    {

        this.version = version;

}

public String toString()   

    {

        //没有重载toString方法或者重载无意义的toString方法

return null;  

}

}

 

3、对方法的调用不进行空指针判断而造成空指针异常。

/**

 * <一句话功能简述>演示不进行空指针判断造成空指针异常

 * <功能详细描述>

 *

* @see  [相关类/方法]

 * @since  [产品/模块版本]

 */

public class NullPoint

{

 

    /**

     * <一句话功能简述>

     * <功能详细描述>

     * @return

     * @see [类、类#方法、类#成员]

     */

    public String returnNull ()

    {

        String temp = null;

        return temp;

    }

 

    public void checkNull()

    {

        String str1 = "aa";

 

        //错误:没有对returnNull()的值进行为空判断,会造成空指针

if (str1.equals(returnNull()))

        {

            str1 = returnNull();

        }

        print(str1);

 

    }

 

    public void print(String str)

    {

    }

}

 

 

 

4、数据库操作、IO操作的资源没有及时释放,数据库结果集和连接释放顺序不正确,或者使用没有必要的预处理。

/**

 * <一句话功能简述>该类用来演示没有释放资源的的错误

 * <功能详细描述>

 * @see  [相关类/方法]

 * @since  [产品/模块版本]

 */

public class ReleaseRes

{

    public void releaseDB ()

    {

        Connection conn = null;

        APLResultSet rs = null;

        String sql= "";

        try

        {

            conn = DB.getConnection();

 

            rs = DB.query(sql);

            if (rs.next())

            {

                return rs.getString("currentdate");

            }

            else

            {

                return DateTool.getCurrentDate(pattern);

            }

             Conn.close(); 

//错误:连接没有在finally正确释放,会出现异常时导致在运行一段时间后,系统由于连接池满载而崩溃。

        }

        catch (DBException e)

        {

            ...................

        }

        //错误:资源APLResultSet没有正确释放  

 }

     /**

     * <一句话功能简述>

     * <功能详细描述>

     * @param file

     * @see [类、类#方法、类#成员]

     */

    public void releaseIO (File file)

    {

        StringBuffer sb = null;

        BufferedReader in = null;

        try

        {

            in = new BufferedReader(new FileReader(file));

 

            sb = new StringBuffer();

            for (String line; (line = in.readLine()) != null;)

            {

                sb.append(line + "\r\n");

            }

        }

        catch (IOException ex)

        {

            Throw ex;

        }

         //错误:IO资源没有正确释放,需要在finally中释放资源

   }

 

 

 

 

5、循环体内包含了大量没有必要在循环中处理的语句,循环体内循环获取数据库连接,循环体内进行不必要的try-catch操作。(说明:编程规范中建议“不要在循环体内调用同步方法和使用 try-catch 块”

 /**

 * <一句话功能简述>该类用来演示循环中的错误

 * <功能详细描述>

 * @see  [相关类/方法]

 * @since  [产品/模块版本]

 */

public class CheckCycle

{

    public void cycleInfo()

    {

        String[] Str = null;

 

        //获取各个部件的通知地址

        Str = outNotify.getResult();

        StringBuffer sb = null;

        BufferedReader in = null;

 

        Connection conn = null;

        APLResultSet rs = null;

        String sql= "";

        File file = null

 

        for (int i = 0; i < Str.length; i++)

        {

           //错误:判断完全可以在for外部进行而不是在内内部。

           if( null != Str)

           {

               System.out.print(Str[i]);

           }

 

          //错误:不要在循环中获取数据库连接。

           conn = DB.getConnection();

 

           //错误:循环体内进行无必要的try-catch操作,完全可以放在循环外边。

           try

           {

               //错误:不要在循环中获取IO连接。

               in = new BufferedReader(new FileReader(file));

 

               sb = new StringBuffer();

              

           }

           catch (IOException ex)

           {

               Throw ex;

           }

        }

    }

}

 

6、嵌套使用try-catch或者try-catch后面没有必要的finally操作(说明:数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally finallyclose())。

/**

 * <一句话功能简述>演示嵌套循环的错误

 * <功能详细描述>

 * @see  [相关类/方法]

 * @since  [产品/模块版本]

 */

public class NestingTry

{

    /**

     * <一句话功能简述>

     * <功能详细描述>

     * @see [类、类#方法、类#成员]

     */

    public void checkTry()

    {

        StringBuffer sb = null;

        BufferedReader in = null;

File file = null

        try

        {

            initFtpClient(this.ftpClient, getFtpServConfig());

            // 把绝对路径加入到文件中

            String[] absoluteFiles null;

 

            //错误:完全没有必要在内容进行异常处理,而应该将异常处理放在try块后面进行处理。

            try

            {

                absoluteFiles = addAbsolutePath(this.ftpClient, files);

            }

            Catch(IOException ex)

            {

                Throw ex;

            }

File file = null

            in = new BufferedReader(new FileReader(file));

            sb = new StringBuffer();

        }

        catch (Exception e)

        {

            throw new FtpOperationsException(FtpConst.Ftp_Operations_Del_Error,

                    "IOException when invoking deleteFiles method", e)

        }

         //错误:IO资源没有正确释放,必须有finally进行释放资源

    }

}

 

7、不对数组下标作范围校验。

/**

 * <一句话功能简述>该类用来演示数据下标越界

 * <功能详细描述>

 * @see  [相关类/方法]

 * @since  [产品/模块版本]

 */

public class ArrayOver

{

    public void checkArray()

    {

        //获取一个数组对象

        String[] cIds = ContentService.queryByName(name);

       

        if(null != cIds)

        {

           //错误:只是考虑到cids有可能为null的情况,但是cids完全有可能是个0长度的数组,因此cIds[0]有可能数组下标越界。

            String cid=cIds[0];

       

        }

 

    }

}

 

 

 

8equals操作时没有将常量放在equals操作符的左边(说明:字符串变量与常量比较时,先写常量,这样可以避免空指针异常)。

     /**

     * 定义常量

     */

    public static final String SP_NAME = "SPNAME";

 

    /**

     * <一句话功能简述>常量比较

     * <功能详细描述>

     * @see [类、类#方法、类#成员]

     */

    public void equalsConst()

    {

        String temp = null;

 

        //错误;//tempnull的情况下,此时会导致意想不到的异常抛出,如果将常量放在左边,就不会有这种问题。

        if(temp.equals(SP_NAME))

        {

           temp = SP_NAME + "AA";

 

        }

    }

 

9、字符串转化为数字时没有做异常处理。

    /**

     * <一句话功能简述>字符传传唤成数字

     * <功能详细描述>

     * @see [类、类#方法、类#成员]

     */

    public void switchStr()

    {

        String temp = "123a";

 

        //错误:对字符串转换为数字没有进行任何异常处理。可能抛出未知异常。

        if(Integer.parseInt(temp) == 123)

        {

           //......

        }

    }

 

10、没有在异常分支记录日志导致问题定位困难。

     /**

     * 根据objectId删除业务信息

     *

     * @param id 业务objectId

     * @throws IllegalServiceStatusException 非法业务状态异常

     * @see [类、类#方法、类#成员]

     */     

public void deleteService(String id)

        throws IllegalServiceStatusException

    {

        log.enterMethodDebugLog(new Object[][] {{"id", id}});

        MdspTServiceinfo serviceInfo = getMdspServiceByObjectId(id);

        if (null == serviceInfo)

        {

             return;

             //错误:异常分支没有记录日志,导致问题定位困难。

        }

        ........

       

    }

 

 

分享到:
评论

相关推荐

    java十大低级错误(续3)

    java十大低级错误详解和案例,灰常不错哦!!

    Java十大低级错误.doc

    Java编程中的十大低级错误是每个开发者应该避免的常见陷阱,它们不仅影响代码的可读性和维护性,还可能导致程序运行时出现各种异常。以下是这些错误的详细解释和改进建议: 1. **命名规范**:良好的命名规范是提高...

    java编程十大低级错误

    以下是对标题和描述中提到的十大低级错误的详细解释: 1. **命名不规范**:命名应该清晰、具有描述性,遵循驼峰命名法,同时类、方法和变量的命名应与它们的功能相符。类注释、方法注释也是必要的,以帮助其他...

    java 10大低级错误

    ### JAVA 10大低级错误详解 #### 1. 命名不规范 **问题描述**: 在代码示例中,类对象 `sss1` 和 `sss2` 的命名不符合Java命名规范。 **解决方案**: - **sss1** 应修改为具有描述性的变量名,例如 `...

    华为JAVA编程规范、编程军规

    以上只是部分基于华为JAVA编程规范的知识点,具体细节需要参考《JAVA编程军规.doc》《JAVA十大低级错误.doc》《华为_Java编程规范.pdf》《华为JAVA编程规范.doc》等文档。这些规范旨在提升代码质量和团队协作效率,...

    java10大低级错误

    Java编程中的十大低级错误是新手开发者常犯的典型错误,这些错误往往导致代码质量下降,可读性差,甚至引发程序运行时的异常。以下是对这些错误的详细解释: 1. **命名不规范**:良好的命名是代码可读性的基础。...

    java C++ 文档

    【Java新十大低级错误】 Java作为一种广泛应用的高级编程语言,其强大且灵活的特性深受开发者喜爱。然而,即便如此,新手和经验丰富的开发者都可能在编写代码时犯一些低级错误,这些错误可能导致程序运行异常、性能...

    crack over the code interview

    7. **候选人常犯的十大错误**:总结并分析了求职者在面试过程中常见的错误,并给出避免这些错误的建议。 - 准备不足 - 沟通不畅 - 对公司缺乏了解 8. **常见问题解答**:针对求职者关心的问题进行了详细的解答...

    Cracking the coding interview.pdf

    书中列出了应聘者常犯的十大错误,例如缺乏练习、不熟悉基本概念等。为了避免这些错误,应聘者应该多做练习,熟悉常见的数据结构和算法,并且在面试前进行模拟面试。 #### 三、面试题目篇 本书的大部分内容都集中...

    程序员面试指南

    - **C++/Java/数据库/低级编程**:提供了特定语言和领域的知识介绍。 总之,《程序员面试指南》不仅是一本面试题集,更是一部涵盖广泛IT知识的宝典,适合所有希望提升自己编程能力和面试表现的求职者阅读。通过本书...

    CareerCup-Coding_Interview_Top_150_Questions_4th.pdf

    - **避免面试中常见的十大错误**:列举了求职者在面试过程中容易犯的错误,并给出了改进建议。 - **面试官视角的故事**:通过真实案例展示了面试官的观点,帮助读者理解面试官的心理预期。 - **面试后的处理**:介绍...

    Cracking the Coding Interview Fourth Edition (程序员面试必看书))

    - **十大错误及避免方法**:列举求职者在面试过程中容易犯的十个错误,并提供相应的解决方案。 #### 常见问题解答 - **FAQ**:针对求职者可能遇到的问题,提供详细的解答,涵盖面试准备、面试技巧等多个方面。 ###...

    cracking the coding interview

    为了帮助读者更好地理解和掌握这些概念,作者还提供了各种编程语言的知识,包括C++、Java、数据库、低级编程、网络编程、多线程和锁等高级主题。特别是对于每个数据结构和算法,书中都有详细的解释和编码示例,使...

    Cracking_the_Coding_Interview_-4th.pdf

    3. **常见错误与避免方法**:作者总结了求职者在面试过程中容易犯的十大错误,并提供了有效的避免策略。 4. **算法解决思路**:本书还提供了解决复杂算法问题的五种有效方法,帮助读者提升解决问题的能力。 5. **...

    Cracking the Coding Interview

    - **十大常见错误**:列举了求职者在面试过程中容易犯的错误,并给出了相应的避免策略。 - **常见问题解答**:解答了一些求职者普遍关心的问题。 - **面试题目汇总**:收录了大量的面试题目,涵盖了数据结构、算法等...

    Cracking to codeing interview

    - **语言特定知识:** 介绍 C++、Java、数据库管理和低级编程等领域的专业知识。 #### 知识点详解 - **五大算法解决策略**: - **递归(Recursion)**:递归是一种重要的算法思想,尤其适用于那些问题可以分解为...

Global site tag (gtag.js) - Google Analytics