黑马程序员 19 Java基础加强-01-基础篇
来源:互联网 发布:于正 琼瑶 知乎 编辑:程序博客网 时间:2024/06/02 10:53
-------android培训、java培训、期待与您交流! ----------
本日志doc文档下载
About 拆箱与装箱、可变参数、枚举
1、基本数据类型的自动拆箱与装箱
Code1
// 自动装箱与拆箱(设计模式:享元设计模式) 整数型-128~127Integer iObj1 = 127;Integer iObj2 = 127;System.out.println(iObj1==iObj2);System.out.println(iObj1 + 12);Integer iObj3 = Integer.valueOf(12);Integer iObj4 = Integer.valueOf(12);System.out.println(iObj3 == iObj4);
2、可变参数
2.1、问题:一个方法接受的参数个数不固定,例如:
System.out.println(countScore(2,3,5));
System.out.println(countScore(1,2,3,5));
2.2、可变参数的特点:
只能出现在参数列表的最后;
...位于变量类型和变量名之间,前后有无空格都可以;
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
Code2
public static void main(String[] args) {System.out.println(add(2,3));System.out.println(add(2,3,5));}public static int add(int x, int ... args) {int sum = x;for (int arg : args) {sum += arg;}return sum;}
3、枚举
3.1、为什么要有枚举
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
3.2、用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
3.2.1、私有的构造方法
3.2.2、每个元素分别用一个公有的静态成员变量表示
3.2.3、可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
Code3
public abstract class WeekDay1 {private WeekDay1() {}public static final WeekDay1 SUN = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {return MON;}};public static final WeekDay1 MON = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {return TUE;}};public static final WeekDay1 TUE = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {return WEN;}};public static final WeekDay1 WEN = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {return THU;}};public static final WeekDay1 THU = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {return FRI;}};public static final WeekDay1 FRI = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {return SAT;}};public static final WeekDay1 SAT = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {return SUN;}};public abstract WeekDay1 nextDay();//抽象方法/*public WeekDay nextDay(){if(this == SUN){return MON;}else{return SUN;}}*/@Overridepublic String toString() {if (this == SUN){return "星期天";}else if(this == MON){return "星期一";}else if(this == TUE){return "星期二";}else if(this == WEN){return "星期三";}else if(this == THU){return "星期四";}else if(this == FRI){return "星期五";}else {return "星期六";}}}
3.3、枚举的基本应用
举例:定义一个Weekday的枚举。
扩展:枚举类的values,valueOf,name,toString,ordinal等方法
总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()。
Code4
public class EnumTest {public static void main(String[] args) {WeekDay1 weekDay = WeekDay1.TUE;System.out.println(weekDay.nextDay());System.out.println(WeekDay1.FRI.getClass().getName());System.out.println(WeekDay1.class.getName());System.out.println("-------------------------");System.out.println(WeekDay.SUN);System.out.println(WeekDay.valueOf("SAT"));System.out.println(WeekDay.values().length);System.out.println(WeekDay.class.getName());System.out.println("-------------------------");System.out.println(TrrificLamp.GREEN.nextLamp().time);System.out.println(TrrificLamp.RED.nextLamp());}//每个枚举对象都会产生相应的class文件public enum WeekDay {SUN, MON(1), THU(1), WEN, THI, FRI, SAT;private WeekDay() {System.out.println("First");}private WeekDay(int day) {System.out.println("Second");}}// 交通灯枚举实例public enum TrrificLamp {RED(30) {@Overridepublic TrrificLamp nextLamp() {return GREEN;}},GREEN(45) {@Overridepublic TrrificLamp nextLamp() {return YELLOW;}},YELLOW(5) {@Overridepublic TrrificLamp nextLamp() {return RED;}};public abstract TrrificLamp nextLamp();private int time;//枚举构造器私有private TrrificLamp(int time) {this.time = time;}}}
4、枚举的高级应用
4.1、枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
4.2、枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
4.3、带构造方法的枚举
构造方法必须定义成私有的
如果有多个构造方法,该如何选择哪个构造方法?
枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
4.4、带方法的枚举
定义枚举TrafficLamp
实现普通的next方法
实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
增加上表示时间的构造方法
4.5、枚举只有一个成员时,就可以作为一种单例的实现方式。
- 黑马程序员 19 Java基础加强-01-基础篇
- 黑马程序员 ---java基础加强01
- 黑马程序员--Java基础加强篇
- 黑马程序员-Java基础加强
- 黑马程序员---基础加强【java】
- 黑马程序员Java基础加强
- 黑马程序员--------Java基础加强
- 黑马程序员 java 基础加强
- 黑马程序员-基础加强01
- 黑马程序员-基础加强篇
- 黑马程序员:基础加强
- 黑马程序员-基础加强
- 黑马程序员---------------------基础加强
- 黑马程序员-Java基础加强-Java高新技术
- 黑马程序员基础-----基础加强
- 黑马程序员--Java基础加强总结
- 黑马程序员--Java基础加强(1)
- 黑马程序员-------Java基础加强1
- 把单个模块集成到框架里面
- 用C语言解决(hanoi)汉诺塔问题——函数的递归调用
- 【读书笔记】《大学算法教程》——chpt5.分而治之
- 【基础】高精度乘法
- mysql存储过程详解
- 黑马程序员 19 Java基础加强-01-基础篇
- php文件上传类
- 精通BitmapData
- Linux磁盘自动挂载
- MON51通信协议和实现分析v1.2
- svn merge和branch
- 微软面试题目
- C语言程序设计-学习笔记ch01[未完成]
- 招聘所见思考