static 關鍵字 亂用的後果

2021-07-02 07:54:02 字數 2128 閱讀 9063

static 關鍵字,一般用來減少物件的例項化,減少記憶體空間,因為,它不需要new乙個物件即可以直接使用…有時候,我們為了方便外部呼叫內部類以及成員變數,所以將相應的方法和字段宣告為static,這在外部庫中使用較多,以及一些公共介面中使用較多.

在前面的android開發中,由於亂用static關鍵字,導致了未知的後果,頁面效果和功能一直沒有出來,所以,做個筆記,告誡自己…

功能例項如下:

class

mytaskshowadapter

extends

fragmentstatepageradapter

@override

public fragment getitem(int position)

@override

public

int getcount()

@override

public

int getitemposition(object object)

}

由乙個fragmentstatepageradapter,例項化多個碎片布局,然後,進入某乙個碎片中進行操作,我這裡主要是進行更新介面卡操作:

宣告一些變數(當時設成static了,主要是預防記憶體洩露【使用了handler來更新..】)

如:

private

static messageadapter adapter;

public

static

int task_id;

private

static

int stask_id;

taskshowfragment中有乙個更新介面卡的操作:

public

void updatefragmentadapter(final

int flag, final task_message message,int taskid)

@override

public

void handlemessage(message msg)}}

myhandler myhandler = new myhandler(taskshowfragment.this);

message msg = message.obtain();

msg.what = flag;

msg.obj = message;

myhandler.sendmessage(msg);

}}

這樣的處理造成的後果是:

1 在特定的碎片中進行更新介面卡操作,會造成介面卡不是當前碎片中的介面卡更新

分析原因: 將messageadapter宣告成了靜態,所以,每次都只例項化一次物件,所以,每次的更新都是在第乙個例項化的adapter中去了….

2 更新的內容沒有插入到當前任務中的資料庫中

分析原因:同上…

修改後:

private messageadapter adapter;

public

int task_id;

private

int stask_id;

public

void updatefragmentadapter(final

int flag, final task_message message,int taskid)

@override

public

void handlemessage(message msg)}}

myhandler myhandler = new myhandler(taskshowfragment.this);

message msg = message.obtain();

msg.what = flag;

msg.obj = message;

myhandler.sendmessage(msg);

}}

總結:

static 關鍵字,雖然我們都知道它的書面定義,平時也有實踐,但是由於沒有真正的理解或者是沒有應用到適應的場景,反而會造成適得其反的效果… 編碼其實有時候,就在一些小點上出問題了,所以,告誡自己…下次別犯這麼低階的錯誤,找到問題,解決問題….別急躁,加油!!

this關鍵字 static關鍵字

1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...

Java this關鍵字,static關鍵字

1,this.屬性,this.方法,表示當前物件的屬性,當前類的方法 2,this,表示當前物件,當前正在操作這個方法的物件就是當前物件 3,使用this 引數若干 可以呼叫當前類的構造方法,如果,構造方法之間相互呼叫,則有要求 一 this 必須放在首行,二 至少有乙個構造方法是沒有呼叫this ...

static關鍵字 final 關鍵字

特點 隨著類的載入而載入,也就是說靜態會隨著類的消失而消失,說明他的生命週期最長 靜態變數 static 關鍵字修飾成員變數,使用 類名.變數名 的形式來訪問,也可以使用 例項物件.變數名 的形式來訪問。靜態方法 static 關鍵字修飾成員函式,靜態方法可以使用 類名.方法名 的形式來訪問,也可以...