------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Jdk5.0新特性:
1、JAVA新特性对数组的支持
1.1 可变参数:
以往:调用一个方法时,必须根据方法的定义传递指定的参数
新特性:方法中可以接收的参数不再固定,可以随意。
定义格式:
返回值类型 方法名称(类型…参数名称){}
注意:此时向方法中传递可变参数后,其中的参数是以数组的形式保存下来的。
样板代码:
public class Test{
public static void main(String args[]){
System.out.print("不传递参数(fun()):") ;
fun() ; // 不传递参数
System.out.print("\n传递一个参数(fun(1)):") ;
fun(1) ; // 传递一个参数
System.out.print("\n传递五个参数(fun(1,2,3,4,5)):") ;
fun(1,2,3,4,5) ;
}
public static void fun(int ... arg){ // 可变参数
for(int i=0;i
System.out.print(arg[i] + "、") ;
}
}
};
当然,在使用可变参数时候,也可以直接向方法中传递一个数组,如:
int temp[]={1,3,5,7}
fun(temp);
或者 fun(new int[]{1,3,5,7})
1.2 foreach 输出
以往:数组的输出一般会使用for循环。
新特性:使用foreach语法
语法定义:
for(数据类型变量名称:数组名称){}
样板代码:
public class Test{
public static void main(String args[]){
System.out.print("不传递参数(fun()):") ;
fun() ; // 不传递参数
System.out.print("\n传递一个参数(fun(1)):") ;
fun(1) ; // 传递一个参数
System.out.print("\n传递五个参数(fun(1,2,3,4,5)):") ;
fun(1,2,3,4,5) ;
}
public static void fun(int ... arg){ // 可变参数
for(int i:arg){ // 循环输出
System.out.print(i + "、") ;
}
}
};
2、Java新特性------静态导入
如果一个类中的方法全部是使用static声明的静态方法,则在导入时就可以直接使用 import static 的方式导入。
倒入格式:
import static 包.类;
样板代码:
package org.lzz.heima ;
public class Operate{ // 里面的方法全部都是static类型
public static int add(int i,int j) { // 加法操作
return i + j ;
}
public static int sub(int i,int j) { // 减法操作
return i - j ;
}
public static int mul(int i,int j) { // 乘法操作
return i * j ;
}
public static int div(int i,int j) { // 除法操作
return i / j ;
}
};
import static org.lzz.heima.Operate.* ; // 静态导入
public class StaticImportDemo{
public static void main(String args[]){
System.out.println("3 + 3 = " + add(3,3)) ; // 直接调用静态方法
System.out.println("3 - 2 = " + sub(3,2)) ; // 直接调用静态方法
System.out.println("3 * 3 = " + mul(3,3)) ; // 直接调用静态方法
System.out.println("3 / 3 = " + div(3,3)) ; // 直接调用静态方法
}
};
3、foreach 对集合的支持
定义格式:
for(类对象:集合){集合操作}
样板代码:
import java.util.ArrayList;
import java.util.List;
public class Test{
public static void main(String args[]){
List
all.add("hello") ;
all.add("_") ;
all.add("world") ;
for(String str:all){
System.out.print(str + "、") ;
}
}
};
4、总结for与增强for
增强for循环:
foreach语句,foreach简化了迭代器。
格式:// 增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器
for( 元素类型 变量名 : Collection集合 & 数组 ) { „}
高级for循环和传统for循环的区别:
高级for循环在使用时,必须要明确被遍历的目标。这个目标,可以是Collection集合或者数组,如果遍历Collection集合,在遍历过程中还需要对元素进行操作,比如删除,
需要使用迭代器。
如果遍历数组,还需要对数组元素进行操作,建议用传统for循环因为可以定义角标通过角标操作元素。如果只为遍历获取,可以简化成高级for循环,它的出现为了简化书写。
高级for循环可以遍历map集合吗?不可以。但是可以将map转成set后再使用foreach语句。
1)、作用:对存储对象的容器进行迭代: 数组 collection map
2)、增强for循环迭代数组:
String [] arr = {"a", "b", "c"};//数组的静态定义方式,只试用于数组首次定义的时候
for(String s : arr) {
System.out.println(s);
}
3)、单列集合 Collection:
List list = new ArrayList();
list.add("aaa");
// 增强for循环, 没有使用泛型的集合能不能使用增强for循环迭代?能
for(Object obj : list) {
String s = (String) obj;
System.out.println(s);
}
4)、双列集合 Map:
Map map = new HashMap();
map.put("a", "aaa");
// 传统方式:必须掌握这种方式
Set entrys = map.entrySet(); // 1.获得所有的键值对Entry对象
iter = entrys.iterator(); // 2.迭代出所有的
entry while(iter.hasNext()) {
Map.Entry entry = (Entry) iter.next();
String key = (String) entry.getKey(); // 分别获得key和value
String value = (String) entry.getValue();
System.out.println(key + "=" + value);
}
// 增强for循环迭代:原则上map集合是无法使用增强for循环来迭代的,因为增强for循环只能针对实现了Iterable接口的集合进行迭代;Iterable是jdk5中新定义的接口,就一个方法iterator方法,只有实现了Iterable接口的类,才能保证一定有iterator方法,java有这样的限定是因为增强for循环内部还是用迭代器实现的,而实际上,我们可以通过某种方式来使用增强for循环。
for(Object obj : map.entrySet()) {
Map.Entry entry = (Entry) obj; // obj 依次表示Entry
System.out.println(entry.getKey() + "=" + entry.getValue());
}
5、集合迭代注意问题:在迭代集合的过程中,不能对集合进行增删操作(会报并发访问异常);可以用迭代器的方法进行操作(子类listIterator:有增删的方法)。
6)、增强for循环注意问题:在使用增强for循环时,不能对元素进行赋值;
int[] arr = {1,2,3};
for(int num : arr) {
num = 0; //不能改变数组的值 }
System.out.println(arr[1]);
--------------------------------------------------
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------