增强for循环
(1)是for循环的一种(2)格式:
for(元素的数据类型 变量名 : 数组或者Collection集合的对象) {
使用该变量即可,该变量其实就是数组或者集合中的元素。
}
(3)好处:
简化了数组和集合的遍历
(4)弊端
增强for循环的目标不能为null。建议在使用前,先判断是否为null。
import java.util.ArrayList; import java.util.List; /* * JDK5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举 * * 增强for:是for循环的一种。 * * 格式: * for(元素数据类型 变量 : 数组或者Collection集合) { * 使用变量即可,该变量就是元素 * } * * 好处:简化了数组和集合的遍历。 * * 弊端: 增强for的目标不能为null。 * 如何解决呢?对增强for的目标先进行不为null的判断,然后在使用。 */ public class ForDemo { public static void main(String[] args) { // 定义一个int数组 int[] arr = { 1, 2, 3, 4, 5 }; for (int x = 0; x < arr.length; x++) { System.out.println(arr[x]); } System.out.println("---------------"); // 增强for for (int x : arr) { System.out.println(x); } System.out.println("---------------"); // 定义一个字符串数组 String[] strArray = { "林青霞", "风清扬", "东方不败", "刘意" }; // 增强for for (String s : strArray) { System.out.println(s); } System.out.println("---------------"); // 定义一个集合 ArrayList<String> array = new ArrayList<String>(); array.add("hello"); array.add("world"); array.add("java"); // 增强for for (String s : array) { System.out.println(s); } System.out.println("---------------"); List<String> list = null; // NullPointerException // 这个s是我们从list里面获取出来的,在获取前,它肯定还好做一个判断 // 说白了,这就是迭代器的功能 if (list != null) { for (String s : list) { System.out.println(s); } } // 增强for其实是用来替代迭代器的 //ConcurrentModificationException // for (String s : array) { // if ("world".equals(s)) { // array.add("javaee"); // } // } // System.out.println("array:" + array); } }
import java.util.ArrayList; import java.util.Iterator; /* * ArrayList存储字符串并遍历。要求加入泛型,并用增强for遍历。 * A:迭代器 * B:普通for * C:增强for */ public class ArrayListDemo { public static void main(String[] args) { // 创建集合对象 ArrayList<String> array = new ArrayList<String>(); // 创建并添加元素 array.add("hello"); array.add("world"); array.add("java"); // 遍历集合 // 迭代器 Iterator<String> it = array.iterator(); while (it.hasNext()) { String s = it.next(); System.out.println(s); } System.out.println("------------------"); // 普通for for (int x = 0; x < array.size(); x++) { String s = array.get(x); System.out.println(s); } System.out.println("------------------"); // 增强for for (String s : array) { System.out.println(s); } } }
public class Student { // 成员变量 private String name; private int age; // 构造方法 public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } // 成员方法 // getXxx()/setXxx() public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
import java.util.ArrayList; import java.util.Iterator; /* * 需求:ArrayList存储自定义对象并遍历。要求加入泛型,并用增强for遍历。 * A:迭代器 * B:普通for * C:增强for * * LinkedList,Vector,Colleciton,List等存储我还讲吗?不讲解了,但是要求你们练习。 * * 增强for是用来替迭代器。 */ public class ArrayListDemo2 { public static void main(String[] args) { // 创建集合对象 ArrayList<Student> array = new ArrayList<Student>(); // 创建学生对象 Student s1 = new Student("林青霞", 27); Student s2 = new Student("貂蝉", 22); Student s3 = new Student("杨玉环", 24); Student s4 = new Student("西施", 21); Student s5 = new Student("王昭君", 23); // 把学生对象添加到集合中 array.add(s1); array.add(s2); array.add(s3); array.add(s4); array.add(s5); // 迭代器 Iterator<Student> it = array.iterator(); while (it.hasNext()) { Student s = it.next(); System.out.println(s.getName() + "---" + s.getAge()); } System.out.println("---------------"); // 普通for for (int x = 0; x < array.size(); x++) { Student s = array.get(x); System.out.println(s.getName() + "---" + s.getAge()); } System.out.println("---------------"); // 增强for for (Student s : array) { System.out.println(s.getName() + "---" + s.getAge()); } } }
静态导入
(1)可以导入到方法级别的导入(2)格式:
import static 包名....类名.方法名;
(3)注意事项:
A:方法必须是静态的
B:如果多个类下有同名的方法,就不好区分了,还得加上前缀。
所以一般我们并不使用静态导入,但是一定要能够看懂。
/* * 静态导入: * 格式:import static 包名….类名.方法名; * 可以直接导入到方法的级别 * * 静态导入的注意事项: * A:方法必须是静态的 * B:如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。 */ import static java.lang.Math.abs; import static java.lang.Math.pow; import static java.lang.Math.max; //错误 //import static java.util.ArrayList.add; public class StaticImportDemo { public static void main(String[] args) { // System.out.println(java.lang.Math.abs(-100)); // System.out.println(java.lang.Math.pow(2, 3)); // System.out.println(java.lang.Math.max(20, 30)); // 太复杂,我们就引入到import // System.out.println(Math.abs(-100)); // System.out.println(Math.pow(2, 3)); // System.out.println(Math.max(20, 30)); // 太复杂,有更简单 // System.out.println(abs(-100)); System.out.println(java.lang.Math.abs(-100)); System.out.println(pow(2, 3)); System.out.println(max(20, 30)); } public static void abs(String s){ System.out.println(s); } }
可变参数
(1)如果我们在写方法的时候,参数个数不明确,就应该定义可变参数。(2)格式:
修饰符 返回值类型 方法名(数据类型... 变量) {}
注意:
A:该变量其实是一个数组名
B:如果一个方法有多个参数,并且有可变参数,可变参数必须在最后
(3)Arrays工具类的一个方法
asList()把数组转成集合。
注意:这个集合的长度不能改变。
/* * 可变参数:定义方法的时候不知道该定义多少个参数 * 格式: * 修饰符 返回值类型 方法名(数据类型… 变量名){ * * } * * 注意: * 这里的变量其实是一个数组 * 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个 */ public class ArgsDemo { public static void main(String[] args) { // 2个数据求和 int a = 10; int b = 20; int result = sum(a, b); System.out.println("result:" + result); // 3个数据的求和 int c = 30; result = sum(a, b, c); System.out.println("result:" + result); // 4个数据的求和 int d = 30; result = sum(a, b, c, d); System.out.println("result:" + result); // 需求:我要写一个求和的功能,到底是几个数据求和呢,我不太清楚,但是我知道在调用的时候我肯定就知道了 // 为了解决这个问题,Java就提供了一个东西:可变参数 result = sum(a, b, c, d, 40); System.out.println("result:" + result); result = sum(a, b, c, d, 40, 50); System.out.println("result:" + result); } public static int sum(int... a) { // System.out.println(a); //return 0; int s = 0; for(int x : a){ s +=x; } return s; } // public static int sum(int a, int b, int c, int d) { // return a + b + c + d; // } // // public static int sum(int a, int b, int c) { // return a + b + c; // } // // public static int sum(int a, int b) { // return a + b; // } }
import java.util.Arrays; import java.util.List; /* * public static <T> List<T> asList(T... a):把数组转成集合 * * 注意事项: * 虽然可以把数组转成集合,但是集合的长度不能改变。 */ public class ArraysDemo { public static void main(String[] args) { // 定义一个数组 // String[] strArray = { "hello", "world", "java" }; // List<String> list = Arrays.asList(strArray); List<String> list = Arrays.asList("hello", "world", "java"); // UnsupportedOperationException // list.add("javaee"); // UnsupportedOperationException // list.remove(1); list.set(1, "javaee"); for (String s : list) { System.out.println(s); } } }