您的位置:首页 > 职场人生

黑马程序员_高新技术一(高级for,静态导入,可变参数,自动装箱拆箱,枚举)

2013-05-31 08:19 706 查看
--------- android培训java培训、期待与您交流!---------

一.java5的静态导入

1.import与import static语句的区别:

import语句可以导入一个类或某个包中的所有类

import static 语句导入一个类中的某个静态方法或所有静态方法。

例:

import java.lang.* 一般的是导入一个包中的类。

import static java.lang.Math. max; 导入Math类中的max静态方法。

import static java.lang.Math.*; 导入Math类中的所有静态方法。

二.可变参数Varibleparameter

1.可变参数

1)问题:一个方法接受的参数个数不固定,例如:

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

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

2)可变参数的特点:

<1>只能出现在参数列表的最后;

<2>...位于变量类型和变量名之间,前后有无空格都可以;

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

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

三.java5的增强for循环

1.增强for循环

1)语法:for(type 变量名:集合变量名){...}

2)注意事项:

迭代变量必须在()中定义!

集合变量可以是数组或实现了Iterable接口的集合类。

3)举例:

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

{

int sum = x;

for(int arg : args)

{

sum += arg;

}

return sum;

}

四基本数据的自动拆装箱及享元设计模式

1.基本数据类型的自动拆箱与装箱

1)自动装箱:

Integer num1 = 12;

2)自动拆箱:

System.out.println(num1 + 12);

3)基本数据类型的对象缓存:

Integer num1 = 12;

Integer num2 = 12;

System.out.println(num1 == num2);true

Integer num3 = 129;

Integer num4 = 129;

System.out.println(num3 == num4);false

Integer num5 = Integer.valueOf(12);

Integer num6 = Integer.valueOf(12);

System.out.println(num5 == num6); true;

2.JDK1.4以前的版本基本数据封装对象:Integer a = new Integer(3);//装箱

JDK1.5以后基本数据的封装对象:Integer a = 3;//自动装箱

在一字节内的整数(-128~127)由于使用频率高,在封装成对象时,就缓存起来了。

以便复用,这种模式叫享元模式。

3.享元设计模式(flyweight):

如果很多很小的对象,它们有很多相同的东西,那就可以把它们变成一个对象,

还有些不同的东西,可将它们变成外部的属性作为方法的参数传入。这种模式叫

享元模式。

五.枚举类

1.为什么要有枚举,枚举的作用,

1)问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能

会写成 int weekday = 0;

2)枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。

枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

2.用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。

1)私有的构造方法。

2)每个元素分别用一个公有的静态成员变量表示。

3)可以有若干公有方法或抽象方法,例如,要提供nextDay方法必须是抽象的。

采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。

3.java5的枚举的基本应用

public class EnumTest
{
public static void main(String[] args)
{
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SAT"));
System.out.println(WeekDay.values().length);
}

public enum WeekDay
{
SUN,MON,TUE,WEd,THI,FRI,SAT;
}
}


4.实现带有构造方法的枚举

public class EnumTest
{
public static void main(String[] args)
{
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SAT"));
System.out.println(WeekDay.values().length);
}

public enum WeekDay
{
SUN,MON,TUE,WEd,THI,FRI,SAT;//元素列表后有内容时,要加;
private WeekDay()//构造方法要私有
{
System.out.println("first");
}
private WeekDay(int day)
{
System.out.println("second");
}
}
}


5.实现带有抽象方法的枚举

1)枚举就相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法。

2)枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。

把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

3)带构造方法的枚举

构造方法必须定义成私有的

如果有多个构造方法,该如何选择哪个构造方法?

枚举元素MON和MON()的效果一样,都是调用默认的构造方法。

4)带方法的枚举

定义枚举TrafficLamp

实现普通的next方法

实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用

类似内部类的方式进行定义。

增加上表示时间的构造方法

5)枚举只有一个成员时,就可以作为一种单例的实现方式。

class Single
{
private Single(){}
public final static Single s = new Single();
public static  Single getInstance(){
return s;
}
}

//枚举
public enum Single{
S;
}


6)代码演示:

public enum TrafficLamp
{
RED(30)
{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(45)
{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW(5)
{
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time)
{
this.time = time;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐