一、jdk5.0中的新特性:
1、静态导入;
2、自动装箱/拆箱;
3、增强for循环;
4、可变参数;
5、枚举、反射、内省;
6、泛型;
7、元数据;
二、详细说明
1、静态导入
import static 包名.类名.静态属性/静态方法/*;
eg:import java.Lang.System.out
out.println("hello word!!");
2、自动装箱/拆箱
自动装箱:开发人员可以把一个数据的基本类型直接赋给对应的包装类;
自动拆箱:可以把一个包装类对象直接赋给对应的基本数据类型;
eg:Integer i = 1; // 自动装箱
int j = i; //自动拆箱
eg:List list = new ArrayList();
list.add(1); //自动装箱 ,自动将基本数据类型int转为Integer
list.add(1); //自动装箱
Iterator it = list.iterator();
while(it.hasNext())
{
int k = (Integer)it.next(); //自动拆箱,将Integer转为int基本数据类型
}
3、增强的for循环
增强的for循环只能用在数组或者实现Iterator接口的集合类上。
(1)、操作数组
eg:int[] arr = {1,2,3};
for(int num : arr)
{
System.out.println(num);
}
(2)、操作集合
eg:List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
for(Object obj : list)
{
String str = (String)obj;
System.out.println(str);
}
(3)、虽然map并没有实现Iterator接口,但是也可以用增强的for循环来实现数据的查看
eg:i、普通方式
Map map = new hashMap();
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 entry = (Entry)it.next();
String key = entry.getJKey();
String value = entry.getValue();
}
ii、增强的for方式1
eg:for(Object obj : map.keySet())
{
String key = (String)obj;
String value = map.get(key);
}
iii、增强的for方式2
eg:for(Object obj : map.entrySet())
{
Map.Enery entry = (Entry)obj;
String key = entry.getKey();
String value = entry.getValue();
}
4、可变参数:传进去的是可变参数的类型
eg:public void testSum()
{
sum(1,2,3,4,5);
}
public void sun(int ...nums) //可变参数
{
int sum = 0;
for(int i : nums)
sum += i;
}
5、枚举、反射、内省;
(1)用枚举定义:
eg:enum Grade //类class
{
A,B,C,D,E; //类的实例对象
}
(2)、设计出来的枚举拥有构造函数、字段、方法去分装类的更多信息
eg:@test //采用Junit来测试写好的方法
public void test()
{
print(Grade.A)
}
public void print(Grade g)
{
String value= g.getValue();
System.out.println(value);
}
//枚举类
enum Grade
{
A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");
private String value;
//带参数的构造方法
private Grade(String value) //构造方法只能是私有的构造方法
{
this.value = value;
}
public String getValue()
{
return this.value();
}
}
(3)、带有抽象方法的枚举类
eg:@test //采用Junit来测试写好的方法
public void test()
{
print(Grade.A)
}
public void print(Grade g)
{
String value= g.getLocalValue();
System.out.println(value);
}
//枚举类
enum Grade
{
A("100-90")
{
public String getLocalValue()
{
return "优";
}
}
,B("89-80")
{
public String getLocalValue()
{
return "良";
}
}
,C("79-70")
{
public String getLocalValue()
{
return "中";
}
}
,D("69-60")
{
public String getLocalValue()
{
return "差";
}
}
,E("59-0");
{
public String getLocalValue()
{
return "不及格";
}
}
private String value;
//带参数的构造方法
private Grade(String value) //构造方法只能是私有的构造方法
{
this.value = value;
}
public String getValue()
{
return this.value();
}
public abstruct String getLocalValue();
}
(4)、枚举类的特性a)、枚举类是java的一种特殊类;
b)、枚举类中声明的每一个枚举值代表枚举类的一个实例对象;
c)、与java普通类一样,声明枚举是,也可以声明相应的属性、方法、构造函数,但是构造函数必须是私有的;
d)、switch中的类型也可以是enum
(5)、枚举常用的方法
name() ordinal() valueOf(......) values();
name(): Grade.C,name(); C
ordinal(): Grade,C,ordinal(); 2
valueOf(): String str = "B";
Grade g = Grade.valueOf(Grade, str); //将字符串转为枚举类 g = B;
values(): Grade[] g = Grade.values(); //得到枚举的所有值 A B C D E
待续写......
6、泛型;
7、元数据;