黑马程序员--JDK1.5 新特性总结

两个逻辑还都算通哈~ 第一个好些?

4 :增强for
猪:注解
没:枚举
饭:泛型
竟:静态导入
装:装箱拆箱
渴(惨):可变参数


本次介绍 枚举,静态导入,增强for,装箱拆箱,可变参数


一、装箱拆箱
Integer iobj=3;

jdk1.5之前上面这条语句是会报错的,那时定义是这样的 Integer iobj=new Integer(3);

现在可以直接这样了。Integer iobj=3;这就是装箱的过程

现在引入网上搜到的一条定义:

装箱:就是把原始类型用他们对应的引用类型包装起来。使他们具有引用的特性。

拆箱:就是把引用类型的数据简化成原始类型的数据

下面这个就是拆箱的过程

Integer []aint={1,2,4,5,6};
int sum=0;
for(int i=0;i<aint.length;i++)
{
sum+=aint[i];
}
System.out.println(sum);

这些动作都是自动的。

Integer有一个特点如下:

Integer i1=13;//-128~127 在一个字节之内的Integer 会使用同一片内存 超过这一范围,就使用不同的内存了
Integer i2=13;
Integer i3=137;
Integer i4=137;

System.out.println("i1=i2?:"+(i1==i2));
System.out.println("i3=i4?:"+(i3==i4));

结果:
i1=i2?:true
i3=i4?:false

i1和i2是相同,i3和i4却不相同。这也是自动装箱一个特点。其实在一个字节(也就是-128~127)之内的Integer 会使用同一片内存 超过这一范围,就使用不同的内存了
据老师所说,这个是OO中的享元模式,因为较小的数使用频率较高,就没必要再定义一片内存了。但是这只是针对装箱的哦,Integer i1=new Integer(13);就不一样了,不管数字大小,都是两片内存了哦!


二、增强for循环
个人十分喜欢此功能。有的时候比迭代器简单多了。

String [] arr=new String[]{"zhang","li","wang","sun"};

for(String s:arr)

{

System.out.println(s);

}

但此方法也有限定,不能取原始类型的数组。但可以取他们对应的封装类型。

以下是语法

for(集合的元素类型:集合)

三、静态导入
比如我们常写的一个System.out.println这条语句 每次都要写好多呢吧。现在可以这样

import static java.lang.System.out;

out.println("aa");

out.println("bb");

import static java.lang.Math.max;

System.out.println(Math.max(13, 54));
System.out.println(Math.abs(3 - 6));
System.out.println(max(23, 34));//这条使用了静态导入

四、可变参数
可变参数的应用还是比较多的,看了很多jdk文档会发现有很多方法都添加了可变参数。

函数中的最后一个参数可以定义为可变参数。可以不固定长的参数。其底层实现原理其实是数组参数。因为jdk1.5之前想实现可变参数是要传入一个数组的

public static int add(int x,int ... args)
{
int sum=0;
sum+=x;
for (int i = 0; i < args.length; i++) {
sum+=args[i];

}
return sum;
}

public static void main(String[] args) {
System.out.println(add(4,5));
System.out.println(add(4,5,43,3));
System.out.println(add(4,5,43,3,34));
System.out.println(add(4,5,43,3,34,15));
}

可变参数注意事项:

可变参数只能是最后一个参数。

比如:public static int add(int ... args,int x)

上面这个函数会引起歧义,我如果传5个参数,编译器会以为这5个参数都是可变参数。

五、枚举类
如下代码

枚举类是一个特殊的类,先看一个小的枚举类

public enum Day

{

Mon,Tue,Wed,Tru,Fri,Sat,Sun;

}

这就是一个简单的枚举类,该类定义的时候就确定了固定的对象,该类可以有构造方法,对象可以传入构造参数,由于构造函数必须是私有的,所以枚举如果只有一个成员时,就可以作为一种单例的实现方式。调用类中的对象是 类名.对象 调用的如: Day.Sun;Day.Wed;等等

下面介绍一个交通灯的枚举类

public enum TrafficLamp{

RED(30)
{

public TrafficLamp nextLamp() {
return GREEN;
}

}
,GREEN(45){

public TrafficLamp nextLamp() {
return YELLOW;
}

}
,YELLOW(5){

public TrafficLamp nextLamp() {
return RED;
}

}
;
private int time;
private TrafficLamp(int time)
{
this.time=time;
}
public abstract TrafficLamp nextLamp();

}

public static void main(String[] args) {
WeekDay weekDay=WeekDay.Mon;

System.out.println(weekDay.nextDay());

WeekDay1 day=WeekDay1.Fri;
System.out.println(day);
System.out.println(day.ordinal());

System.out.println(day.name());
System.out.println(day.toString());

System.out.println(WeekDay1.valueOf("Sun"));//把String类型转成WeekDay对象
System.out.println(WeekDay1.values());//返回数组~ 可以进一步操作

TrafficLamp ta=TrafficLamp.RED;
System.out.println(ta.nextLamp());
System.out.println(ta.time);
System.out.println(ta.nextLamp().time);


}

该类中的定义的一个抽象方法,每个对象都是用匿名类来实现的。该类的一个构造方法说明每个灯亮的时间。



---------------------- android培训、java培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值