# Java面向对象(综合实战)
   前言:学习完Java面向对象,所以对于不太了解的地方就得从实战一些小项目练习获得需要知道的东西,从这些练习中就能更加直观清晰的明白和使用。
### 案例一:电脑模型(OO实现)
#### 1.1 需求分析
  一个可以运行的电脑核心就是电脑主板,而电脑主板的核心部分包括:CPU插槽(AMD的CPU或者Intel的CPU)、声卡、显卡、网卡都符合PCI的插槽标准所以可以插到PCI插槽中
类:
>电脑类(Computer)
>主板类(MainCard)
接口:
>CPU接口
>PCI接口
基于CPU接口的实现:AMPCPU或者InterCPU
声卡:华硕(ASUSSoundCard)声卡
显卡:七彩虹(ColorFulCard)
网卡:TPLinkNetWorkCard
组件关键分析:
电脑有一个属性-主板类
主板 属性1个(CPU接口)和3个PCI接口
#### 1.2 代码实现
  对于电脑主板上的CPU和PCI插槽为满足不同品牌的设备,分别定义CPU接口和PCI接口,例如:
```java
/**
* CPU.java(CPU插槽接口)
* @author baishenghua
*
*
*/
public interface CPU {
// CPU工作
public void work();
}
```
  **PCI接口代码:**
```java
/**
* PCI.java(主板上PCI插槽标准接口)
* @author baishenghua
*
*
*/
public interface PCI {
public void run();
}
```
  对于主板上的CPU定义为接口,但对应的实现可以是AMD的CPU也可以是Intel的CPU,例如:
  **AMD的CPU代码:**
```java
/**
* AMDCPU.java(AMDCPU类)
* @author baishenghua
*
*/
public class AMDCPU implements CPU {
@Override
public void work() {
System.out.println("====AMDCPU开始工作=====");
}
}
```
  **Intel的CPU代码:**
```java
/**
* IntelCPU.java(Intel的CPU类)
* @author baishenghua
*
*/
public class IntelCPU implements CPU {
@Override
public void work() {
System.out.println("====IntelCPU开始工作======");
}
}
```
  对于电脑主板上的三个PCI插槽可以匹配声卡、显卡、网卡,在这里我们对应的实现分别为华硕声卡(ASUSSoundCard)、七彩虹显卡(ColorFulCard)、 Tp-Link网卡(TPLinkNetWorkCard),代码如下:
  **华硕声卡(ASUSSoundCard)代码:**
```java
/**
* ASUSSoundCard.java(华硕声卡类)
* @author baishenghua
*
*/
public class ASUSSoundCard implements PCI {
@Override
public void run() {
System.out.println("====华硕声卡开始运行=====");
}
}
```
  **七彩虹显卡(ColorFulCard)代码**
```java
/**
* ColorFulCard.java(七彩虹显卡)
* @author baishenghua
*
*/
public class ColorFulCard implements PCI {
@Override
public void run() {
System.out.println("======七彩虹显卡开始运行=====");
}
}
```
  **Tp-Link网卡(TPLinkNetWorkCard)代码**
```java
/**
* TPLinkNetWorkCard.java(Tp-Link网卡类)
* @author baishenghua
*
*/
public class TPLinkNetWorkCard implements PCI {
@Override
public void run() {
System.out.println("====Tp-Link网卡开运行===");
}
}
```
  **主板(MainCard)代码**
```java
/**
* MainCard.java(主板类)
* @author baishenghua
*
*/
public class MainCard {
// CPU接口
private CPU cpu;
// PCI插槽
private PCI pci1;
private PCI pci2;
private PCI pci3;
public void setCpu(CPU cpu) {
this.cpu = cpu;
}
public void setPci1(PCI pci1) {
this.pci1 = pci1;
}
public void setPci2(PCI pci2) {
this.pci2 = pci2;
}
public void setPci3(PCI pci3) {
this.pci3 = pci3;
}
public CPU getCpu() {
return cpu;
}
public PCI getPci1() {
return pci1;
}
public PCI getPci2() {
return pci2;
}
public PCI getPci3() {
return pci3;
}
}
```
  电脑主要设备是主板,所以在电脑类(Computer)对应有主板(MainCard)属性,同时也提供一个电脑运行的方法run()方法,代码如下:
```java
/**
* Computer.java(电脑类)
* @author baishenghua
*
*/
public class Computer {
// 主板
private MainCard mainCard;
public Computer() {
}
public Computer(MainCard mainCard) {
this.mainCard = mainCard;
}
// 电脑运行
public void run() {
System.out.println("====电脑开始启动=====");
if (mainCard == null) {
System.out.println("====电脑主板未匹配成功====");
} else {
if (mainCard.getCpu() == null) {
System.out.println("====CPU设备未配置成功===");
return;
} else {
// CPU正常工作
mainCard.getCpu().work();
}
// CPI1
if (mainCard.getPci1() == null) {
System.out.println("===PCI1未匹配设备");
return;
} else {
mainCard.getPci1().run();
}
// PIC2
if (mainCard.getPci2() == null) {
System.out.println("===PCI2未匹配设备");
return;
} else {
mainCard.getPci2().run();
}
// PCI3
if (mainCard.getPci3() == null) {
System.out.println("===PCI3未匹配设备");
return;
} else {
mainCard.getPci3().run();
}
}
System.out.println("====电脑启动成功===");
}
}
```
  **ComputerTest类代码**
```java
/************************************
* ComputerTest.java(电脑测试)
* @author baishenghua
*
*/
public class ComputerTest {
public static void main(String[] args) {
// AMDCPU设备
AMDCPU admcpu = new AMDCPU();
// 华硕声卡设备
ASUSSoundCard sondCard = new ASUSSoundCard();
// 七彩虹显卡
ColorFulCard colorFulCard = new ColorFulCard();
// TP-Link网卡
TPLinkNetWorkCard linkNetWorkCard = new TPLinkNetWorkCard();
MainCard mainCard = new MainCard();
mainCard.setCpu(admcpu);
mainCard.setPci1(sondCard);
mainCard.setPci2(colorFulCard);
mainCard.setPci3(linkNetWorkCard);
Computer computer = new Computer(mainCard);
computer.run();
}
}
```
- Java基础企业实践篇
- 一、Java开发环境搭建
- 1.Java的前世今生
- 2.JVM、JRE和JDK的概念及关系
- 3.Java的跨平台特性
- 4.Java运行机制
- 5.环境搭建
- 二、程序设计基础
- 1.掌握代码基本结构
- 2.熟练写注释
- 3.掌握标识符的使用
- 4.掌握关键字的使用
- 5.掌握常量的使用
- 6.认识变量
- 7.掌握数据类型的使用
- 8.掌握类型转换
- 9.掌握作用域
- 10.掌握运算符的使用
- 11.掌握顺序结构的使用
- 13.掌握循环结构的使用
- 14.掌握方法的使用
- 15.掌握数组的使用
- 16.掌握修饰符的使用
- 三、面向对象语言基础
- 1.对象的概念
- 2.类的概念
- 3.类和对象的关系
- 4.面向过程和面向对象的区别
- 5.实训项目:五子棋游戏设计与实现
- 6.案例练习
- 案例一:地址类
- 案例二:员工类
- 案例三:动物狗类
- 案例四:银行账户类
- 案例五:图书类
- 四、面向对象概念的理解,类和对象
- 1.类的构成
- 2.属性
- 3.方法和构造方法
- 4.重载和重写
- 5.变量的作用域
- 6.成员变量和局部变量
- 7.静态块的作用和加载机制
- 8.类生成对象的过程
- 9.对象参数传递过程
- 五、封装,继承,多态
- 1.理解封装、继承、多态的概念和目的
- 2.理解封装、继承、多态的实现方法和步骤
- 3.掌握Java访问修饰符
- 4.理解什么是内部类
- 5.理解this、static、final关键字
- 6.实训项目:租车系统设计与实现
- 六、抽象类和接口
- 1.理解抽象类的概念,为什么要有抽象类
- 2.掌握抽象类的声明格式
- 3.理解什么是接口,为什么要有接口
- 4.掌握接口的定义与实现
- 5.理解接口和抽象类的区别
- 6.实训案例
- 案例一:电脑模型(OO实现)
- 案例二:银行转账(OO实现)
- 七、Object类和常用API
- 1.理解什么是API
- 2.掌握Java API文档的使用
- 3.理解Java类库的概念
- 4.掌握Object类并掌握该类中的方法
- 5.掌握String类的应用
- 6.掌握StringBuffer、StringBuilder类的应用
- 7.掌握基本数据类型及其包装类
- 8.掌握Java日期类
- 八、泛型、集合
- 1.理解泛型的概念和实现语法
- 2.理解Java集合框架三大接口:List、Set、Map
- 3.掌握List接口的实现类ArrayList、LinkedList的使用
- 4.掌握HashSet的使用
- 5.掌握HashMap的使用
- 6.掌握Collections类中提供的静态方法
- 九、异常和IO技术
- 1.理解异常的概念
- 2.掌握异常的分类和Java常见的异常
- 3.理解掌握Java的异常处理机制
- 4.掌握自定义异常
- 5.理解文件系统和File类
- 6.理解I/O概念和分类
- 7.掌握常见的I/O流对象
- 8.掌握文件流与缓冲流
- 十、泛型的延伸
- 1.理解并掌握泛型的基本原理与具体运作过程
- 2.掌握泛型类的定义
- 3.掌握泛型方法的定义
- 十一、流的延伸
- 1.理解数据流的作用
- 2.掌握对象流的作用
- 3.理解对象序列化的概念
- 5.理解线程死锁
- 4.理解对象反序列化的概念
- 十二、反射技术
- 1.理解反射的概念
- 2.理解反射的工作原理
- 3.理解Reflection API中相关类的作用
- 十三、多线程技术
- 1.理解多线程的概念
- 2.理解线程的状态与生命周期
- 3.理解多线程通信
- 4.理解线程同步
- 十四、网络编程技术
- 1.理解网络编程常用协议TCP/UDP/HTTP/FTP等基础知识
- 2.掌握TCP网络编程连接建立的3次握手和4次挥手的具体过程
- 3.掌握UDP网络通信工作原理
- 4.掌握Socket通信模型的工作原理
- 十五、图形化界面
- 5.理解线程死锁
- 十六、JDBC技术
- 1.熟练掌握JDBCAPI中常用接口的基本概念
- 2.理解JDBC连接数据库的思路和实现方法
- 3.熟练掌握JDBC连接数据库的基本步骤
- 4.理解并掌握数据库连接公共类的设计思路和方法
- 5.熟练掌握JDBC使用公共类连接数据库的基本步骤
- 6.熟练掌握JDBC操作数据库的基本步骤
- 7.熟练掌握JDBC操作数据库的SQL语句
- 8.熟练掌握JDBC操作单表的方法及SQL语句
- 9.熟练掌握JDBC操作多表的方法及SQL语句
- 10.理解事务的基本概念
- 11.熟练掌握JDBC在综合项目的使用方法(包含:基本数据、业务处理等)
- 十七、课外补充
- 附录1.各种字符集和编码详解
- 项目实训
- 项目2:汽车销售系统