JAVA中类型后面跟三个点的使用问题

首先来讲一下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;
        }
应该实在异步线程里出现了数组越界的问题:




      






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章