在run方法中使用static成員變數問題

2021-07-16 03:10:42 字數 879 閱讀 1022

最近在寫乙個藍芽的測試程式,裡面定義了乙個communicatethread 連線線程類繼承於thread;在該類中定義了乙個run方法。run方法**如下:

public void run() 

}} catch (ioexception e)

}}

本人的目的就是想通過其他類設定乙個static成員變數來控制while()裡面的迴圈標誌位。無論我用什麼方法都不能控制這個標誌位;即在communication類中的這個標誌位與我一開始定義的那個標誌有差別。這就是我要寫這篇部落格的原因了。

通常,static成員變數在建立時只分配一次記憶體,它作用於全域性範圍,由類名直接呼叫。當我把static標誌位在乙個fragment定義後,然後在while()裡面呼叫fragment.標誌位;發現結果與我想象中的不一樣。但在fragment裡面該值已經變化了;也就是說run方法中這個值與fragment中的值不同時變化。這就與我們所理解的static只分配一次記憶體的想法背向而馳。這期間我也在網上查詢了一些資料,然而並沒有查到什麼結果。我們只能猜測在run方法中,該標誌位被重新拷貝了乙份。

當然,出現這樣的問題也是因為我在寫程式想偷懶,或許我的想法比較奇特。正常的寫法應該是在communication類中定義乙個close()方法,在close()方法中令isrunning設定為false。然後在例項化communication類的類中再呼叫close()方法;這樣就能控制標誌位了。

另附上正常寫法:

public void close() 

try

} catch (ioexception e)

}

這個close()方法是在communication類例項化類中的方法。通過呼叫該方法就能控制了!

php 函式中使用static

function sendheader num,rtarr null return sapi 看pw原始碼的時候發現setheader 函式中使用static關鍵字,很奇怪,以前也沒這樣用過。static用在函式裡面,宣告一次變數後,如果再次呼叫這個函式將會在初始值延續,如 sapi這裡將累加。ec...

在LINUX中使用外設方法

在linux下如何使用軟盤 光碟以及dos等非linux分割槽 這是linux初學者問得最多的問題。由於大家已習慣了微軟的訪問方法,總想用類似的思路來找 到軟盤和光碟。但在linux下,卻沿襲了unix將裝置當作檔案來處理的方法。所以要訪問軟盤和光碟,就必須先將 它們裝載 到linux系統的 mnt...

在vue中使用樣式的方法

一 vue屬性繫結 在vue中,是通過v bind 屬性繫結來實現給元素繫結style樣式。其中有兩種方式,一種是通過繫結class類繫結樣式,另一種是通過內聯樣式來實現樣式的繫結。二 繫結class樣式 1.陣列 2.陣列中使用三元表示式 3.陣列中巢狀物件 4.直接使用物件 class clas...