黑马程序员--张孝祥Java高新技术-JDK1.5新特性(一)【静态导入、可变参数、增强for循环】

时间:2022-11-28 19:41:16

---Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ---

一 常用名词:

1.Java EE(Java Platform,Enterprise Edition)是sun公司推出的企业级应用程序版本。

2.IDE(Integrated Development Environment)。集成开发环境

3.jms即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

4. JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。

5. JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。

二静态导入:

静态导入可以导入静态方法,这样就不必写类名而可以直接省略类名调用静态方法了。
语法:import static 包名.类名.静态方法;
也可以直接导入某个类中的所以静态方法。
语法:import static 包名.类名.*;

代码体现:

package com.itheima.day1;

import static java.lang.Math.*;//静态导入

public class StaticImport {

public static void main(String[] args) {

//求两个数之间的最大值

System.out.println(max(3,6));

//求两个数之间的绝对值

System.out.println(abs(3 - 6));

}

}<span style="color:#cc0000;">
</span>

好处:
使用静态导入可以简化程序对类静态属性和方法的调用,并且简化了程序代码的书写。
弊端:
虽然JDK中出现了这个新特性,但是如果我们在自己的类中定义 了一个方法,与导入的类中的静态方法一样。
那Java虚拟机怎么知道用的是那个类的方法呢?所以虽然出现了这个新特性,但是建议还是别使用。

三 可变参数

问题:一个方法接受的参数个数不固定,例如:
System.out.println(countScore(2,3,5));
System.out.println(countScore(1,2,3,5));  
如果使用重载的方式解决需要写多个重载的方法,而使用可变参数就可以避免这种情况。 

可变参数的原理:
调用可变参数的方法时, 编译器将自动创建一个数组保存传递给方法的可变参数。
因此,程序员可以在方法体中以数组的形式访问可变参数可变参数只能处于参数列表的最后。
所以一个方法最多只能有一个可变参数。

可变参数特点与注意事项:
1、可变参数只能出现在参数列表的最后。
2、可变参数只能在参数中只能有一个。
3、可变参数位于变量类型和变量名之间,前后有无空格都可以。
4、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

代码体现:

package com.itheima.day1;

public class VarableParameties {

public static void main(String[] args) {

System.out.println(add(2,3));

System.out.println(add(4,6,7));

System.out.println(add(23,45,67,76,100));

}

public static int add(int x,int...args){

int sum =0;

//调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,

//在方法体中以数组的形式访问可变参数.

for(int i =0;i<args.length;i++){

sum+=args[i];

}

return sum;

}

}<span style="color:#990000;">
</span>


四 增强for循环

引入增强for循环的原因:
在JDK 1.5 以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!
因此JDK 1.5 中定义了一种新的语法——增强for循环,以简化此类操作。

语法格式:
for(修饰符 变量类型 变量  :需迭代的数组或集合){}

代码体现:

package com.itheimaday17;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/*

高级for循环:

格式:

for(数据类型 变量名:被遍历的集合(Collection)或者数组){


}

对集合遍历。

只能获取元素,但是不能对集合进行操作。

迭代器除了遍历。还可以进行remove集合中元素的动作。

如果使用 Iterator, 还可以在遍历的过程中对集合进行增除改查;

传统for和高级for有什么区别?

高级for有一个局限性。必须有被遍历的目标。

建议在遍历数组的时候,还是希望使用传统for.因为可以定义角标。(因为数组的操作大部分是对角标的操作)



*/

public class ForEachDemo_06 {

public static void main(String[] args) {

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

list.add("黑马程序员001");

list.add("黑马程序员002");

list.add("黑马程序员008");

list.add("黑马程序员004");

Iterator<String> it = list.iterator();

// 数据类型 变量名:被遍历的集合(Collection)或者数组

for (String s : list) {// 1.5版本出现 简化书写 爽!!!

s = "kkk";// 改变不了集合中的元素。不能作操作。

// prt(s);

}
//prt(list);

/*
* while (it.hasNext()) {
*
* String str = it.next();
*
* prt(str);
*
* }
*/
int[] arr = { 3, 5, 8 };

for (int i : arr) {

//prt(i);

}


HashMap<Integer, String> map = new HashMap<Integer,String>();

map.put(1, "dfds");

map.put(5, "sdds");

map.put(2, "dfds");

map.put(6, "fdsp");

map.put(8, "nihao");


/*Set<Integer> keySet = map.keySet();

for( Integer i:keySet)

prt(i+map.get(i));*/


Set<Map.Entry<Integer, String>> etry =map.entrySet();

for(Map.Entry<Integer, String> me:etry){


Integer key = me.getKey();

String value = me.getValue();

prt(key+","+value);

}


}

public static void prt(Object obj) {

System.out.println(obj);

}
}

注意事项:
迭代变量必须在( )中定义!
集合变量可以是数组或实现了Iterable接口的集合类。
小细节:向集合中取元素时同时加元素,需要使用迭代器来完成,即需要传统的for循环。