一、Java枚举 enum 引用类型可以使用 toString()方法
1、定义:稳定的有限序列,枚举的本质是常量。Java中枚举类型的本质是抽象类。
2、定义一个枚举类型
enum Gender{ MALE, FEMALE, UNKNOW//这三个为枚举常量 <span style="white-space:pre"> </span>//这是定义一个枚举类型Gender,不是枚举类型变量3、定义枚举类型变量,并初始化:
Gender gender = Gender.FEMALE; System.out.println(gender);//该语句输出结果与利用toString()方法输出一致,证明该类型为引用类型4、Java中enum本质为:class/abstract class (可以通过查看其源码来实现)
5、枚举类型常用方法:
System.out.println(ele.name()); System.out.println(ele.ordinal()); System.out.println(ele.toString()); System.out.println(ele.getGender());
5、枚举类型可以在其枚举常量后边加上编号:MALE(10)——要添加构造器,其类型只能为private(因为其本质是抽象类)
获取枚举中的序号用的get访问器
枚举类:
public enum Gender{ MALE(2) { @Override public String getDisplay() { // TODO Auto-generated method stub return "男"; } }, FEMALE(3) { @Override public String getDisplay() { // TODO Auto-generated method stub return "女"; } }, UNKNOW(5) { @Override public String getDisplay() { // TODO Auto-generated method stub return "未知"; } }; private int gender; private Gender(int gender){ this.gender = gender; } public int getGender() { return gender; } public abstract String getDisplay(); }6、主函数类
public class Main { public static void main(String[] args) { Gender gender = Gender.FEMALE; System.out.println(gender); for(Gender ele : Gender.values()){ // System.out.println(ele.name()); // System.out.println(ele.ordinal()); // System.out.println(ele.toString()); // // System.out.println(ele.getGender()); System.out.println(ele.getDisplay()); } switch(gender){ case MALE: System.out.println("男"); break; case FEMALE: System.out.println("女"); break; case UNKNOW: System.out.println("未知"); break; default: System.out.println("其他"); break; } } }7、Gender中的MALE也是一个对象。
上面两个类中有内部类,自己找出并且了解内部类的意义。
对枚举中的常量封装显示名。
8、枚举参考资料:http://jingyan.baidu.com/article/e4d08ffdcf664d0fd2f60dbf.html?qq-pf-to=pcqq.group
9、
二、设计模式
A、单例模式:
a、构造器私有化:类外部不允许创建实例对象
b、双检锁:
c、volatile
1、volatile + 双检锁 实现单例
volatile变量具有synchronized的可见特性,但是不具备原子特性。这就是说线程能够自动发现volatile变量的最新值。
2、pojo:Plain Ordinary Java Object 简单的java对象
EJB:Enterprise JavaBean(企业版 Java对象)
3、参考资料:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
三、线程池
1、线程模板:线程的创建就是实现线程接口:Runnable,并且重写其中的run()方法。
通过创建的线程模板新建多个线程。
线程模板如下:
package ThreadPool; public class WorkTask implements Runnable { private String name; public WorkTask(String name){ this.name = name; } @Override public void run() { System.out.println(String.format("正在处理[%s]...", this.name)); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }2、新建一个线程池:
ExecutorService executor = Executors.newFixedThreadPool(2);//后面的数字代表线程池中一次课存放多少个线程
完整代码:
package ThreadPool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(new WorkTask("任务0")); executor.execute(new WorkTask("任务1")); executor.execute(new WorkTask("任务2")); executor.execute(new WorkTask("任务3")); executor.execute(new WorkTask("任务4")); executor.execute(new WorkTask("任务5")); System.out.println("测试主线程与副线程之间的关系"); //通过这条语句可以分析出线程任务与主线程的关系,引出一个线程队列的概念 } }PS:1、线程托管给线程池
2、线程队列概念:
3、并行线程的执行顺序是无序的。
4、处理能力:单位时间处理任务的个数(非处理完)。
5、网站:请求/响应机制
6、数组:Java提供一个辅助的数组操作API:Arraylist
集合有一个辅助API:connection
线程池的辅助API:就是Executors
四、其他参考资料:
1、java Singleton 几种方式解析:http://nkliuliu.iteye.com/blog/980851
2、Java技巧:深拷贝的两种方式:http://developer.51cto.com/art/201104/253067.htm
3、为什么我看不懂你的代码:http://kb.cnblogs.com/page/511521/
五、作业练习
A、这个交通灯主要是模拟灯的变化和车的变化的
1:一个路口,总共有4个方向,每个方向都有3个走向,所有总共有12个小方向,因为右拐经常不受红绿灯控制,所以这个系统里面所有的右拐方向我们就确定一直是绿灯。
2:因为所有的右拐都是绿灯,所以我们就可以不用考虑右拐,这样的话,每个方向就只考虑左拐和直行。
3:拿南和北方向举例,如果南向北是绿灯,那么南向西就是红灯(因为南向西是南向北的左拐方向,左拐方向只有等直行的方向变红以后才变绿),同理,北向南也是绿灯(因为北向南是南向内的对立方向,对立方向是同时变红和同时变绿的)
4:当南北这个方向的左拐方向变红以后,南北方向就都是红灯了(不考虑右拐),接下来就开始东西方向的灯变化了,首先是直行,然后是左拐,再然后就是循环了。。
B、ATM取款机实现
(1) ATM客户端需要登陆,用户输入正确的银行卡号和密码,系统核对无误后才能进行操作
(2) 登陆后,用户可以进行查询余额、取款、和修改密码的操作;
(3) 取款操作,有操作结果提示,如“操作成功”或“余额不足,操作失败”
(4) 密码输入错误3次将提示“对不起,卡已经被没收”
(5) 使用控制台程序完成本应用
(6) 本ATM机程序只管理一个账户
1.初始界面
2.输入正确卡号密码
3.输入错误卡号密码:
5.输入1取款 如取款金额超过上限如下响应
6.输入2查询信息:
7.输入4退出系统
六、笔记本中的内容已经完结,剩下是对这里面内容的整理。