该用户从未签到
|
1 面向对象(OO)
) E! H) b& {, Z6 _1 M5 Z& m1 n! E6 e1 D 1) 什么是Object(对象), Object 本意:东西,是指一个具体事物实例# e' m8 `0 r, e6 F1 d
2) 面向对象, 面向客观事物之间的关系.$ Y" ]" O- @( P
4) OOA面向对象分析/OOD 面向对象设计% @5 x1 d( g: _: q
客人来了(来了一个客人类型的某人)
) b% E3 b' U8 Z( `( v( I+ p
/ D+ K# a; k0 ]6 B, z 5) 面向对象概念1 H0 k y4 H2 h% S6 |* W/ c
A 类型: 名词概念, 如: 客人, 菜品, 厨师( c- t0 L4 B( G: q e
B 引用(变量): 引用具体概念实例的代词, 如: 某人, 特价菜; u( p, r! G5 g0 M& _& L7 ^# \
C 对象(东西): 具体概念的个体实例,如:张三丰这个人, 一盘大盘鸡
4 L& S W9 I' z5 \1 @- a D 行为(方法)
8 v- L6 u P8 k7 x: }' J 基本特征:. b+ B/ ?' f# t8 h
A 多态: 行为/引用, 在具体情形下发生了变化的现象, L: I6 A' d' h- J" f: e
一盏灯: 多态的; }# w! g8 `! u/ |) c( A: n- |
打: 根据宾语发生变化
4 Y: ^7 u* T1 C6 _' h B 封装: 任何对象实例都是尽可能封装, 减少暴露
$ Q* I0 h0 g3 F1 e& y) c C 继承: 概念的继承关系
( a1 }; Z/ s% y1 j- X1 q5 F
$ j+ W$ ~ ]* P7 N. Y# M6 W2 java 类型, 引用变量 与 堆对象6 L5 K" o/ e. j8 Z) P( Q( C5 L9 y
1)Java 类, 是用来描述事物类型的. 如: 书6 P' n3 v2 n( D
<图书馆管理系统>中的概念: 书 Book M5 g* J$ c/ i% v+ w- w5 n. v: c
书的特征: 书号, 书名, 编号, 作者, 价格...
5 p8 \. V, Y) B, u 2) 类的声明: P. v9 a( C# f
public class Book{
4 z% R" k5 I# ]/ v1 t5 J! Z, P long id;
/ K: ~( t/ p( G0 p% y5 F7 U' F String name;; O0 Q! t# M3 S ~7 d/ M
String isbn; //书号
) ^8 [7 P% t5 ^" n. v+ W1 p* ]8 J String[] authors; //作者( k6 U+ D6 c& a0 O* _
double price;
8 `. w; |% D% J }5 T \$ t0 ]- h% c7 h. y
3) 引用变量与对象的创建过程:! t& z* x, r1 K0 c
A Java的内存管理与分配:
4 u4 v- U G/ C1 d, G7 m 栈是一块Java使用内存区域, 使用的方式IFO(后来者居上)
' l o# g3 s) a7 a3 N 堆也是一块Java使用内存区域, 使用方式: 无需随机分配
& _. h" e6 C: u: z3 ^# W4 v8 N B 局部变量 与 堆对象空间分配. s" u* j$ H- M" P1 _; c; B) U
Java 局部变量在栈中分配, 是按照变量的类型分配
: a5 Y! j8 k6 v" ^ 对象在堆中分配, 按照类的属性(实例变量)分配空间$ Y2 h: [/ n6 S( s+ K- y
C 变量类型与分配
) H% J$ I, E% {+ d& K! l 变量分为: 基本类型和引用类型" t0 e q1 I: v
基本类型变量的空间大小: 就是基本类型的空间大小, 值是基本类型
7 X0 b& P+ S: e 的值, h" ~0 H+ I( N4 X! j- T
引用变量的值是一个对象的地址值, 引用变量通过地址引用了一个堆
6 ?. l0 B+ N/ B+ W+ _- } 对象.引用类型变量的占用空间大小和值管理是"透明的(不可看见)",
: U1 o$ l! [7 |+ y' G 由Java系统管理: 变量占用空间以及值的管理, 都是透明的.
4 X! e' F0 g! `& t2 J- P: y/ s3 k+ c* j
4) 对象的属性默认自动初始化的. 自动初始化为"零"值, 引用为null
9 w7 t8 s: p. }8 C, O 5) 在null引用上调用属性或方法, 会发生运行时异常
5 U6 s/ o" ^2 a2 h, R9 T
1 _! _, j p. _, R; I, ` 案例:- J$ |, `( ^. G/ X) Z0 J
平面绘图坐标系中的一个点(Point),定义合理的属性
% c) D; X+ _+ R4 L/ d, P+ q 坐标是int类型.
& G9 K8 N- l5 [) } O+-----------------------------> X1 \$ i6 d5 ]+ l N( ?
|9 I& o l0 l5 f) Z) \( h
|
; w& \/ e# y+ q( k3 C( \8 G( b |
- _* S4 v! j: _7 W8 G8 ~1 K K |
1 |6 q, P$ {5 d" S! o* s) R | . p(x,y)
# |5 o; n6 f5 p4 C |
9 K" ] n6 x+ v3 S4 d o |& i$ `5 x) O1 D. }# i) C
|. y" G1 b; R, C. H
|
k3 ?5 x1 y- B% P+ }4 E) A3 f$ Z7 H, ~ J
Y
9 @% x) D0 {, q1 d K1 }# e& {' m z3 e+ G. p" o
3 构造器(构造方法) 的作用: 用来描述对象的创建过程的.
" R( J* v5 |8 s- W e' A; D 1)
1 s. l, V$ U( p6 k- ^ 如: 月饼实例的创建, 使用面和馅创建.5 ?- W2 B/ I [2 }/ ?
制作(构造器). s+ W& |$ D' U) ?& ]4 ]6 `
月饼模子(类) -----> 月饼(对象)
7 Z/ h, F" a' q7 U, C/ B 原料(构建参数)+ Y+ V3 t, H0 ~5 k. K
1 x9 E- {9 m6 e 点类型 --------> 原点 ) K4 U* w8 |8 I( w
坐标(1,2)
4 g* D% S- N. \2 p3 Q
% g/ C: E# [ I/ L& h! H 2) Java中的构造器: 声明在类内部, 方法名与类名一致
" Q7 a1 [! S k" x% G9 U 的方法叫构造方法, 构造方法不能声明返回值类型.
5 m: M+ V( M" I; X# a' C 构造方法可以包含参数, 参数一般是创建对象实例
" [" l8 H; _( B+ R# v$ @2 n 必须依赖的条件(前提条件).
; C! B+ r0 |4 `6 m public class Point {) `, U. M, m/ U! w" A" G
int x;- G9 y/ w' z8 _, s: _! Z
int y;* \4 }) Z( E. ^2 f, k* H* A
/** 构造器 */: N6 U8 N/ A7 [4 V2 j* S" x
public Point(int x, int y){
! }9 i* W L& f5 i this.x = x;! U" c/ R& F& S7 t. d2 v B
this.y = y;
# w( U) |7 |) K' v }- o, p* @# g. q
}
# v2 l( Z1 I. T' L& L4 B
: T5 c1 Y" q4 `. g0 a |5 m2 b 3) 对象实例化过程:
9 X2 o: T& j" C8 s8 [: H) i x new运算: 创建对象实例
* I# t* Z4 ?- R2 V) | 1 根据类的属性在堆中分配对象空间.并且自动初始化实例变量
1 q1 ]* R, H @6 i7 d 2 根据参数类型调用构造器. - G/ v$ N+ l) f" I
3 new运算返回对象的引用地址.
* o0 h: V' @2 W- ~4 J
" |+ U* [# h' b1 _. P/ G8 _ 4) this 关键字5 S/ }" p+ L }
this 是对当前对象的引用, 是运行期间当前对象本身.
: p( l$ [; Y7 o. r 可以使用this明确的访问当前对象的属性或者方法+ c9 J2 j) F2 j* Q
类似于"我".+ q' N7 Q2 A9 c, D0 G! n0 @ L
this() 是调用本类的其他构造器, 可以使用构造器的重用, $ l' m& q; ~) o5 t! X- w
简化代码的实现. 1 n( j# T* W4 H9 A
* this() 必须写在构造器的第一行!# [# s0 f$ F) q8 u* s# ]3 h- B9 p
+ a* e' @! U' p, X 5) 构造方法重载: 参数不一样的构造器
6 `4 p$ o- k# e7 [1 d: E, ? 案例: Point.java8 M- D- q2 \) `* o! e/ d4 u
方法签名 = 方法名+参数类型列表/ D( c; P2 w) ?. D2 Q/ e8 U
方法重载:a 方法名一样 b 方法参数不一样
$ [' X; ?0 ?4 |1 D/ T 也可以说: 方法名一样, 方法签名不同的方法+ o7 N9 u! d' ^* u. Z7 F
, e1 {$ ]! x8 W, u
6) 默认构造器% o( S) Z" Q% x: ? r c* j
1 java 类一定有构造器3 s, q+ _( S) w+ o: }. e+ }5 v
案例: ConstructorDemo.java
p. G( w" A2 i/ c9 t' {) `! k: t 2 如果类没有声明任何构造器,Javac自动提供一个& K. D+ G- m# _: S* U$ C4 l
默认构造器, 无参数默认构造器0 }" d3 L; Y$ r8 F4 j
3 如果提供构造器声明, Javac将不再提供默认构# o1 X9 Z) v6 {. g1 z' C, ?: ~8 i
造器.
: m2 X6 J1 [) f
) }' K! Y1 P$ q+ \6 L, Z4 对象的方法, f# X3 C9 a% T$ H
1) 表示对象的功能, 依赖于对象存在.
6 n0 N) @$ R& H# ?; H; y9 j# Y 案例: Point.java
R. ^ [( ]9 S! t' c3 ^ 如: p1.distance() 和 p2.distance()
4 ?5 s7 q! J- L4 Q 方法是动作,是功能,一般用动词声明. " r+ M: f3 W7 C4 G K
2)方法也经常重载, 重载:方法名一样, 参数不一样重载体现了,- p! @2 V# d2 d5 h, O7 E) k
功能的多态.重载的方法经常互相重用.( R1 ?+ x0 |" D, n+ w5 O
- \, S8 H* r% O. J, e& `! Z" e 对象: java运行期在堆(内存空间)中分配, 大小按照属性分配+ s9 ]" V# s4 s b2 D! y; M
引用(引用变量): 临时变量(方法中的变量和方法参数)在栈中分配& g3 o1 Y! W4 a4 l, i0 \
实例变量(对象属性)对堆对象中分配(如: 书的名字)4 J% _+ C: g1 d* F' N+ l1 p
引用变量的值是地址值(透明管理,不可见), 通过这个地址+ J# R9 @" [; m: F
值引用了一个堆对象.
; y$ T/ |! y$ g6 F8 B+ ~! }7 o2 _0 x N/ N# I) s
不确切说法: 引用的值是对象
1 [: h& j2 \# M 引用变量在栈中分配
& u1 w$ M7 }% o2 ^# _) _2 s0 Q- n 类(类型, 是名词概念): 对象的模板, 是对象的样子, 蓝图, 类型决定了
5 T5 Y2 ~2 {4 B% V! \ 对象的样子.
4 Q0 ^- L0 O7 Y6 {# g) B b" H: [3 I# f, l5 i6 l2 h* C3 v$ {5 V
想着对象写类型: 面向对象, 类是对象的抽象化1 q; n. [* K8 E, }8 G$ L3 V
9 U% @5 H! q2 c4 U0 J 方法的重载: 体现了行为的多态现象
! y2 `2 z& Q2 K) S7 Z5 c2 j: }- I$ [; h3 x8 u( j
|
|