创建集合对象,使用泛型:
好处:1.避免了类型转换的麻烦,存储了什么类型,取出就是什么类型。
2.把运行期异常(代码运行之后抛出异常),提升到了编译期(写代码的时候会报错)。
坏处:泛型是什么类型,只能存储什么类型。
创建集合对象,不使用泛型:
好处:集合不使用泛型,会默认Object类型,可以存储任意类型的数据
坏处:不安全,会引发异常
package demo02;
import java.util.ArrayList;
import java.util.Iterator;
public class Element {
public static void main(String[] args) {
//demo01();
demo02();
}
/*
创建集合对象,不使用泛型:
好处:集合不使用泛型,会默认Object类型,可以存储任意类型的数据
坏处:不安全,会引发异常
*/
public static void demo01(){
ArrayList list = new ArrayList();
list.add("kobe");
list.add(81);
//使用集合自带的迭代器类,先获取迭代器
Iterator it = list.iterator();
while(it.hasNext()){
Object obj = it.next();//此处是多态
//要打印obj而不能直接打印it.next(); 因为 81 是int型,不能直接当做字符串打印,即obj可以看做81的变量名
System.out.println(obj);
//System.out.println(obj.length()); 需要向下转型,否则无法调用String的成员函数
String s = (String) obj;//向下强转
System.out.println(s.length()); //也可写成匿名形式:((String) obj).length()
//最终会跑出 ClassCastException 类型显示异常 因为Integer不能转换成String类型
}
}
/*
创建集合对象,使用泛型:
好处:1.避免了类型转换的麻烦,存储了什么类型,取出就是什么类型。
2.把运行期异常(代码运行之后抛出异常),提升到了编译期(写代码的时候会报错)。
坏处:泛型是什么类型,只能存储什么类型。
*/
public static void demo02(){
ArrayList<String> list = new ArrayList<>();
list.add("kobe");
list.add("kobe1");
list.add("kobe2");
Iterator<String> it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
}
/*
* if(obj instanceof String){
String s1 = (String) obj;
System.out.println(s1.length());
}
if(obj instanceof Integer){
Integer in = (Integer) obj;
String s2 = in.toString();
System.out.println(s2.length());
}
* */