1
- # ** 1. 面向对象思想**
1
+ # 1. 面向对象思想
2
2
3
3
面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
4
4
16
16
17
17
多态性指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。例如,当听到“Cut” 这个单词时,理发师的行为是剪发,演员的行为表现是停止表演,不同的对象,所表现的行为是不一样的。
18
18
19
- ## ** 1.1 面向对象思想引入**
19
+ ## 1.1 面向对象思想引入
20
20
21
21
面向对象的编程思想,力图让程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出了两个概念,即类和对象。其中,类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。
22
22
23
23
前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码封装到方法中,需要遍历时,就调用相应的方法即可,提高代码的复用性。在对数组遍历的基础上继续增加需求,比如获取最值,数值逆序等,同样需要将这些功能封装到相应的方法中。这样继续封装会发现方法越来越多,于是就想能不能将这些方法继续进行封装呢?通过前面的讲解我们知道类是可以存放方法的,所以,我们就考虑使用类封装来这多个方法,将来再做数组的操作时,不用去找具体的方法,先找到这个类,然后使用这个类中的方法。这就是面向对象思想的编程方式。
24
- ## ** 1.2 面向过程思想概述**
24
+ ## 1.2 面向过程思想概述
25
25
26
26
我们来回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
27
27
30
30
那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
31
31
32
32
面向过程的代表语言:C语言,强调的是每一个功能的步骤
33
- ## ** 1.3 面向对象思想概述**
33
+
34
+ ## 1.3 面向对象思想概述
34
35
35
36
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。接下来我们看看面向对象到底是什么?
36
37
62
63
63
64
面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃
64
65
65
- ## ** 1.4 面向对象开发、设计、特征**
66
+ ## 1.4 面向对象开发、设计、特征
66
67
67
68
面向对象开发:就是不断的创建对象,使用对象,指挥对象做事情。
68
69
面向对象设计:其实就是在管理和维护对象之间的关系。
73
74
- 继承(inheritance)
74
75
- 多态(polymorphism)
75
76
76
- # ** 2. 类与对象及其使用**
77
+ # 2. 类与对象及其使用
77
78
78
- ## ** 2.1 类与对象的关系**
79
+ ## 2.1 类与对象的关系
79
80
80
81
我们学习编程语言,就是为了模拟现实世界的事物,实现信息化。比如:去超市买东西的计费系统,去银行办业务的系统。
81
82
95
96
类:可以理解为构造对象的一个蓝图或者模版,是抽象的概念
96
97
对象:是以类为模型创建的具体实例,是对类的一种具体化。
97
98
98
- ## ** 2.2 类的定义**
99
+ ## 2.2 类的定义
99
100
100
101
现实世界的事物有属性(人的身高,体重等)和行为(人可以学习,吃饭等)
101
102
@@ -157,23 +158,23 @@ class Student {
157
158
}
158
159
```
159
160
160
- ## ** 2.3 对象内存图**
161
+ ## 2.3 对象内存图
161
162
162
163
只要是用new操作符定义的实体就会在堆内存中开辟一个新的空间,并且每一个对象中都有一份属于自己的属性。
163
164
164
165
通过对象.对象成员的方式操作对象中的成员,对其中一个对象的成员进行了修改,和另一个对象没有任何关系。
165
166
166
167
1个对象的内存图:一个对象的基本初始化过程
167
168
168
- ![ java对象内存] ( http:// img.blog.csdn.net/20150828000240303 )
169
+ ![ java对象内存] ( img/OOP_01.png )
169
170
170
171
2个对象的内存图:方法的共用
171
172
172
- ![ java对象内存] ( http:// img.blog.csdn.net/20150828000255740 )
173
+ ![ java对象内存] ( img/OOP_02.png )
173
174
174
175
3个对象的内存图:其中有两个引用指向同一个对象
175
176
176
- ![ java对象内存] ( http:// img.blog.csdn.net/20150828000312873 )
177
+ ![ java对象内存] ( img/OOP_03.png )
177
178
178
179
** 垃圾回收**
179
180
@@ -183,7 +184,7 @@ class Student {
183
184
184
185
## 2.4 成员变量和局部变量的区别
185
186
186
- ![ 成员变量和局部变量的区别] ( http:// img.blog.csdn.net/20150813204548057 )
187
+ ![ 成员变量和局部变量的区别] ( img/OOP_04.png )
187
188
188
189
注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
189
190
@@ -217,7 +218,7 @@ class VariableDemo {
217
218
}
218
219
```
219
220
220
- ## ** 2.5 形式参数问题**
221
+ ## 2.5 形式参数问题
221
222
222
223
基本类型作为形式参数:形式参数的改变不影响实际参数
223
224
引用类型作为形式参数:形式参数的改变直接影响实际参数
@@ -268,11 +269,11 @@ class ArgsTest {
268
269
```
269
270
运行结果:
270
271
271
- ![ 形参] ( http:// img.blog.csdn.net/20150813212944156 )
272
+ ![ 形参] ( img/OOP_05.png )
272
273
273
274
在java中,方法参数的传递永远都是传值,而这个值,对于基本数据类型,值就是你赋给变量的那个值。而对于引用数据类型,这个值是对象的引用,而不是这个对象本身。
274
275
275
- ## ** 2.6 匿名对象**
276
+ ## 2.6 匿名对象
276
277
277
278
匿名对象:就是没有名字的对象。是对象的一种简化表示形式
278
279
匿名对象的两种使用情况:对象调用方法仅仅一次的时候;作为实际参数传递。
@@ -330,9 +331,9 @@ class NoNameDemo {
330
331
```
331
332
运行结果:
332
333
333
- ![ 匿名对象] ( http:// img.blog.csdn.net/20150813213331412 )
334
+ ![ 匿名对象] ( img/OOP_06.png )
334
335
335
- ## ** 2.7 封装(private)**
336
+ ## 2.7 封装(private)
336
337
337
338
封装概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
338
339
@@ -418,9 +419,9 @@ class StudentTest {
418
419
419
420
运行结果:
420
421
421
- ![ private关键字] ( http:// img.blog.csdn.net/20150813214407836 )
422
+ ![ private关键字] ( img/OOP_07.png )
422
423
423
- ## ** 2.8 this关键字**
424
+ ## 2.8 this关键字
424
425
425
426
this代表其所在函数所属对象的引用。换言之,this代本类对象的引用。
426
427
@@ -486,13 +487,13 @@ class StudentTest2 {
486
487
487
488
运行结果:
488
489
489
- ![ this关键字] ( http:// img.blog.csdn.net/20150813215014819 )
490
+ ![ this关键字] ( img/OOP_08.png )
490
491
491
492
this关键字的内存图解:
492
493
493
- ![ this关键字] ( http:// img.blog.csdn.net/20150828000337090 )
494
+ ![ this关键字] ( img/OOP_09.png )
494
495
495
- ## ** 2.9 构造方法**
496
+ ## 2.9 构造方法
496
497
497
498
构造方法作用概述:给对象的数据进行初始化
498
499
@@ -607,7 +608,7 @@ class ConstructDemo2 {
607
608
初始化子类成员变量
608
609
初始化子类构造函数
609
610
610
- ## ** 2.10 类的成员方法**
611
+ ## 2.10 类的成员方法
611
612
612
613
成员方法其实就是我们前面讲过的方法
613
614
@@ -698,9 +699,9 @@ class StudentTest {
698
699
699
700
运行结果:
700
701
701
- ![ 类的成员方法] ( http:// img.blog.csdn.net/20150813220704385 )
702
+ ![ 类的成员方法] ( img/OOP_10.png )
702
703
703
- ## ** 2.11 类的初始化过程**
704
+ ## 2.11 类的初始化过程
704
705
705
706
Student s = new Student();在内存中做了哪些事情?
706
707
@@ -712,34 +713,34 @@ Student s = new Student();在内存中做了哪些事情?
712
713
- 通过构造方法对学生对象的成员变量赋值
713
714
- 学生对象初始化完毕,把对象地址赋值给s变量
714
715
715
- ![ 类的初始化过程] ( http:// img.blog.csdn.net/20150828000355991 )
716
+ ![ 类的初始化过程] ( img/OOP_11.png )
716
717
717
- ## ** 2.12 static关键字**
718
+ ## 2.12 static关键字
718
719
719
720
static关键字可以修饰成员变量和成员方法
720
721
721
- ### ** static关键字特点**
722
+ ### static关键字特点
722
723
723
724
- 随着类的加载而加载
724
725
- 优先于对象存在
725
726
- 被类的所有对象共享
726
727
- 这也是我们判断是否使用静态关键字的条件
727
728
- 可以通过类名调用
728
729
729
- ### ** static关键字注意事项**
730
+ ### static关键字注意事项
730
731
731
732
- 在静态方法中是没有this关键字的
732
733
- 静态方法只能访问静态的成员变量和静态的成员方法
733
734
734
735
静态的内存图
735
736
736
- ![ 静态的内存图] ( http:// img.blog.csdn.net/20150828000409178 )
737
+ ![ 静态的内存图] ( img/OOP_12.png )
737
738
738
739
静态变量和成员变量的区别
739
740
740
- ![ 静态变量和成员变量的区别] ( http:// img.blog.csdn.net/20150813205338861 )
741
+ ![ 静态变量和成员变量的区别] ( img/OOP_13.png )
741
742
742
- ### ** main方法是静态的**
743
+ ### main方法是静态的
743
744
744
745
public static void main(String[ ] args) {}
745
746
@@ -750,15 +751,15 @@ public static void main(String[] args) {}
750
751
- String[ ] args 以前用于接收键盘录入的
751
752
- 静态什么时候用?
752
753
753
- ### ** 静态变量**
754
+ ### 静态变量
754
755
755
756
当分析对象中所具备的成员变量的值都是相同时,这时这个成员就可以被静态修饰。
756
757
757
758
只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
758
759
759
760
如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。
760
761
761
- ### ** 静态函数**
762
+ ### 静态函数
762
763
763
764
函数是否用静态修饰,就参考一点,就是该函数功能是否需要访问到对象中的特有数据。
764
765
@@ -802,10 +803,12 @@ class MainDemo {
802
803
803
804
运行结果:
804
805
805
- ![ 静态函数] ( http://img.blog.csdn.net/20150813224614357 )
806
+ ![ 静态函数] ( img/OOP_14.png )
807
+
808
+ # 3. 修饰符
809
+
810
+ ![ java修饰符] ( img/OOP_15.png )
806
811
807
- # ** 3. 修饰符**
808
- ![ java修饰符] ( http://img.blog.csdn.net/20150914161952036 )
812
+ # 4. 关键字
809
813
810
- # ** 4. 关键字**
811
- ![ java关键字] ( http://img.blog.csdn.net/20150914162708532 )
814
+ ![ java关键字] ( img/OOP_16.png )
0 commit comments