JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
2016-09-25 18:32
781 查看
JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
学完我们的java之旅,其实收获还是很多的,但是依然还有很多的知识点需要我们的突破,所以写下这个java进阶之旅的系列,这个系列不会说的那么的基础,主要是对一些高级点的功能进行剖析,所以,一起来看看吧!一.增强for循环
for循环在我们的开发中是非常非常的多的,但是有多少人会用增强for循环?其实还是有很多人会用哈,但是还是有很多人一知半解,我们来看一下增强for循环的格式是怎样的语法
for(type 变量名:集合变量名){….}
注意事项
1.迭代变量必须在括号内定义
2.集合变量可以是数组或实现了iterable接口的集合类
我们写一个小例子来查看一下就知道了
public class ForClass { public static void main(String[] args) { int[] mInt = { 1, 3, 5, 7, 9 }; for (int x : mInt) { System.out.println("result:" + x); } } }
输出的结果也是总所周知,全部输出来了,这里就不演示了 ,这就是比较简单的增强for循环了
二.基本数据类型的自动拆箱与装箱
这个基本数据类型的拆箱与装箱是什么呢?这样,我们用思路来说明,我们看这段代码Integer num1 = 3;
如果详细分析的话,应该是把一个基本数据类型3装箱成了Integer 赋值给了num1,如果你使用过以前的JDK版本,具体是几,好像是1.5还是1.6之前是会报错的,再来看下拆箱,其实可以看一下这段代码
System.out.println(num1 + 3);
Integer 和3相加,是等于6,在现在的JDK版本早就支持了自动拆箱和装箱,所以我们现在只要了解一下就好了,这里要注意以下int范围是-128–127,如果超过了就GG
三.享元设计模式(flyweight)
同样的,这里会牵扯到一个设计模式,如果我们需要很多个对象,但是每一个对象的使用方法都是一样的,数据也是一样的,所以我们就没必要创建这么多,就创建一个就好了,可重复利用,这个就是享元设计模式了,是不是很简单四.枚举的概述
说道枚举,他是JDK1.5新增加的一个概念,其实现在开发用的相对还是比较少的, 但是你如果翻阅12年上下的代码,你可以看到很多的枚举的影子,他到底是什么呢?我们来深入了解了解1.我们为什么要用枚举
说道这个,我们先来看个例子,比如要定义星期几或者性别的变量,我们该怎么去定义?假设用1-7分别表示星期一到星期日,但是有人可能会写成等于0去了
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现的这一目标
2.用普通类如何实现枚举功能
我们可以模拟一下试试看,需要做的事情有
私有的构造方法
每个元素分别用一个公有的静态变量表示
可以有若干公有方法或抽象方法
我们先用基本的JAVA类来演示一下枚举的作用
public class WeekDay { private WeekDay() { }; public final static WeekDay SUN = new WeekDay(); public final static WeekDay MON = new WeekDay(); public WeekDay nextDay() { if (this == SUN) { return MON; } else { return SUN; } } public String toString() { return this == SUN ? "SUN" : "MON"; } }
这个是我们用普通的方式来实现枚举的思想,这也是可以的,但是我们JAVA中提供了枚举的应用姿势:
五.枚举的应用
其实但从枚举来说,使用起来还是比较简单的,我们来看下是什么?public class ForClass { public static void main(String[] args) { WeekDay weekDay = WeekDay.THI; System.out.println(weekDay); System.out.println(weekDay.name()); System.out.println(weekDay.ordinal()); } public enum WeekDay { SUN, MON, TUE, WED, THI, FRI, SAT } }
这样我们就可以直接使用,并且输出的时候可以直接实现打印值的功能,就像上述我们JAVA类的功能一样
六.枚举的构造方法
我们更进一步的来演示一下其他使用方法public enum WeekDay { SUN(1), MON, TUE, WED, THI, FRI, SAT; /** * 1.需要在函数之后 * 2.必须私有 */ private WeekDay() { System.out.println("只要用到了这个枚举类,都会执行空构造函数"); } private WeekDay(int index){ System.out.println("函数后面接参数就会调用有残构造"); } }
这段看起来应该并不困难,主要是了解构造函数的规律和什么时候调用,注意一下就好了
七.枚举的抽象方法
我们继续来看,看下抽象函数的使用方法,我们现在假设路上的红绿灯,我们应该怎么去写?public enum Color { RED(5) { @Override public Color nextColor() { return GREEN; } }, GREEN(10) { @Override public Color nextColor() { return BLUE; } }, BLUE(15) { @Override public Color nextColor() { return RED; } }; // 返回下一种颜色 public abstract Color nextColor(); // 灯显示时间 private int time; private Color(int time) { this.time = time; } }
实现起来还是有点涵养的对吧,其实思想很通顺,我们有三个灯,他都有显示下一个灯的功能,所以可以直接抽象,而且他有是都需要显示时间,所以,我们可以写一个有参的构造函数,就ok了
对了
枚举只有一个成员时,就可以作为一种单利的实现方式
我们本章就先到这里吧,这篇只能算是只是一个基础概念,为我们后面做铺垫,我们下篇会涉及到一些深一点的东西,比如反射的机制等
有兴趣的可以加群:555974449我们一起学习
相关文章推荐
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
- 黑马程序员--张孝祥Java高新技术-JDK1.5新特性(二)【基本数据类型的自动拆箱与装箱,枚举】以及享元设计模式
- Java深入(高新技术)(二):开发环境、静态导入、可变参数、增强for循环、基本数据类型的自动拆箱与装箱、享元模式
- Java高新技术【1】 (静态导入-可变参数-增强for循环-基本数据类型的自动拆箱与装箱)
- Java基础加强<二>可变参数、增强for循环、基本类型的自动拆箱与装箱、枚举
- Java高新技术【1】 (静态导入-可变参数-增强for循环-基本数据类型的自动拆箱与装箱)
- 静态导入-可变参数-增强for循环-基本数据类型的自动拆箱与装箱
- 加强eclipse的使用技巧。可变参数。基本数据类型自动装箱和拆箱。枚举。反射。数组反射的应用。ArrayList和HashSet。JavaBean
- 黑马程序员_高新技术_eclipse的使用技巧_可变参数_增强for循环_基本数据类型的自动拆箱与装箱
- 黑马程序员_高新技术:1)eclipse的使用技巧_可变参数_增强for循环_基本数据类型的自动拆箱与装箱
- 黑马程序员-------(高新技术)静态导入、可变参数、增强for循环、基本数据类型的自动拆箱与装箱
- Java基础加强:静态导入及可变参数和增强for循环 ,基本数据类型的自动拆箱和装箱
- JDK1.5新特性:静态导入、可变参数、增强for循环、自动装箱拆箱(享元设计模式)、枚举、注解、泛型、
- 黑马程序员--高新技术--静态导入,基本数据类型拆箱与装箱,享元设计模式
- 黑马程序员_Java高新技术_基本类型数据的自动拆装箱及享元设计模式
- Java高新技术1---增强for循环 ---装箱与拆箱享元设计模式--自己写枚举--可变长度的参数
- Java高新技术1---增强for循环 ---装箱与拆箱享元设计模式--自己写枚举--可变长度的参数
- 05.基本数据类型的自动拆装箱及享元设计模式
- Java中基本数据类型的自动拆箱和装箱
- Java中基本数据类型的自动拆箱和装箱