簡體   English   中英

Java中的奇怪編碼方法

[英]Strange Coding Methods In java

我遇到了來自遺留系統的2個代碼示例,我不知所措,為什么有人會這樣編碼。 該應用程序使用Java編寫,大約有10-15年的歷史。

似乎很難理解如此完成的效率如何。

if(condition) {
    String[] hdtTmp = { "Range (Brand):", "Build Region:", "Design:", "Plan (Size):", "Facade:", "Region:" , "Internal Colour", "External Colour"}; 
    hdt = hdtTmp;

    String[] hddTmp =  { p.RangeName, brName, p.HomeName, p.Name, f.Name, "North", "Red", "Blue"};                          
    hdd = hddTmp;

    hddTmp = null;
    hdtTmp = null;
}

我不明白為什么您不首先將其分配給屬性? 既然hdtTmp和hddTmp都在塊內,為什么要使它們為null?

max = hdt.length -1;

for(int i=0; ; i++) {
    // do some stuff here
    if(i == max) 
        break;
}

同樣,似乎原始程序員不知道for循環如何工作?

他們從來沒有教過這個當我做了我的學位,所以我的問題是,為什么有人會寫這樣的代碼?

將局部變量設置為null ...早在90年代,一些舊的Sun文檔建議這樣做會有所幫助,但是已經很久了,信息可能不再可用,因為它不再正確。 我已經在很多舊代碼中遇到了這一點,並且由於當前方法退出后局部變量失去了對對象的引用,GC變得足夠聰明,因此無法執行此操作。

for()循環問題更多的是有人在實際循環中使用退出標准構建循環。 這只是不幸的編碼風格,可能是由相對初級的開發人員編寫的。

學習C / C ++之后,這段代碼肯定看起來像是在編碼Java。 我已經看到了足夠多的內容,C / C ++人員被教導要在分配后進行清理,將null分配給他們感到高興(至少是我以前工作過的人)。 他們所做的另一件事是覆蓋finalize方法,這在Java中是一種不好的形式,但它們是析構函數中最接近的東西。

您可能還會看到內部包含停止條件的無限循環,例如:

for (;;) { 
     // Do stuff
     if (something_happened)
         break;
}

舊的(不良)習慣很難解決。

在一般情況下,有一種狹窄的用例用於使變量為空。

如果在分配null和變量范圍的結尾(通常是方法的結尾)之間的代碼運行時間過長,則null將為GC先前引用的對象提供更早的機會。

從表面上看,這是微優化,但它可以帶來安全性好處:如果發生內存轉儲或其他類似的快照(例如,通過探查器),則可能(非常輕微)減少敏感數據成為轉儲一部分的機會。

這些“好處”雖然很微不足道。

但是,問題中的代碼完全沒有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM