黑马程序员——JAVA学习笔记——Jdk5.0新特性

------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 = new ArrayList() ;

              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培训、期待与您交流! -------

你可能感兴趣的:(JAVA)