您的位置:首页 > 编程语言 > Java开发

黑马程序员-Java高新技术-jdk1.5简单的新特性

2013-06-03 22:46 435 查看
------- android培训java培训、期待与您交流! ----------
枚举

为什么要有枚举,例如
要定义星期几变量,该怎么定义呢,假设用1-7分别代表星期一到星期日,但有人可能会用0代表星期日

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一个目标的

定义一个WeekDay的类来模拟枚举功能

1) 私有的构造方法

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

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

public abstract class Weekday {

private Weekday(){}

public final static Weekday SUM=new Weekday(){

public Weekday nextDay() {

return MON;

}

};

public final static Weekday MON=new Weekday(){

public Weekday nextDay() {

return SUM;

}

};

public abstract Weekday nextDay();

public String toString()

{

return this==SUM?"SUM=====":"MOU+++";

}

}

--------------------------------------------------------------------

枚举的静态方法

WeekDay.valueOf("SUN").toString(); // valueOf("s");将字符串s变成(WeekDay中)SUN对象

WeekDay.values().length; //vlaues //将WeekDay中所有的对象封装成一个数组,进行遍历

方法

Weekday1.name(); 返回该对象的名字

Weekday1.ordinal(); 返回该对象在该类中的排行第几

compareTo hashCode equals toString 直接调用,

-------------------------------------------------------------------------

构造参数的枚举 : MOU 构造方法是bbbbbbb, SUM 和TOW构造方法是aaaaaa

public enum Enum_2 {

MOU(2),SUM(),TOW;

private Enum_2()

{

System.out.println("aaaaaaaaa");

}

private Enum_2(int day)

{

System.out.println("bbbbbbbbbbbbbbbbbb");

}

}

------------------------------------------------------------

交通灯的枚举类

public enum TrafficLamp {

HONG(30){

public TrafficLamp nextLamp()

{

return LV;

}

},

LV(35){

public TrafficLamp nextLamp()

{

return HUANG;

}

},

HUANG(5){

public TrafficLamp nextLamp()

{

return HONG;

}

};

private TrafficLamp(int time)

{

this.time=time;

}

public abstract TrafficLamp nextLamp();

private int time;

}

如果枚举只有一个对象: 那么就可以作为一种单利的实现方式

===================================================================================================================================

自动拆装箱

自动装箱 Integer sum= 2;

自动拆箱 System.out.println(sum+12);

Integer i1=12; Integer i1=12; i1==i2 ture

Integer i3=new Integer(14); Integer i4=new Integer(14); i3==i4 ture

当Integer取值在一个字节之间时(-128到127),将这些数据比较常用,在内存中只有一份(共享),不用每一个对象new出一个,节省大量的内存空间,这种模式被称为 享元模式

1 静态导入

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

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

以Math类为例:

import static java.lang.Math.max; //导入lang包中的Math类的max方法

max(3,5); //就可以直接写方法名,不用类名也能调用

Math.abs(6,3); //平常调用的方式

import static java.lang.Math.*; //导入lang包中的Math类中的所有方法

那么就是在本类页面中写Math的静态方法,都可以直接写方法名(没有类名也可以调用)

---------------------------------------------------------------------------------------

2 可变参数

可变参数的特点

(1) 只能出现在参数列表的最后

(2) ...位于变量类型和变量名之间,前后有无空格都是可以的

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

public static void main(String[] args)

{

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

System.out.println(add(2,4,5,66));

System.out.println(addd(3,4));

System.out.println(addd(2,4,5,66));

}

public static int addd(int ...is) //可变参数

{

int sum=0;

for(int i=0;i

{

sum+=is[i];

}

return sum;

}

public static int add(int s,int ...is) // 可变参数

{

int sum=s;

for(int i=0;i

{

sum+=is[i];

}

return sum;

}

-------------------------------------------------------------------------------------------

3 for循环增强

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

注意事项

迭代变量必须在{} 中定义

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

举例

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

{

int sum =x;

for(int arg:args)

{

sun+=arg;

}

return sum;

}

for循环增强的好处

在上面这个例子 增强型的for循环 和普通for循环一样

增强型的for循环 优点主要体现在集合中,随便举个例子

比如对 set 的遍历

一般是迭代遍历:

Set set = new HashSet();

Iterator it = set.iterator();

while (it.hasNext()) {

String str = it.next();

System.out.println(str);

}

for循环遍历:

for (String str : set) {

System.out.println(str);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐