现在的位置: 首页 > 综合 > 正文

黑马程序员——Java高新技术(二)

2013年09月13日 ⁄ 综合 ⁄ 共 3521字 ⁄ 字号 评论关闭

12、增强for循环

要想查看java的语言语言规范,可以再网上下载langspec-3.0阅读文档。

The Java Language SpecificationThird
Edition

1、增强for循环的语法:

for(type变量名:集合变量名){……}

2、注意事项:

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

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

示例代码:

for(int
arg:args)

        sum+=arg;

想要出现这样的注释/**/,就得先选中文本,然后按住ctrl+shift+/

13、自动拆箱与装箱及享元设计模式

1、享元模式【flayweight】:

如果有很多很小的对象,他们有很多相同的东西(很多属性相同),那么就可以把它们变成一个对象,还有不同的东西把它变成方法的参数,称之为外部的状态;相同的属性称之为这个对象的内部状态。(举例:在自动装箱中有体现)

2、自动装箱

   Integer num1 = 12;(自动将12装成Integer类型的对象)

3、自动拆箱

  num1+13;(自动将Integer类型的num1拆成int类型)

示例代码:

package staticImport.cn.itcast.day1;

publicclass
AutoBox {

        publicstaticvoid
main(String[] args) {

                  //TODO
Auto-generated method stub

                  Integer iObj = 3;//自动装箱,将3封装成Integer类型的对象

                  System.out.println(iObj);

                  //自动拆箱,将iObj拆成基本数据整型3,然后与5相加。

                  System.out.println(iObj+5);

                  Integer iObj1 = 3;

                  System.out.println(iObj==iObj1);//返回true,用到享元模式。

//如果将3都改写成在-128~127范围之外,那么结果将会为false,出现这种结果原因:享元模式

/*一个基本数据类型()包装成Integer对象之后,如果范围-128~127(一个字节之内),就会被缓存起来,存入到一个池子里面。如果下一次有要封装成Integer对象,我先看池子里面有没有对象,如果有的话之间拿过来使用,节省了内存空间。因为小的整数使用的频率比较高。*/

        }

}

14、枚举(JDK1.5

类的访问修饰符:外部类的访问修饰符:public、莫明的;内部类的访问修饰符:publicprotected、莫明的、private

【使用内部类的时候】匿名子类在给父类对象赋值的时候,怎样使用父类的有参构造方法?答案:和无参构造方法一样使用。比如:java.util.Date
date = new java.util.Date(500){};//
利用Date的匿名子类来为父类date赋值

1、在枚举中,变量(元素)的值只能是规定的那么几个,不能超出了那个范围。

每一个枚举元素都是一个对象。

2、将一个字符串转变成枚举对象就要用到枚举类的静态方法valueOf();

3、定义基本枚举类的构造方法,所有的元素列表应该放在第一行的位置,而且构造方法必须私有化。如果在基本枚举类中,构造方法重载了,想要调用带参数的构造方法,就必须在元素后面用(参数)来表示

示例代码:

package staticImport.cn.itcast.day1;

/**自定义枚举类:(第一种)

 *用普通的java类来实现枚举类的原理,用简单的逻辑**/

publicclass
WeekDay {

        private
WeekDay(){}

        publicstatic final
WeekDay
Sun =new
WeekDay();

        publicstatic final
WeekDay
Mon =new
WeekDay();

        publicstatic final
WeekDay
Tue =new
WeekDay();

        publicstatic final
WeekDay
Fri =new
WeekDay();

        publicstatic final
WeekDay
Sai =new
WeekDay();

        //……

        public WeekDay
nextDay(){

                  if(this
==
Mon)

                           returnTue;

                  elseif(this
==
Tue)

                           returnFri;

                  elseif(this
==
Fri)

                           returnSai;

                  elseif(this
==
Sai)

                           returnSun;

                  returnMon;

        }

        public
String toString(){

                  if(this
==
Mon)

                           return"Mon";

                  elseif(this
==
Tue)

                           return"Tue";

                  elseif(this
==
Fri)

                           return"Fri";

                  elseif(this
==
Sai)

                           return"Sai";

                  return"Sun";

        }

}

/**自定义枚举类:(第二种)

 *用普通的java类来实现枚举类的原理,用匿名内部类

 *而且第二种是最经常使用的**/

abstractclass
WeekDay2{

        private
WeekDay2(){}

        publicstaticfinal
WeekDay2
SUN2 =new
WeekDay2(){

                  WeekDay2 nextDay() {

                           returnMON2;

                  }                

        };

        publicstaticfinal
WeekDay2
MON2 =new
WeekDay2(){

                  public
WeekDay2 nextDay(){

                           returnSUN2;

                  }

        };

        /*采用抽象方法定义nextDay,就是将大量的if
else
语句转移成一个个独立的类*/

        abstract
WeekDay2 nextDay();

}

 

        演示代码:

package staticImport.cn.itcast.day1;

publicclass
EnumTest {

        publicstaticvoid
main(String args[]) {

                  WeekDay day = WeekDay.Mon;

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

                  System.out.println(WeekDay2.MON2.nextDay().toString());

                  System.out.println(WeekDay3.SUN);

                  WeekDay3 weekday3 = WeekDay3.SAI;

抱歉!评论已关闭.