一:静态导入
语法:import static 导入类.成员变量|成员方法
那么在代码中可以直接使用变量或者方法,而不需要通过类名.来调用
静态导入:
1 import static java.lang.System.out;
那么在代码中直接调用变量:
1 @Test 2 //测试静态导入 3 public void testStaticImport() { 4 out.println("static import..."); 5 }
二:装箱或者拆箱
装箱:将基本数据类型赋值给引用数据类型
拆箱:将引用数据类型赋值给基本数据类型
1 @Test 2 public void testAutoBox() { 3 Integer i = 1; // 自动装箱 Integer i = new Integer(1); 4 int j = i; // 自动拆箱 int j = i.intValue(); 5 System.out.println(j); 6 List list = new ArrayList(); 7 list.add(1); // 这里的1在编译阶段会自动转换为Integer类型 8 System.out.println(list); 9 }
三:增强for循环
1:增强for循环可以遍历数组或者集合
1 @Test 2 // 测试增强for循环 3 public void testForEnhance() { 4 // 遍历数组 5 int[] arr = new int[] { 1, 2, 3 }; 6 for (int i : arr) { 7 System.out.println(i); 8 } 9 // 遍历集合 10 List<String> list = new ArrayList<String>(); 11 list.add("java"); 12 list.add("php"); 13 for (String s : list) { 14 System.out.println(s); 15 } 16 }
2:它只能查询不能修改数组或者集合中的内容,如果需要修改容器中的内容,还是要用传统的for循环。
1 @Test 2 // 测试增强for循环 3 public void testForEnhance() { 4 // 遍历数组 5 int[] arr = new int[] { 1, 2, 3 }; 6 for (int i : arr) { 7 i = 10; 8 } 9 System.out.println(Arrays.toString(arr)); 10 // 遍历集合 11 List<String> list = new ArrayList<String>(); 12 list.add("java"); 13 list.add("php"); 14 for (String s : list) { 15 s = "c++"; 16 } 17 System.out.println(list); 18 }
数组以及集合中的值并没有发生变化。
3:集合只有实现了Iterable,才能够使用增强for循环,因为for循环的底层还是迭代器
1 @Test 2 public void testIterator() { 3 List<String> list = new ArrayList<String>(); 4 list.add("java"); 5 list.add("php"); 6 // 使用迭代器 7 Iterator<String> it = list.iterator(); 8 while (it.hasNext()) { 9 String str = it.next(); 10 System.out.println(str); 11 } 12 // 使用for循环 13 for (String str : list) { 14 System.out.println(str); 15 } 16 }
4:使用for循环遍历set集合,但是不能遍历map集合,因为map集合没有实现Iterator接口
但是我们可以将map集合转化为set集合
遍历set集合:
1 @Test 2 public void testIteratorSet() { 3 Set<String> set = new HashSet<String>(); 4 set.add("1"); 5 set.add("2"); 6 // 迭代器遍历 7 Iterator<String> it = set.iterator(); 8 while (it.hasNext()) { 9 String str = it.next(); 10 System.out.println(str); 11 } 12 // for循环遍历 13 for (String str : set) { 14 System.out.println(str); 15 } 16 }
遍历map集合:
a:keyset的方式
1 @Test 2 public void testIteratorMap() { 3 Map<Integer, String> map = new HashMap<Integer, String>(); 4 map.put(1, "orange"); 5 map.put(2, "apple"); 6 map.put(3, "banana"); 7 // 使用迭代器 8 Set<Integer> set = map.keySet(); 9 Iterator<Integer> it = set.iterator(); 10 while (it.hasNext()) { 11 Integer key = it.next(); 12 String value = map.get(key); 13 System.out.println(key + "=" + value); 14 } 15 System.out.println("..........."); 16 // 使用for循环 17 for (Integer i : map.keySet()) { 18 Integer key = i; 19 String value = map.get(key); 20 System.out.println(key + "=" + value); 21 } 22 }
b:entryset的方式
1 @Test 2 public void testIteratorMap2() { 3 Map<Integer, String> map = new HashMap<Integer, String>(); 4 map.put(1, "orange"); 5 map.put(2, "apple"); 6 map.put(3, "banana"); 7 // 使用迭代器 8 Set<Entry<Integer, String>> set = map.entrySet(); 9 for (Entry<Integer, String> en : set) { 10 Integer key = en.getKey(); 11 String value = en.getValue(); 12 System.out.println(key + "=" + value); 13 } 14 System.out.println("................"); 15 // 使用增强for循环 16 for (Entry<Integer, String> en : map.entrySet()) { 17 Integer key = en.getKey(); 18 String value = en.getValue(); 19 System.out.println(key + "=" + value); 20 } 21 }
5:HashMap类底层的排序是hashcode,不是有序的,这时我们可以使用LinkedHashMap类
可以按照我们放入的顺序取出元素。
四:可变参数
方法名(类型 ...变量名称){
方法体;
}
1 @Test 2 public void testVariableArgs() { 3 int sum = getSum(1, 2, 3, 4); 4 System.out.println("sum=" + sum); 5 } 6 7 public int getSum(int... nums) { 8 int sum = 0; 9 for (int i : nums) { 10 sum += i; 11 } 12 return sum; 13 }
可变参数注意点:
我们可以把可变参数看做一个数组:
1 @Test 2 public void testVariableArgs2() { 3 int[] arr = new int[] { 1, 2, 3, 4 }; 4 System.out.println(getSum(arr)); 5 }
时间: 2024-10-11 04:28:52