增强for循环
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
/*
JDK1.5之后出现的特性,
到目前为止,学过哪些特性是JDK1.5之后出现的:
泛型,增强for,包装类,Scanner,枚举
增强for概述
简化数组和Collection集合的遍历
格式:
for(元素数据类型 变量名(自定义) : 数组或者Collection集合) {
使用变量即可,该变量就是元素
}
好处:简化遍历
注意事项:增强for的目标要判断是否为null
把前面的集合代码的遍历用增强for改进
将来能用增强for的时候,就用,可以消除黄色警告线。
*/
public class ForDemo1 {
public static void main(String[] args) {
//定义一个数组
int[] arr = {1,2,3,4,5,6};
//普通for循环
// for(int i=0;i<arr.length;i++){
// System.out.println(arr[i]);
// }
//
System.out.println("使用增强for循环遍历:");
for(int x : arr){
System.out.println(x);
}
System.out.println("=================================");
ArrayList<String> strings = new ArrayList<>();
strings.add("hello");
strings.add("world");
strings.add("java");
strings.add("bigdata");
strings.add("hadoop");
for (String string : strings) {
System.out.println(string);
}
//假设我一不小心将null赋给了strings
// strings = null;
//NullPointerException--空指针异常
// for(String s : strings){
// System.out.println(s);
// }
//很可能我在遍历之前不知道strings是不是null
//所以我们在遍历之前需要判断一下strings是不是为null
if(strings!=null){
for (String s : strings){
System.out.println(s);
}
}
//增强for循环其实就是用来替代迭代器的
//怎么去验证呢?
//并发修改异常验证
// for(String s:strings){
// //ConcurrentModificationException--并发修改异常
// if("world".equals(s)){
// strings.add("spark");
// }
// }
//如果我想在遍历到"world"的时候在后面添加"spark"
//这时候就只能使用迭代器了
// ListIterator<String> iterator = strings.listIterator();
// while (iterator.hasNext()){
// String next = iterator.next();
// if("world".equals(next)){
// iterator.add("spark");
// }
// }
}
}
静态导入
//我也可以自己定义一个类
public class StaticClass {
public static void show(String s){
System.out.println("这是自己定义类中的show方法"+s);
}
public static String fun(){
return "你是一个大帅哥";
}
}
/*
静态导入:
静态导入概述
格式:import static 包名….类名.方法名;
可以直接导入到方法的级别
注意事项
方法必须是静态的
如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。
由此可见,意义不大,所以一般不用,但是要能看懂。
*/
//如果我静态导入的时候将方法名换成 * ,这时候我就可以使用Math类中的任意方法,而且都不用通过类名调用
import static java.lang.Math.abs;//--静态导入
import static com.shujia.wyh.day24.StaticClass.fun;//--静态导入自己定义的类的静态方法
import static com.shujia.wyh.day24.StaticClass.show;//--静态导入自己定义的类的静态方法
public class StaticImportDemo {
public static void main(String[] args) {
//Math.abs()--求绝对值
System.out.println(Math.abs(-100));
//Math.pow()--x的y次方
//例如:Math.pow(2, 3)--2的3次方
System.out.println(Math.pow(2, 3));
//Math.max()--求最大值
System.out.println(Math.max(200, 300));
//有没有什么办法,不用写类名,直接写方法名调用
//直接不写的话,不行,找不到方法
//System.out.println(abs(-100));
//这时候,静态导入的作用来了
//当我将abs()静态导入之后,我就可以不加类名直接调用
System.out.println(abs(-100));
//当我将静态导入的格式中的方法名换成 *
//这时候我就能使用Math类中的任意方法,而且都不用通过类名调用
//但是这样有个缺点,假设将来你需要将这个Java项目打成架包了,这时候
//会将Math类中的所有方法都拿过来,这样你的架包就会显得很臃肿。
//所以说建议将来需要用什么方法就导入什么方法。
// System.out.println(pow(2,5));
//我也可以自己定义一个类
//通过类名来调用类中静态的成员方法
// System.out.println(StaticClass.fun());
//还可以静态导入自己定义的类的静态方法
System.out.println(fun());
//当静态导入的方法名与本类中的方法名冲突了,
//调用的是本类中的方法
show("flink");
//如果我就想使用静态导入的方法怎么办?
//将前缀路径写完整
com.shujia.wyh.day24.StaticClass.show("flink");
//或者 类名.静态成员方法名
StaticClass.show("spark");
}
public static void show(String s) {
System.out.println("这是在当前类中的show方法" + s);
}
}