集合框架拓展(增强for循环、可变参数、静态导入)

增强for循环——可变参数——静态导入

一、增强for循环

(1)JDK5增加的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举等。

(2)增强for循环:是for循环的一种。

(3)格式:

    ArrayList<String>list = new ArrayList<>();

     for(集合里面存储的数据类型     变量名      :  集合/数组变量名){

     }
    for(Stringstr : list){

    }

(4)增强for循环的特点:

    1).没有循环变量;一般用于不需要循环变量的循环操作;如果在循环中需要循环变量,还是使用普通for循环;

     2).可以遍历集合,数组;

     3).增强for循环底层就是使用的"迭代器"。因为仍然会产生并发修改异常;

(5)好处:简化了数组和集合的遍历。

(6)弊端: 增强for的目标不能为null。一旦为null,就会出现问题,那该如何解决呢?对增强for的目标先进行不为null的判断,然后再使用。

(7)代码演示

package com.caoguangli.Map;

/*
 * ArrayList存储字符串并遍历。要求加入泛型,并用增强for遍历。
 * A:迭代器
 * B:普通for
 * C:增强for
 */

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
	 
	public class ForDemo {
		public static void main(String[] args) {
			ArrayList<Students> array = new ArrayList<Students>(); 
			// 创建学生对象
			array.add(new Students("哈哈", 27));
			array.add(new Students("小黑", 22));
			array.add(new Students("小样", 24));
			array.add(new Students("ajsh", 21));
			array.add(new Students("小丑", 23));
			// 迭代器
			System.out.println("----迭代器--------");
			Iterator<Students> it = array.iterator();
			while (it.hasNext()) {
				Students s = it.next();
				System.out.println(s.getSname() + "---" + s.getSage());
			}
			System.out.println("-----普通for------");
			// 普通for
			for (int x = 0; x < array.size(); x++) {
				Students s = array.get(x);
				System.out.println(s.getSname()+ "---" + s.getSage());
			}
           System.out.println("---增强for----");
			// 增强for
			for (Students s : array) {
				System.out.println(s.getSname() + "---" + s.getSage());
			}
		}
	}		 
class Students {
	// 成员变量
	private String sname;
	private int sage;
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public int getSage() {
		return sage;
	}
	public void setSage(int sage) {
		this.sage = sage;
	}
	@Override
	public String toString() {
		return "Student [sname=" + sname + ", sage=" + sage + "]";
	}
	public Students(String sname, int sage) {
		super();
		this.sname = sname;
		this.sage = sage;
	}
	public Students() {
		super();
	}
}

结果如下:
在这里插入图片描述

二、静态导入

(1)格式: import static 包名….类名.方法名 ;可以直接导入到方法的级别。

(2)静态导入的注意事项:

    A:  方法必须是静态的
        例:
              import static java.lang.Math.abs;
              import static java.lang.Math.max;

    B:  如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。

(3)代码演示

package com.caoguangli.Map;

	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);
		}
	}
	

结果如下:
在这里插入图片描述

三、可变参数

1.定义一个方法,这个方法可以接收0-- 无限多的某类型实参。这种形参就是:可变参数;

2.格式:

    public int getMax(int ... nums){

    }

    注意:数据类型:可以是任何的Java类型(基本数据类型和引用数据类型);

3.调用getMax()方法时,可以传递:0 – 无限多;

    getMax();//不传参数可以。

    getMax(1432,432,43,25,432,432,43,25,325,2,432,4532);//传多个参数也可以;

4.注意:

    1).可变参数可以同其它形参共存,但可变参数一定要位于参数列表的末尾;

5.可变参数,在方法内部,是按照"数组"的方式工作的。

通过反编译后,我们也看出,可变形参也被编译为数组的形式;

6.因为可变参数就是数组的形式,所以不能跟数组的形参构成"重载"

7.代码演示如下:

package com.caoguangli.Map;

/*
 * 可变参数:定义方法的时候不知道该定义多少个参数。
 * 格式:
 * 		修饰符 返回值类型 方法名(数据类型…  变量名){
 * 
 * 		}
 * 		注意:
 * 			这里的变量其实是一个数组
 * 			如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个。
 */				
public class ArgsDemo {
	public static void main(String[] args) {
		
		System.out.println("----2个数据求和---");
		// 2个数据求和
		int a = 20;
		int b = 30;
		int result = sum(a, b);
		System.out.println("result:" + result);
 
		System.out.println("---3个数据的求和---");
		// 3个数据的求和
		int c = 10;
		result = sum(a, b, c);
		System.out.println("result:" + result);
 
		System.out.println("---4个数据的求和---");
		// 4个数据的求和
		int d = 50;
		result = sum(a, b, c, d);
		System.out.println("result:" + result);
 
		// 需求:写一个求和的功能,到底是几个数据求和呢,不太清楚,但是知道在调用的时候就知道了。
		// 为了解决这个问题,Java就提供了一个东西:可变参数!
		System.out.println("---5个数据的求和---");
		result = sum(a, b, c, d, 40);
		System.out.println("result:" + result);
 
		System.out.println("---6个数据的求和---");
		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;
	}
}

结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值