该用户从未签到
|
1 面向对象(OO)
3 @! T3 f l8 e) n 1) 什么是Object(对象), Object 本意:东西,是指一个具体事物实例5 D9 v* J/ I3 U) ?. i
2) 面向对象, 面向客观事物之间的关系.
^* c: z% q0 A6 {! O& k5 ` 4) OOA面向对象分析/OOD 面向对象设计/ y* ~, @( r% h6 C; t
客人来了(来了一个客人类型的某人)2 _ X; h$ L( B! i* ]/ K
0 B* M& A5 B% D4 d, Q 5) 面向对象概念" ^, b* m8 @6 a' H6 [
A 类型: 名词概念, 如: 客人, 菜品, 厨师
$ R5 L: w. x% F2 ]/ p+ f3 z" u+ ]0 T ^2 L B 引用(变量): 引用具体概念实例的代词, 如: 某人, 特价菜
J- x# _+ R6 [5 p" r C 对象(东西): 具体概念的个体实例,如:张三丰这个人, 一盘大盘鸡
6 V5 C9 w9 a+ v" V _ D 行为(方法)4 y' L) s% `1 ?( k+ n0 v
基本特征:
5 j) \5 T {% A8 M A 多态: 行为/引用, 在具体情形下发生了变化的现象
" ^7 u1 W( _6 F' T$ n; M 一盏灯: 多态的8 h) U0 W$ v- ]6 @+ q; @- c
打: 根据宾语发生变化
* N0 Z1 z" h) x& Z8 c) D% k0 p& g3 f/ J B 封装: 任何对象实例都是尽可能封装, 减少暴露) |, U: W8 c2 \$ @1 u7 j! V1 x
C 继承: 概念的继承关系
" d3 E# c2 B P6 N: g9 K; K1 c. h P4 I$ i, x5 Z
2 java 类型, 引用变量 与 堆对象
7 Q8 F9 P+ G0 u) o: @ 1)Java 类, 是用来描述事物类型的. 如: 书$ v& V6 x. e/ g: |' M, e5 R; c+ j
<图书馆管理系统>中的概念: 书 Book, G7 O' ], C$ c& n3 i: Q; X' V9 }- @
书的特征: 书号, 书名, 编号, 作者, 价格... ( Z ]+ Q6 A% a9 i \4 R& L5 S$ h
2) 类的声明:
0 |: z2 y- q8 a' J+ `) B" m public class Book{
" x7 U) t ]% ^: [ long id;0 {5 l2 k5 |+ N0 Q; w6 T+ m! d
String name;
; f4 ^! j$ x% v1 a+ [; Z6 u, s9 n String isbn; //书号
0 Z2 i9 x# }* _) g7 R! d0 Q String[] authors; //作者
) m/ N1 u: Y% y+ ? double price;" P- V! d: \/ K5 _8 A, r% x
}
+ }! v- {$ x1 ^) ^! J 3) 引用变量与对象的创建过程:
( w3 \+ d( B. o4 x( i A Java的内存管理与分配:
+ O, H$ D2 C6 J v, @/ n; j 栈是一块Java使用内存区域, 使用的方式IFO(后来者居上)
+ P( s# _5 x5 ^; m$ F8 e, e% Y 堆也是一块Java使用内存区域, 使用方式: 无需随机分配
+ M% k L T6 s3 g6 ?' C B 局部变量 与 堆对象空间分配
+ J7 i$ g& ?+ q0 o Java 局部变量在栈中分配, 是按照变量的类型分配 1 {9 s# Z4 i4 b ?& o% [# {) H
对象在堆中分配, 按照类的属性(实例变量)分配空间
5 \# T) G7 b8 P/ O* U# G C 变量类型与分配
, f/ I1 i* D3 ]& N( q o9 | 变量分为: 基本类型和引用类型- e. S6 ^; l/ I+ P
基本类型变量的空间大小: 就是基本类型的空间大小, 值是基本类型/ `/ I9 T. ^6 [( i$ Q' F
的值- d6 W9 E" y+ j7 \* p2 I& J
引用变量的值是一个对象的地址值, 引用变量通过地址引用了一个堆6 ~/ C* @( {5 B9 T
对象.引用类型变量的占用空间大小和值管理是"透明的(不可看见)",
( V+ V c, U# x; t" y 由Java系统管理: 变量占用空间以及值的管理, 都是透明的. 1 D1 K9 Q# G- J7 u5 F) J
* ]$ ]0 [: i" v" z3 B. y
4) 对象的属性默认自动初始化的. 自动初始化为"零"值, 引用为null
$ E( M- J! y' H/ Q' u 5) 在null引用上调用属性或方法, 会发生运行时异常
; `/ a J B4 }; m4 B7 o% Y
, V* K2 s- Z5 p6 m, j 案例:: ~& M/ y4 M; }; Q! b
平面绘图坐标系中的一个点(Point),定义合理的属性/ R5 s$ v9 V( l
坐标是int类型.
; Q& B8 t. H: S O+-----------------------------> X7 s- y* l3 K) K! M K0 j/ W
|( b, T# N; |/ c
|; Z |: o, |& h* }+ S$ d
|: X$ d9 C+ V! [
|
. a! p# K5 r# x | . p(x,y)( d2 V( D5 D3 {4 V
|# X; O. ?1 K+ y/ l+ v! }& P* [. h
|2 u& X" w) ]% k; f+ I3 l9 j4 {
|5 Z1 |& v* a3 ^
|
" g# T5 Q$ m0 P3 ~) u1 ^6 h" o. @6 Q0 `) J4 ^1 w/ E3 J
Y- I9 K. ~! s9 u! D% r- ?
( y+ a6 M3 ]( a* z' W8 w
3 构造器(构造方法) 的作用: 用来描述对象的创建过程的.
$ h4 V: ]( X2 O# E3 _9 ^1 G( o 1) & r* v- P6 O) b5 N
如: 月饼实例的创建, 使用面和馅创建.& [$ g) l. ]" r1 h# g- y: m
制作(构造器)
" h* S5 U/ g$ A 月饼模子(类) -----> 月饼(对象)
9 i7 F! Q! L4 l- t3 j 原料(构建参数)
' R0 i4 W0 I( l$ G0 C
$ K9 r+ e0 g5 n) v. A 点类型 --------> 原点
# [$ b( w C( s 坐标(1,2)) H# z- W; M9 P% Y r
( A$ ~0 Y! Q, Q 2) Java中的构造器: 声明在类内部, 方法名与类名一致
: k L7 ^$ K' {0 j 的方法叫构造方法, 构造方法不能声明返回值类型.% o2 q1 N) }! L3 Q* e. C; B
构造方法可以包含参数, 参数一般是创建对象实例8 \+ o& B7 N+ F7 D4 `# x" J( m; [' a2 n
必须依赖的条件(前提条件).
) V; i$ i$ ]% C- g4 ^, l% u8 S public class Point {: q! }7 C0 S' ~' B% x5 F
int x;& V7 N) y. ^9 |9 I+ i5 {
int y;' t' a9 ^. \) X! y% J* N! |
/** 构造器 */
: S3 l% p' V4 ^# P) U& ?' a public Point(int x, int y){9 C$ t( @6 W* d( j5 v( M, P+ V
this.x = x;% Z- w4 Y( \6 x
this.y = y;/ @" Q; l+ h6 }4 q. W+ N' O7 |+ |$ @6 o
}: ^; n! A' t0 B5 j5 z# m* D& b+ U
}$ z3 R* o; l4 j: J" |2 b l" |
+ s2 L) n& {# A0 @* V% ] 3) 对象实例化过程:" u- R3 q; u, g2 S. t( i
new运算: 创建对象实例1 I# B2 l s- O9 a7 Y% {8 H# p0 _
1 根据类的属性在堆中分配对象空间.并且自动初始化实例变量
) M. f4 Z; k% }* B$ x/ U- C 2 根据参数类型调用构造器.
; ?$ G* t/ S% \1 X1 C1 m3 o7 m 3 new运算返回对象的引用地址.
# c6 L. G7 M5 w+ @! r0 S
5 v$ }% i, l5 q) U8 c 4) this 关键字
D! i4 n8 q* v. ]# c: ]' J this 是对当前对象的引用, 是运行期间当前对象本身.
- }9 P- `) s) o* Y2 Q' r5 N" I 可以使用this明确的访问当前对象的属性或者方法; }% @; ^& P6 }& L+ `9 T
类似于"我".# a: S2 \. m0 w' Z
this() 是调用本类的其他构造器, 可以使用构造器的重用, 9 g+ E' @ g5 `; B/ V3 f
简化代码的实现.
5 I3 p$ y: B2 ]6 ]3 Q * this() 必须写在构造器的第一行!
; y) K" M9 D5 D' b3 \5 Y# h, M) c, K6 B3 p! E. n, X
5) 构造方法重载: 参数不一样的构造器
7 a; ]7 n. f9 b1 \) { 案例: Point.java
; F% e3 P9 | k5 N9 W: | 方法签名 = 方法名+参数类型列表, D; g( d5 p% w% q
方法重载:a 方法名一样 b 方法参数不一样
/ z) B5 @! y# `% y 也可以说: 方法名一样, 方法签名不同的方法
* C. Z) \5 I x* W% c, C& D
4 ~ j) u5 D& R7 Q% U7 m 6) 默认构造器3 R- v M6 ^8 z1 q0 E( ]
1 java 类一定有构造器
4 o7 L& a) x r; K 案例: ConstructorDemo.java! Y& i6 _5 R8 d/ f8 }
2 如果类没有声明任何构造器,Javac自动提供一个. _) k8 o |6 d+ d& I
默认构造器, 无参数默认构造器2 W# k- n. G. `2 k
3 如果提供构造器声明, Javac将不再提供默认构
0 r$ f: x6 s0 g' W 造器. 5 p- s2 ^) k9 p) Q: `& s
$ ]4 j1 D3 B! E& y: [) A. D4 对象的方法
0 J9 H7 M+ z, a0 M& N/ V 1) 表示对象的功能, 依赖于对象存在.
7 i; o' v! Q& y: {" N4 Q! ~- \ 案例: Point.java) d7 B2 J% i7 \3 k$ }
如: p1.distance() 和 p2.distance()
5 f- u% ^9 `# d+ `# U, j6 j 方法是动作,是功能,一般用动词声明.
7 M H! g$ n1 Y: @% E 2)方法也经常重载, 重载:方法名一样, 参数不一样重载体现了,
; ^. Y4 ?5 x Z) ]% O 功能的多态.重载的方法经常互相重用.0 T$ B: j! ?8 F: k1 {: |" e
+ y+ ]0 j" y( r8 j0 @, D 对象: java运行期在堆(内存空间)中分配, 大小按照属性分配
9 I; N# X0 r; y; ]7 g) l4 E 引用(引用变量): 临时变量(方法中的变量和方法参数)在栈中分配: |$ T& j* x, d2 j1 c+ f' V
实例变量(对象属性)对堆对象中分配(如: 书的名字)
, y( F4 K. x+ {$ B& q$ M, U1 q1 k2 p( Z 引用变量的值是地址值(透明管理,不可见), 通过这个地址- y }9 S3 A+ j2 r; B
值引用了一个堆对象.
/ ] t+ l7 V. O+ j: \7 ?7 h0 |5 ^( L% b! j; o( C* h/ n# ~+ I
不确切说法: 引用的值是对象
4 x3 E* I; X5 p+ }4 c' O 引用变量在栈中分配4 \$ R4 D5 r& [! T: ~, x
类(类型, 是名词概念): 对象的模板, 是对象的样子, 蓝图, 类型决定了* J6 r, n! B) r6 ^9 r8 j
对象的样子.
9 x; q" Z- U) o% k4 l
" K; k. j. i& h3 N 想着对象写类型: 面向对象, 类是对象的抽象化9 F' N2 r* k- W4 w7 s d
7 Z, U0 M6 _% X& D h% t 方法的重载: 体现了行为的多态现象, O; X: {& M# y0 M D! A% R
% q5 n, ]' w( k* g6 R |
|