這幾天做了個專案,發現乙個很神奇的問題,
public class b extends a
private int mm = 10;
public int b;
public int c = new int[1];
@override
public void setmm()
}
public abstract class a
public abstract void setmm();
}
這裡setmm()
後,獲取b的值為0,c = null 報出空指標異常。
nullpointerexception: attempt to write to null array
左思又想,估計是和 父類有關係,去掉繼承a一切都正常了,才發現,原來setmm
是父類的初始化的方法,這時候b物件還沒初始化,c為空,b為預設值0。
然後將a類建構函式中的setmm()
注釋掉,b不變:
public abstract class a
public abstract void setmm();
}
執行:
b b = new b() ;
b.setmm();
logutil.e("b = " + b.b);
logutil.e("c[0] = " + b.c[0]);
執行結果:
b = 10
c[0] = 2
這下正常了。
notice:子類繼承父類的方法中,若有子類變數呼叫,則繼承的父類方法一定不要在父類的構造方法中呼叫,因為此時子類物件未生成,此時的子類物件都是預設值或者為空。
java陣列間賦值
連線mysql伺服器 1.mysql u 使用者名稱 p 連線本地mysql伺服器 2.mysql h ip位址 u 使用者名稱 p 連線目的ip的mysql伺服器 3.mysqld skip grant tables 跳過輸入密碼直接連線 資料庫1.show databases 檢視所有資料庫 2...
給char陣列或者結構體賦值
首先,定乙個乙個結構體 struct controlwindowmsg 定義乙個char型別字元陣列,並且賦值 char buf 4 buf 0 1 0xff buf 1 0 0xff buf 2 3 0xff buf 3 104 0xff 然後,將buf中的內容賦值給結構體 struct cont...
Java靜態方法間接賦值賦值非靜態變數
在程式設計的過程中有時候我們需要通過乙個靜態的方法給靜態的變數賦值,但是如果是直接賦值,編譯器會直接報錯 如下 想必原因大家很清楚了,cannot make a static reference to the non static field mouthcolor 但是可以通過以下的方法間接賦值 p...