12、增强for循环
要想查看java的语言语言规范,可以再网上下载langspec-3.0阅读文档。
The Java Language Specification,Third
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、莫明的;内部类的访问修饰符:public、protected、莫明的、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
WeekDaySun =new
WeekDay();
publicstatic final
WeekDayMon =new
WeekDay();
publicstatic final
WeekDayTue =new
WeekDay();
publicstatic final
WeekDayFri =new
WeekDay();
publicstatic final
WeekDaySai =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
WeekDay2SUN2 =new
WeekDay2(){
WeekDay2 nextDay() {
returnMON2;
}
};
publicstaticfinal
WeekDay2MON2 =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;