Java学习笔记124——集合—增强for循环、静态导入

增强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);
    }
}
上一篇:在web中显示客户端IP信息


下一篇:Java String类