第2章 增強for&泛型
阿新 • • 發佈:2018-04-10
Java1.1 泛型1.1.1 泛型的引入
在前面學習集合時,我們都知道集合中是可以存放任意對象的,只要把對象存儲集合後,那麽這時他們都會被提升成Object類型。當我們在取出每一個對象,並且進行相應的操作,這時必須采用類型轉換
在前面學習集合時,我們都知道集合中是可以存放任意對象的,只要把對象存儲集合後,那麽這時他們都會被提升成Object類型。當我們在取出每一個對象,並且進行相應的操作,這時必須采用類型轉換
1.1.1.1 案例代碼五:
package com.itheima_03; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /* * 使用集合存儲自定義對象並遍歷 * 由於集合可以存儲任意類型的對象,當我們存儲了不同類型的對象,就有可能在轉換的時候出現類型轉換異常, * 所以java為了解決這個問題,給我們提供了一種機制,叫做泛型 * * */ public class GenericDemo { public static void main(String[] args) { //創建集合對象 Collection c = new ArrayList(); //創建元素對象 Student s = new Student("zhangsan",18); Student s2 = new Student("lisi",19); //添加元素對象 c.add(s); c.add(s2); //遍歷集合對象 Iterator it = c.iterator(); while(it.hasNext()) { String str = (String)it.next(); System.out.println(str); } } } class Student { String name; int age; public Student(String name,int age) { this.name = name; this.age = age; } } 以上代碼會發生強制轉換異常,原因就是String str = (String)it.next() ,存入集合的是Student,而強轉為String,String與Student之間沒有任何子父關系不能強轉,未使用泛型前有可能發聲強制轉換異常的問題 1.1.2 泛型的使用 當類上定義<>的時候就可以使用泛型,例如ArrayList類的定義: class ArrayList<E>,那麽我們在創建ArrayList對象的時候就可以指定<>中E的類型 ArrayList<String> al=new ArrayList<String>(),那麽String就把E替換掉了 1.1.2.1 案例代碼六: package com.itheima_03; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /* * 使用集合存儲自定義對象並遍歷 * 由於集合可以存儲任意類型的對象,當我們存儲了不同類型的對象,就有可能在轉換的時候出現類型轉換異常, * 所以java為了解決這個問題,給我們提供了一種機制,叫做泛型 * * 泛型:是一種廣泛的類型,把明確數據類型的工作提前到了編譯時期,借鑒了數組的特點 * 泛型好處: * 避免了類型轉換的問題 * 可以減少×××警告線 * 可以簡化我們代碼的書寫 * * 什麽時候可以使用泛型? * 問API,當我們看到<E>,就可以使用泛型了 * */ public class GenericDemo { public static void main(String[] args) { //創建集合對象 Collection<Student> c = new ArrayList<Student>(); //創建元素對象 Student s = new Student("zhangsan",18); Student s2 = new Student("lisi",19); //添加元素對象 c.add(s); c.add(s2); //遍歷集合對象 Iterator<Student> it = c.iterator(); while(it.hasNext()) { //String str = (String)it.next(); //System.out.println(str); Student stu = it.next(); System.out.println(stu.name); } } } class Student { String name; int age; public Student(String name,int age) { this.name = name; this.age = age; } }
1.2 增強for
增強for循環是JDK1.5以後出來的一個高級for循環,專門用來遍歷數組和集合的。它的內部原理其實是個Iterator叠代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。
格式:
[AppleScript] 純文本查看 復制代碼
?
1
2
for(元素的數據類型 變量 : Collection集合or數組){
}
它用於遍歷Collection和數組。通常只進行遍歷元素,不要在遍歷的過程中對集合元素進行增刪操作。
1.2.1 案例代碼七:
package com.itheima_04; import java.util.ArrayList; import java.util.Collection; /* * foreach:增強for循環,一般用於遍歷集合或者數組 * 格式: * for(元素的類型 變量 : 集合或者數組對象) { * 可以直接使用變量; * } 註意:在增強for循環中不能修改集合,否則會出現並發修改異常。 public interface Iterable<T> 實現這個接口允許對象成為 "foreach" 語句的目標。 */ public class ForEachDemo { public static void main(String[] args) { //創建集合對象 Collection<String> c = new ArrayList<String>(); //添加元素 c.add("hello"); c.add("world"); c.add("java"); //增強for循環遍歷集合 /*for(Object obj : c) { System.out.println(obj); }*/ /*for(String s : c) { System.out.println(s.toUpperCase()); }*/ for (String string : c) { c.add("android"); System.out.println(string); } } }
第2章 增強for&泛型