code-review - Java Code review一些原则的原因探讨,下面这些原则都是为什么
迷茫
迷茫 2017-04-17 14:49:35
0
2
394
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆 (2)
Peter_Zhu

靜態分析器是什麼
這個是指使用靜態程式碼檢查工具去檢查原始碼,你不需要執行單元測試程式碼,就可以發現程式碼中潛在的問題,透過分析或檢查原始程式的語法、結構、流程、介面等來檢查程式的正確性,找出程式碼隱藏的錯誤和缺陷,如參數不匹配,有歧義的巢狀語句,錯誤的遞歸,非法計算,可能出現的空指針引用等等。
Java中常見的工具有Findbugs,CheckStyle,PMD等,這些工具通常都有Eclipse, Intellij Idea插件,開發人員在開發的時候可以很方便的運行,從而儘早發現問題,在程式碼Checkin之前就可以解決問題。這些工具也可以和Jenkins等自動化建置工具集成,在發布的時候給予維運人員參考。

    巴扎黑

    感謝邀請,不過 Java 丟得有點久了,僅供參考

    什麼是 native 方法?

    native 方法大概是指用 C/C++ 或其它直接編譯成指令的那些方法,通常是生成 .dll(windows) 或 .so(linux),再由 Java 透過 JNI 呼叫的

    caller 是什麼?

    一般來說 caller 是指方法的呼叫者,域應該是 field 的翻譯,但翻譯成「字段」比較容易解理。如

    public class A { ... } public class B { public static A a; // 本条推荐改为如下,并在 static 块中初始化 // public static final A a; } public class C { // 这个就是 caller public void doSomething() { // 不管有意无意,这里是把值给改了 B.a = new A(); // 但如果在 B 里把 a 定义成 final 的,上句就会编译错误 } }

    而有了 bean 規格之後,這種欄位通常會定義為private,再加 setter 或 getter。

    靜態分析器是什麼

    靜態分析器是指比編譯器更嚴格的一個類似編譯器的東西,從原始碼直接分析出來有可能發生的邏輯錯誤。關於靜態分析工具,可以找度娘問。我用過 FindBugs,還是有些作用,程式設計習慣不是很好的人,寫出來的程式碼會有很多警告。

    解釋

    整潔性

    1. 確定應用了程式碼格式化

      代码格式整洁,才易于阅读,最典型的就是缩进规则
    2. 使用異常而不是回傳碼

      异常和返回码是两种错误传递方式,异常的特点是立即中断跳出直到被 catch 住,返回码的特点是通过 return 返回一个错误代码。由于OOP的思想,要求方法尽可能简单,所以经常会存在我层级调用的情况,如果用异常,可以只在顶层处理异常,中途发生的任何异常都可以直接中断操作跳出来。但是如果用返回码,得一层层检查,代码繁琐,不易阅读。另外一点,Java的非 `RuntimeException` 必须在代码中申明处理(`catch` 或 `throws`),这样在编译阶段就能够进行一些逻辑异常处理的检查。 但个人对这个持保留态度,看情况而定,少量使用返回码也不是不可以的。
    3. 不要回傳Null

      不返回 `null` 主要是为了避免繁琐的判空操作,尤其是对集合类型的处理,除了判空(null) 还要判空(empty)。所以约定返回值都不为空,而是返回默认值,可以减少部分判断代码,也尽可能的避免了 `NullPointerException`。 C# 为了这个 null 的问题,扩展了很多语法和库,比如 `string.IsNullOrEmpty`,`??` 运算符以及 C#6.0 的空值条件运算符 `?.` 都是为了解决空问题而生的。 同样持保留态度。目前用得最多的只是返回集合不为 `null`,避免在 `foreach` 之前还要先判断。其它的视情况而定。

    安全

    1. 避免一些不尋常行為的過度日誌

      日志操作也是要消耗资源的,日志操作越多越耗资源,所以看着办吧。
    2. 在任何情況下都會釋放資源(流,連線等等)

      避免资源耗尽(诸如内存泄漏等)
    3. 把從不可信物件得到的輸出當作輸入來檢驗

      保证数据有效性
    4. 為native方法定義包裝類別(而不是定義native方法為pulibc)

      看看设计模式中的适配器,桥接和外观模式等
    5. 使public static域為final(避免呼叫方(caller)修改它的值)

      这个上面已经说了
    6. 小心地快取潛在的特權操作結果

      不是很懂,不过缓存本身是需要小心使用的,因为缓存具有不持久性。另外,缓存的有效期和授权的有效期不一致可能造成安全问题。
    7. 只有在需要的時候才使用JNI

    清單項目

    1. 更多使用標準異常

      标准异常基本上已经够用了。但适当的加入自己的异常类有助于代码流程管理。
    2. 避免使用finalizer

      因为不确定什么时候会调用
    3. 使用枚舉來代替int常數

      枚举值限定,int 无法限定
    4. 使用executors而不是task和thread

      大概是因为 Task 和 Thread 比较重吧。Java 的我不太了解,C# 的 Task 是轻量线程,所以轻量任务会使用 Task 代替 Thread。不过如果线程控制得好,对于重型任务使用 Thread 那是必须的。
    5. 查看靜態程式碼分析器的報告來進行類別的新增和修改

      更严格的检查,仅供参考。如果机器都能准确的分析出所有错误,那也不需要人写程序了。个人认为对高级程序员用处不大,但用于团队中代码检查和习惯养成还是很有用的。
      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!