Skip to content

Commit 72a8576

Browse files
author
jackchan1999
committed
'updates'
1 parent 6454425 commit 72a8576

17 files changed

+43
-40
lines changed

第3章 面向对象/img/OOP_01.png

84.3 KB
Loading

第3章 面向对象/img/OOP_02.png

123 KB
Loading

第3章 面向对象/img/OOP_03.png

110 KB
Loading

第3章 面向对象/img/OOP_04.png

50.9 KB
Loading

第3章 面向对象/img/OOP_05.png

21.1 KB
Loading

第3章 面向对象/img/OOP_06.png

20.5 KB
Loading

第3章 面向对象/img/OOP_07.png

20.8 KB
Loading

第3章 面向对象/img/OOP_08.png

18.6 KB
Loading

第3章 面向对象/img/OOP_09.png

121 KB
Loading

第3章 面向对象/img/OOP_10.png

8.06 KB
Loading

第3章 面向对象/img/OOP_11.png

91.7 KB
Loading

第3章 面向对象/img/OOP_12.png

150 KB
Loading

第3章 面向对象/img/OOP_13.png

61.4 KB
Loading

第3章 面向对象/img/OOP_14.png

21.9 KB
Loading

第3章 面向对象/img/OOP_15.png

78.7 KB
Loading

第3章 面向对象/img/OOP_16.png

98.2 KB
Loading

第3章 面向对象/面向对象.md

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# **1. 面向对象思想**
1+
# 1. 面向对象思想
22

33
面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
44

@@ -16,12 +16,12 @@
1616

1717
多态性指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。例如,当听到“Cut” 这个单词时,理发师的行为是剪发,演员的行为表现是停止表演,不同的对象,所表现的行为是不一样的。
1818

19-
## **1.1 面向对象思想引入**
19+
## 1.1 面向对象思想引入
2020

2121
面向对象的编程思想,力图让程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出了两个概念,即类和对象。其中,类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。
2222

2323
前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码封装到方法中,需要遍历时,就调用相应的方法即可,提高代码的复用性。在对数组遍历的基础上继续增加需求,比如获取最值,数值逆序等,同样需要将这些功能封装到相应的方法中。这样继续封装会发现方法越来越多,于是就想能不能将这些方法继续进行封装呢?通过前面的讲解我们知道类是可以存放方法的,所以,我们就考虑使用类封装来这多个方法,将来再做数组的操作时,不用去找具体的方法,先找到这个类,然后使用这个类中的方法。这就是面向对象思想的编程方式。
24-
## **1.2 面向过程思想概述**
24+
## 1.2 面向过程思想概述
2525

2626
我们来回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
2727

@@ -30,7 +30,8 @@
3030
那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
3131

3232
面向过程的代表语言:C语言,强调的是每一个功能的步骤
33-
## **1.3 面向对象思想概述**
33+
34+
## 1.3 面向对象思想概述
3435

3536
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。接下来我们看看面向对象到底是什么?
3637

@@ -62,7 +63,7 @@
6263

6364
面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃
6465

65-
## **1.4 面向对象开发、设计、特征**
66+
## 1.4 面向对象开发、设计、特征
6667

6768
面向对象开发:就是不断的创建对象,使用对象,指挥对象做事情。
6869
面向对象设计:其实就是在管理和维护对象之间的关系。
@@ -73,9 +74,9 @@
7374
- 继承(inheritance)
7475
- 多态(polymorphism)
7576

76-
# **2. 类与对象及其使用**
77+
# 2. 类与对象及其使用
7778

78-
## **2.1 类与对象的关系**
79+
## 2.1 类与对象的关系
7980

8081
我们学习编程语言,就是为了模拟现实世界的事物,实现信息化。比如:去超市买东西的计费系统,去银行办业务的系统。
8182

@@ -95,7 +96,7 @@
9596
类:可以理解为构造对象的一个蓝图或者模版,是抽象的概念
9697
对象:是以类为模型创建的具体实例,是对类的一种具体化。
9798

98-
## **2.2 类的定义**
99+
## 2.2 类的定义
99100

100101
现实世界的事物有属性(人的身高,体重等)和行为(人可以学习,吃饭等)
101102

@@ -157,23 +158,23 @@ class Student {
157158
}
158159
```
159160

160-
## **2.3 对象内存图**
161+
## 2.3 对象内存图
161162

162163
只要是用new操作符定义的实体就会在堆内存中开辟一个新的空间,并且每一个对象中都有一份属于自己的属性。
163164

164165
通过对象.对象成员的方式操作对象中的成员,对其中一个对象的成员进行了修改,和另一个对象没有任何关系。
165166

166167
1个对象的内存图:一个对象的基本初始化过程
167168

168-
![java对象内存](http://img.blog.csdn.net/20150828000240303)
169+
![java对象内存](img/OOP_01.png)
169170

170171
2个对象的内存图:方法的共用
171172

172-
![java对象内存](http://img.blog.csdn.net/20150828000255740)
173+
![java对象内存](img/OOP_02.png)
173174

174175
3个对象的内存图:其中有两个引用指向同一个对象
175176

176-
![java对象内存](http://img.blog.csdn.net/20150828000312873)
177+
![java对象内存](img/OOP_03.png)
177178

178179
**垃圾回收**
179180

@@ -183,7 +184,7 @@ class Student {
183184

184185
## 2.4 成员变量和局部变量的区别
185186

186-
![成员变量和局部变量的区别](http://img.blog.csdn.net/20150813204548057)
187+
![成员变量和局部变量的区别](img/OOP_04.png)
187188

188189
注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
189190

@@ -217,7 +218,7 @@ class VariableDemo {
217218
}
218219
```
219220

220-
## **2.5 形式参数问题**
221+
## 2.5 形式参数问题
221222

222223
基本类型作为形式参数:形式参数的改变不影响实际参数
223224
引用类型作为形式参数:形式参数的改变直接影响实际参数
@@ -268,11 +269,11 @@ class ArgsTest {
268269
```
269270
运行结果:
270271

271-
![形参](http://img.blog.csdn.net/20150813212944156)
272+
![形参](img/OOP_05.png)
272273

273274
在java中,方法参数的传递永远都是传值,而这个值,对于基本数据类型,值就是你赋给变量的那个值。而对于引用数据类型,这个值是对象的引用,而不是这个对象本身。
274275

275-
## **2.6 匿名对象**
276+
## 2.6 匿名对象
276277

277278
匿名对象:就是没有名字的对象。是对象的一种简化表示形式
278279
匿名对象的两种使用情况:对象调用方法仅仅一次的时候;作为实际参数传递。
@@ -330,9 +331,9 @@ class NoNameDemo {
330331
```
331332
运行结果:
332333

333-
![匿名对象](http://img.blog.csdn.net/20150813213331412)
334+
![匿名对象](img/OOP_06.png)
334335

335-
## **2.7 封装(private)**
336+
## 2.7 封装(private)
336337

337338
封装概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
338339

@@ -418,9 +419,9 @@ class StudentTest {
418419

419420
运行结果:
420421

421-
![private关键字](http://img.blog.csdn.net/20150813214407836)
422+
![private关键字](img/OOP_07.png)
422423

423-
## **2.8 this关键字**
424+
## 2.8 this关键字
424425

425426
this代表其所在函数所属对象的引用。换言之,this代本类对象的引用。
426427

@@ -486,13 +487,13 @@ class StudentTest2 {
486487

487488
运行结果:
488489

489-
![this关键字](http://img.blog.csdn.net/20150813215014819)
490+
![this关键字](img/OOP_08.png)
490491

491492
this关键字的内存图解:
492493

493-
![this关键字](http://img.blog.csdn.net/20150828000337090)
494+
![this关键字](img/OOP_09.png)
494495

495-
## **2.9 构造方法**
496+
## 2.9 构造方法
496497

497498
构造方法作用概述:给对象的数据进行初始化
498499

@@ -607,7 +608,7 @@ class ConstructDemo2 {
607608
初始化子类成员变量
608609
初始化子类构造函数
609610

610-
## **2.10 类的成员方法**
611+
## 2.10 类的成员方法
611612

612613
成员方法其实就是我们前面讲过的方法
613614

@@ -698,9 +699,9 @@ class StudentTest {
698699

699700
运行结果:
700701

701-
![类的成员方法](http://img.blog.csdn.net/20150813220704385)
702+
![类的成员方法](img/OOP_10.png)
702703

703-
## **2.11 类的初始化过程**
704+
## 2.11 类的初始化过程
704705

705706
Student s = new Student();在内存中做了哪些事情?
706707

@@ -712,34 +713,34 @@ Student s = new Student();在内存中做了哪些事情?
712713
- 通过构造方法对学生对象的成员变量赋值
713714
- 学生对象初始化完毕,把对象地址赋值给s变量
714715

715-
![类的初始化过程](http://img.blog.csdn.net/20150828000355991)
716+
![类的初始化过程](img/OOP_11.png)
716717

717-
## **2.12 static关键字**
718+
## 2.12 static关键字
718719

719720
static关键字可以修饰成员变量和成员方法
720721

721-
### **static关键字特点**
722+
### static关键字特点
722723

723724
- 随着类的加载而加载
724725
- 优先于对象存在
725726
- 被类的所有对象共享
726727
- 这也是我们判断是否使用静态关键字的条件
727728
- 可以通过类名调用
728729

729-
### **static关键字注意事项**
730+
### static关键字注意事项
730731

731732
- 在静态方法中是没有this关键字的
732733
- 静态方法只能访问静态的成员变量和静态的成员方法
733734

734735
静态的内存图
735736

736-
![静态的内存图](http://img.blog.csdn.net/20150828000409178)
737+
![静态的内存图](img/OOP_12.png)
737738

738739
静态变量和成员变量的区别
739740

740-
![静态变量和成员变量的区别](http://img.blog.csdn.net/20150813205338861)
741+
![静态变量和成员变量的区别](img/OOP_13.png)
741742

742-
### **main方法是静态的**
743+
### main方法是静态的
743744

744745
public static void main(String[] args) {}
745746

@@ -750,15 +751,15 @@ public static void main(String[] args) {}
750751
- String[] args 以前用于接收键盘录入的
751752
- 静态什么时候用?
752753

753-
### **静态变量**
754+
### 静态变量
754755

755756
当分析对象中所具备的成员变量的值都是相同时,这时这个成员就可以被静态修饰。
756757

757758
只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
758759

759760
如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。
760761

761-
### **静态函数**
762+
### 静态函数
762763

763764
函数是否用静态修饰,就参考一点,就是该函数功能是否需要访问到对象中的特有数据。
764765

@@ -802,10 +803,12 @@ class MainDemo {
802803

803804
运行结果:
804805

805-
![静态函数](http://img.blog.csdn.net/20150813224614357)
806+
![静态函数](img/OOP_14.png)
807+
808+
# 3. 修饰符
809+
810+
![java修饰符](img/OOP_15.png)
806811

807-
# **3. 修饰符**
808-
![java修饰符](http://img.blog.csdn.net/20150914161952036)
812+
# 4. 关键字
809813

810-
# **4. 关键字**
811-
![java关键字](http://img.blog.csdn.net/20150914162708532)
814+
![java关键字](img/OOP_16.png)

0 commit comments

Comments
 (0)