首先來講一下java 三個點的知識吧,
可變數組參數。用...的話,傳參數時可傳可不傳,傳的話,可以是一個個並列地傳,也可以直接是一個數組。
在方法裏取時,s是一個數組,如果調用時什麼都沒有傳,那麼s的長度就是0。傳的時候傳了幾個,s的長度就是幾。
還有,1.5以上才支持這個功能。
寫的例子:
public class ThreePoint {
public static void main(String[] args) {
printString();
System.out.println("==========");
printString(new String[] { "我", "和", "你" });
System.out.println("==========");
printString("我", "和", "你");
}
public static void printString(String... str) {
if (str.length == 0) {
System.out.println("沒有傳參數。");
}
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
System.out.println("---------------------");
for (String s : str) {
System.out.println(s);
}
}
}
今天,MTBF遇到了一個關於數組越界的問題
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=8
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at java.util.concurrent.CopyOnWriteArrayList.remove(CopyOnWriteArrayList.java:344)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at com.android.mms.model.SlideshowModel.remove(SlideshowModel.java:774)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at com.android.mms.ui.SlideshowEditor.removeSlide(SlideshowEditor.java:134)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at com.android.mms.data.WorkingMessage.setAttachment(WorkingMessage.java:1021)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at com.android.mms.ui.ComposeMessageActivity.addImage(ComposeMessageActivity.java:6918)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at com.android.mms.ui.ComposeMessageActivity.-wrap31(ComposeMessageActivity.java)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at com.android.mms.ui.ComposeMessageActivity$65.run(ComposeMessageActivity.java:6881)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at com.android.mms.ui.AsyncDialog$ModalDialogAsyncTask.doInBackground(AsyncDialog.java:161)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at com.android.mms.ui.AsyncDialog$ModalDialogAsyncTask.doInBackground(AsyncDialog.java:157)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java:295)
04-25 23:01:31.417925 23613 23671 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
這個問題的涉及到java代碼如中:
@Override
protected Void doInBackground(Runnable... params) {
if (params != null) {
try {
for (int i = 0; i < params.length; i++) {
params[i].run();
}
} finally {
mHandler.removeCallbacks(mShowProgressDialogRunnable);
}
}
return null;
}
應該實在異步線程裏出現了數組越界的問題: