增强for循环——可变参数——静态导入——asList方法
1、增强for循环
(1)JDK5增加的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举等。
(2)增强for循环:是for循环的一种。
(3)格式:
for(元素数据类型 变量 : 数组或者Collection集合) {
使用变量即可,该变量就是元素。
}
1)好处:简化了数组和集合的遍历。
2)弊端: 增强for的目标不能为null。一旦为null,就会出现问题,那该如何解决呢?对增强for的目标先进行不为null的判断,然后再使用。
(4)代码演示
package cn.itcast_01;
import java.util.ArrayList;
import java.util.List;
public class ForDemo {
public static void main(String[] args) {
// 定义一个int数组
int[] arr = { 1, 2, 3, 4, 5 };
// 普通for循环
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);
}
}
2、增强for循环的举例
见博客:https://blog.csdn.net/cmm0401/article/details/80050856
3、静态导入
(1)格式: import static 包名….类名.方法名 ;
可以直接导入到方法的级别。
(2)静态导入的注意事项:
A: 方法必须是静态的
B: 如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。
(3)代码演示
import static java.lang.Math.abs;
import static java.lang.Math.pow;
import static java.lang.Math.max;
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);
}
}
4、方法的可变参数
(1)可变参数:定义方法的时候不知道该定义多少个参数。
(2)格式:
修饰符 返回值类型 方法名(数据类型… 变量名) {
}
(3)注意:这里的变量名其实是一个数组。如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个。
(4)代码演示
package cn.itcast_03;
/*
* 可变参数:定义方法的时候不知道该定义多少个参数。
* 格式:
* 修饰符 返回值类型 方法名(数据类型… 变量名){
*
* }
* 注意:
* 这里的变量其实是一个数组
* 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个。
*/
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);
int s = 0;
for(int x : a){
s +=x;
}
return s;
}
}
5、Arrays工具类中的一个方法asList
(1)asList方法:
public static <T> List<T> asList(T... a):把数组转成集合。 (把集合转为数组:toArray( )方法)
(2)注意事项:虽然可以把数组转成集合,但是集合的长度不能改变。因为从其本质上来说还是数组,而数组的长度不能改变,但是数组的内容可以改变。
(3)代码演示
package cn.itcast_03;
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"); //这里面的String类型的元素的个数可以随意变化。
// UnsupportedOperationException //不支持的操作:添加元素
// list.add("javaee");
// UnsupportedOperationException //不支持的操作:删除元素
// list.remove(1);
list.set(1, "javaee"); //支持的操作:修改元素内容
for (String s : list) {
System.out.println(s);
}
}
}