黑马程序员——Java1.5新特性之享元模式、增强for循环、可变参数、静态导入、自动装箱和拆箱

时间:2023-01-21 12:26:56

---------------------- android培训java培训、期待与您交流! ----------------------

享元模式是构造型模式之一,通过与其他类似的对象共享相同数据来减少内存空间的占用,简单地说就是如果在系统中有多个相同的小对象,那么我们可以让他们共享同一数据就可以,而不用每个都去实例化成一个新对象。张老师的视频对享元模式只做了简单描述,之后我在网上看了享元模式相关的博客,要区分享元的内部状态和外部状态,里面很多都提到了Factory模式。享元工厂是负责创建和管理享元角色,客户端不可以直接将一个具体享元对象实例化,要通过一个享元工厂对象。享元模式使得系统更加复杂,为了对象可以共享,需要将一些状态外部化,读取运行时间也会稍长。


增强的for循环,这种for循环的方式主要方便于用简单的方式遍历数组和集合对象。最初遍历数组使用的for循环:

int[] arr={1,2,3,4,5,6};

for(int x=0;x<arr.length;x++)

{

System.out.println(arr[x]);

}

增强for循环:for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体,要被遍历的对象可是数组或者集合。

int[] arr={1,2,3,4,5,6};

for(int x:arr)

{

System.out.println(x);

}

遍历一个Set集合的方法,要使用到迭代器,而现在有了增强for,就简化了很多。

Set<String> set = new HashSet<String>();

for(String str : set)

{

System.out.println(str);

}

当然增强for简化了书写,提高了遍历效率,同时也有自己的缺点,就是他只能顺次遍历不能实现较复杂的循环,不能对数组或集合本身进行操作。


Java在1.5推出的可变参数,在面对方法参数数量不明确,不再需要写多个不同参数的方法,而是使用可变的参数列表,给编写方法时提供了方便,但是也有特殊要求和局限性。编写一个方法时,参数随着程序进行而改变,定义多个下列方法并不能有效地解决问题。

void printName(String name1)

void printName(String name1,String name2)

使用可变的参数可以大大简化代码的书写,(String...names)就是可变参数,这时参数列表是一个数组形式,使用时便可以用到增强for,而且可变参数后面一定要是3个点哦~

void printName(String...names)

{

for(String s : names)

{

//调用方法来处理参数即可

}

}

可变参数方法的重载

void printMethod(int...args)

void printMethod(double...args)

void printMethod(String...args)可以看出可变参数类型的重载遵循一般方法的重载原则,可变参数也是可以应用在构造函数中。


Java自动装箱和拆箱,autoboxing和autounboxing。

当我们定义一个Integer对象时,在Java1.5之后可以直接写:Integer i= 1;这相当于编译器进行了下列的语法编译:Integer i= new Integer(1)。这便是将数据自动装箱。

int t=i;此句则是自动拆箱。

Integer i1= 1;Integer i2= 1;这样定义时i1==i2的结果为true,是因为享元模式的关系,在-128到127以内的数据自动装箱不另外分配内存空间,指向同一对象。

Integer i3= new Integer(1);Integer i4= new Integer(1);这样定义后i3==i4的结果为false,则是new了不同的对象。


静态导入是Java1.5引入的新特性,import static java.lang.System.*,意思就是导入java.lang.System中的所有静态方法,阅读了一些博客发现,人们对这个静态导入的评价不高,使用范围也不大,甚至有些人说他累赘,搞的我都不知道该在什么时候用静态导入了。囧~


---------------------- android培训java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima