黑马程序员_Java学习日记22_高新技术1
来源:互联网 发布:狸窝mac版下载 编辑:程序博客网 时间:2024/05/16 06:01
----------------------android培训、java培训、期待与您交流! ---------------------
1.java5的静态导入与编译器语法设置
import 语句导入一个类或某个包中的所有类
import static 语句导入一个类中的某个静态方法或所有静态方法
新特性的使用,需要jdk1.5以上的版本。
ex: import static java.lang.Math.*;
2.可变参数 Variable Paramete
可变参数的特点:
a.只能出现在参数列表的最后;
b....位于变量类型和变量名之间,前后有无空格都可以;
c.调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
public static int add(int x,int... args){int sum = x;/*for(int i=0;i<args.length;i++){sum += args[i];}*/for(int arg : args){sum += arg;}return sum;}
3.Java5增强for循环
注意事项:
1.迭代变量必须在()中定义!
2.集合变量可以是数组或实现了Iterable接口的集合类
语法:
for(type 变量名:集合变量名){...}
public static int add(int x,int ...args) {int sum = x;for(int arg:args) {sum += arg;}return sum;}
4.基本数据类型的自动拆箱与装箱
自动装箱:
Integer num1 = 12;
自动拆箱:
System.out.println(num1 + 12);
基本数据类型在装箱后,在一个字节内,-128~127,在内存中的常量池中存在。
//基本数据类型的对象缓存:Integer num1 = 12;Integer num2 = 12;//这块相等,<=127都是真的System.out.println(num1 == num2);Integer num3 = 129; Integer num4 = 129;System.out.println(num3 == num4);//这块不相等,因为是对象Integer num5 = Integer.valueOf(12);Integer num6 = Integer.valueOf(12) ; System.out.println(num5 == num6);//这块的道理同上
享元设计模式:
有很多小的对象,他们的属性相同,所以把他们变成同一个对象,那些不同的属性作为他们方法的参数,称为外部状态。那些相同的属性作为他们的内部状态。
5.枚举
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
每个元素分别用一个公有的静态成员变量表示
可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
举例:定义一个Weekday的枚举。
扩展:枚举类的values,valueOf,name,toString,ordinal等方法
总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()。
import java.util.Date;public class EnumTest {public static void main(String[] args) {WeekDay1 weekDay = WeekDay1.MON;System.out.println(weekDay.nextDay());WeekDay weekDay2 = WeekDay.FRI;System.out.println(weekDay2);System.out.println(weekDay2.name());System.out.println(weekDay2.ordinal());System.out.println(WeekDay.valueOf("SUN").toString());System.out.println(WeekDay.values().length);}public enum WeekDay{SUN,MON,TUE,WED,THI,FRI,SAT;//元素列表需要放在枚举类中的最前面,如果元素列表后面有其他方法或成员,元素列表之后要有;。}}
d.枚举类扩展
枚举类的实例对象个数是有限的,就是那些成员,可以在枚举类的构造方法中加入监控语句,看到这几个实例对象被创建出来的过程。
如果想在一个类中编写完各个枚举类和测试调用类,那么可以将枚举类定义成调用类的内部类。
import java.util.Date;public class EnumTest {public static void main(String[] args) {WeekDay1 weekDay = WeekDay1.MON;System.out.println(weekDay.nextDay());WeekDay weekDay2 = WeekDay.FRI;System.out.println(weekDay2);System.out.println(weekDay2.name());System.out.println(weekDay2.ordinal());System.out.println(WeekDay.valueOf("SUN").toString());System.out.println(WeekDay.values().length);new Date(300){};}public enum WeekDay{SUN(1),MON(),TUE,WED,THI,FRI,SAT;private WeekDay(){System.out.println("first");}private WeekDay(int day){System.out.println("second");}}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;}}}枚举就相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
带构造方法的枚举:
1.构造方法必须定义成私有的
2.如果有多个构造方法,枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
带方法的枚举:
1.定义枚举TrafficLamp
2.实现普通的next方法
3.实现抽象的next方法:每个元素分别是由枚举的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
4.增加了表示时间的构造方法。
枚举只有一个成员时,就可以作为一种单例的实现方式。
写带有抽象方法的枚举步骤和技巧:
1. enum TrafficLamp{RED,GREEN,YELLOW}
2. enum TrafficLamp{RED,GREEN,YELLOW;public abstract next();}
3.enum TrafficLamp{RED{},GREEN{},YELLOW{};public abstract next();}
4.填充各个{}中的next方法。
-----------------------android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
- 黑马程序员_Java学习日记22_高新技术1
- 黑马程序员_java学习日记_Java高新技术_枚举
- 黑马程序员_java学习日记_Java高新技术_反射(一)
- 黑马程序员_java学习日记_Java高新技术_反射(二)
- 黑马程序员_java学习日记_Java高新技术_泛型
- 黑马程序员_java学习日记_Java高新技术_反射
- 黑马程序员_java学习日记_Java高新技术_枚举
- 黑马程序员_java学习日记_Java高新技术_网络编程
- 黑马程序员_Java学习日记24_高新技术3
- 黑马程序员_Java学习日记23_高新技术2
- 黑马程序员_Java学习日记25_高新技术4
- 黑马程序员_Java学习日记26_高新技术5
- 黑马程序员_java学习日记_Java高新技术_内省和注解
- 黑马程序员_java学习日记_Java高新技术_Eclipse快捷键
- 黑马程序员_java学习日记_数组
- 黑马程序员_java学习日记_集合
- 黑马程序员_JAVA学习日记_JAVAJDK1.5以后高新技术
- 黑马程序员_Java学习日记8_集合框架1
- 黑马程序员_Java学习日记19_Socket编程1
- Android-opencv之CVCamera
- 黑马程序员_Java学习日记20_Socket编程2
- 当前页面隐藏tabbar
- 黑马程序员_Java学习日记21_正则表达式
- 黑马程序员_Java学习日记22_高新技术1
- 正确理解Linux内存占用过高的问题
- 黑马程序员_Java学习日记24_高新技术3
- js 字符串处理整理
- oracle存储过程返回值
- 每位开发人员都应铭记的10句编程谚语
- .NET获取页面名称
- android Tabhost控件的使用
- codeforces Round #131 div2水题报告