java 增强for源码,Java_乔晓松_Java SE 加强-静态导入_自动装拆箱_增强for循环_枚举...

JDK5.0增加了一些特性简单了开发

1.静态导入

2.自动装包/拆包

3.For-each循环

4.可变参数

5.枚举

6.泛型

7.元数据

使用这些特性有助于编写更加清晰,精悍,安全的代码

静态导入

JDK 1.5 增加的静态导入语法用于导入指定类的某个静态属性值(方法)或全部静态属性值(方法)

语法:

Import static 包名.类名.静态属性|静态方法|*

    静态导入语句使用 import static 语句

导入指定类的单个静态属性:

import static java.lang.System.out

导入指定类静态方法

import static java.lang.Math.max

导入指定类全部静态属性和方法

import static java.lang.Math.*

自动装箱/拆箱

自动装箱(autoboxing):把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 变量

自动拆箱:把包装类对象直接赋给一个对应的基本类型变量

增强for循环

引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!

因此JDK5中定义了一种新的语法——增强for循环,以简化此类操作。增强for循环只能用在数组、或实现Iterator接口的集合类上

使用 foreach 循环遍历数组和集合元素时, 无须获得数组和集合长度, 无须根据索引来访问数组元素和集合元素, foreach 循环自动遍历数组和集合的每个元素

语法格式:

for ( type 变量名:集合变量名 )  { … }

for(type varName : array | collection){

//varName 自动迭代访问每一个元素

}

package com.hbsi;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.Set;

public class Demo {

/**

* @param args

*/

public static void main(String[] args) {

Demo d=new Demo();

d.Test3();

}

/*public void Test1(){

Map map=new LinkedHashMap();

map.put(1, "aaa");

map.put(2, "bbb");

map.put(3, "ccc");

Set set=map.entrySet();

Iterator it=set.iterator();

while(it.hasNext()){

Map.Entry me=(Map.Entry)it.next();

System.out.println(me.getKey()+"="+me.getValue());

}

}

public void Test2(){

Map map=new LinkedHashMap();

map.put(1, "aaa");

map.put(2, "bbb");

map.put(3, "ccc");

Set set=map.entrySet();

for(Object obj:map.entrySet()){

Map.Entry me=(Map.Entry)obj;

System.out.println(me.getKey()+"="+me.getValue());

}

}*/

public void Test3(){

Map map=new LinkedHashMap();

map.put("1", "aaa");

map.put("2", "bbb");

map.put("3", "ccc");

Set set=map.keySet();

Iterator it=set.iterator();

while(it.hasNext()){

String key=(String) it.next();

String value=(String) map.get(key);

System.out.println(key+"="+value);

}

}

}

可变参数

1.从 JDK 1.5 开始, Java 允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参

2.若在定义方法时, 在最后一个形参的类型后增加三点(…, ...位于变量类型和变量名之间,前后有无空格都可以)则表明该形参可以接受多个参数值, 多个参数值被当成数组传入

3.可变形参只能处于形参列表的最后, 所以一个方法最多只能有一个长度可变的形参

4.调用包含一个可变形参的方法时, 可以为该形参传入多个参数或一个数组

5.调用可变参数的方法时, 编译器为该可变参数隐含创建一个数组, 在方法体中以数组的形式访问可变参数

枚举类

手动实现枚举类:

通过 private 将构造器隐藏起来

把这个类的所有可能实例都使用public static final 修饰

属性不应允许被改动, 所以应该使用 private final 修饰

枚举类入门

上面写法比较麻烦,java中提供了一种更方便的方法----枚举类可以解决上面的问题

JDK 1.5 新增的 enum 关键字用于定义枚举类

枚举类也是一种特殊形式的Java类。

枚举类和普通类的区别:

使用 enum 定义的枚举类默认继承了 java.lang.Enum 类

枚举类的构造器只能使用private 访问控制符

枚举类的所有实例必须在枚举类中显式列出(, 分隔    ; 结尾). 列出的实例系统会自动添加public static final 修饰

JDK5中扩展了switch语句,它除了可以接收int,byte, char, short外,还可以接收一个枚举类型

若枚举只有一个成员, 则可以作为一种单例模式的实现方式

枚举类的属性

枚举类对象的属性不应允许被改动, 所以应该使用 privatefinal 修饰

枚举类的使用 privatefinal 修饰的属性应该在构造器中为其赋值

若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数

枚举类常用的方法

Java中声明的枚举类,均是java.lang.Enum类的子类,它继承了Enum类的所有方法。常用方法:

name():返回此枚举常量的名称,在其枚举声明中对其进行声明

ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

valueof(Class enumClass, String name):返回带指定名称的指定枚举类型的枚举常量。 静态方法

values() 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。

举例:

package com.hbsi;

public class Week {

/**

* @param args

*/

public static void main(String[] args) {

System.out.println(WeekDay.Mon.getValue()+"-----"+WeekDay.Mon.toWeekDay());

}

}

enum WeekDay{

Mon("Monday") {

@Override

public String toWeekDay() {

return "星期一";

}

},

Tue("Tuesday") {

@Override

public String toWeekDay() {

return "星期二";

}

},

Wed("Wednesday") {

@Override

public String toWeekDay() {

return "星期三";

}

},

The("Thursday") {

@Override

public String toWeekDay() {

return "星期四";

}

},

Fri("Friday") {

@Override

public String toWeekDay() {

return "星期五";

}

},

Sat("Saturday") {

@Override

public String toWeekDay() {

return "星期六";

}

},

Sun("Sunday") {

@Override

public String toWeekDay() {

return "星期日";

}

};

private WeekDay(String value){

this.value=value;

}

private String value;

public String getValue() {

return value;

}

public abstract String toWeekDay();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值