Java初学者请教编译运行的问题

君梦无悔 2017-07-06 11:09:36
public class Demo04 {
public static void main(String[] args){
System.out.println("================List排序+比较器================");
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("a");
list.add("abc");
list.add("def");
Utils.sort(list,new StringComp());
System.out.println(list);
}
}


public class Utils {
/**
* List的排序+比较器
*/
public static <T> void sort(List<T> list,Comparator<T> com){
//第一步:转成数组
Object[] arr = list.toArray();
sort(arr,com);
//第二步:改变容器中对应的值
for(int i=0;i<arr.length;i++){
list.set(i, (T)arr[i]);
}
}/
/**
* 数组的排序(降序)+Comparator接口
*/
public static void sort(Object[] arr,Comparator com){//②
boolean sorted;
for(int i=arr.length-1;i>0;i--){
sorted = true;
for(int j=0;j<i;j++){
if(com.compare(arr[j], arr[j+1])<0){
Object temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
sorted =false;
}
}
if(sorted){
break;
}
}
}
}

public class StringComp implements java.util.Comparator<String>{

@Override
public int compare(String o1, String o2) {
int len1 = o1.length();
int len2 = o2.length();
return len1-len2;
}

}


Demo04调用Utils的sort排序方法对数组、容器排序(要借助StringComp的compare比较结果)。
编译时方法②的参数com擦除,是Object类型,com的compare方法也是接收的两个Object类型元素,编译通过。
运行时,new StringComp()的compare方法传入的两个参数(按理说是String类型的)由于编译时检查通过,就不会再次检查了吗?然后直接多态执行的String类对象的.length()方法是吧。
...全文
197 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
君梦无悔 2017-07-07
  • 打赏
  • 举报
回复
引用 2 楼 soton_dolphin 的回复:
编译时检查的是checked exception和语法错误,运行时还要检查runtime exception
就是一个问题,要么在编译时检查,要么在运行时检查。反正不会在编译、运行两个阶段重复检查同一问题是吧。 checked Exception和语法错误就在编译时检查,运行时就不会重复检查了。 runtime exception就是运行时才检查。
君梦无悔 2017-07-07
  • 打赏
  • 举报
回复
大师,编译时检查调用方法传参类型通过,那么运行时就直接传参(不用再检查参数类型是吧),至于后面运行方法发现有操作、运算之类错就肯定要检测出来(即运行时检查),大师给个答复,要是这样,我就结帖了。
soton_dolphin 2017-07-07
  • 打赏
  • 举报
回复
编译时检查的是checked exception和语法错误,运行时还要检查runtime exception
君梦无悔 2017-07-07
  • 打赏
  • 举报
回复
如果真是∵编译时检查了,运行时不用再检查,那运行肯定顺利进行下去。期待给个解答,真是这样吗?

62,626

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧