该用户从未签到
|
1 面向对象(OO) 0 P/ _3 f' `$ \6 x+ S% |
1) 什么是Object(对象), Object 本意:东西,是指一个具体事物实例 U0 y2 G1 M0 c% ~
2) 面向对象, 面向客观事物之间的关系.; t, `7 u, u) @7 @0 a) b
4) OOA面向对象分析/OOD 面向对象设计
9 n6 [8 O$ b8 L# ^9 W+ ? 客人来了(来了一个客人类型的某人)
1 H2 I4 A, V9 |) o1 }( ^6 _( X
5) 面向对象概念+ J6 j7 T- H" T8 z/ V. x" B* Y% u- n
A 类型: 名词概念, 如: 客人, 菜品, 厨师& f f% V, K7 t& I0 l, v3 G, @
B 引用(变量): 引用具体概念实例的代词, 如: 某人, 特价菜
+ R+ E# v4 K. k' ^! x5 ? }# d C 对象(东西): 具体概念的个体实例,如:张三丰这个人, 一盘大盘鸡
; \( R7 w+ ~& a% J D 行为(方法)
0 V" H, n5 k: s% R9 {& ]# y# X. I- Z 基本特征:
1 {# C% u+ Q1 C2 L/ u+ ^" p0 ^ A 多态: 行为/引用, 在具体情形下发生了变化的现象5 ~) Y e/ G; U* ~, l. I) \" [
一盏灯: 多态的$ P6 A+ x/ G% H2 Q
打: 根据宾语发生变化
$ \2 o2 G8 R3 p B 封装: 任何对象实例都是尽可能封装, 减少暴露5 v# e( s& x1 Q0 B% [+ y( h7 l+ ]
C 继承: 概念的继承关系 b9 q; f$ ]' a5 w, `" s! A
1 e8 y. a3 t* l# ]& G/ G3 f0 R4 ?5 @4 u2 java 类型, 引用变量 与 堆对象
5 @0 M% l- d+ e 1)Java 类, 是用来描述事物类型的. 如: 书
- a$ n' Z$ U) G0 \4 M <图书馆管理系统>中的概念: 书 Book2 W3 w% d5 \7 ~; i/ {2 J& E0 [, B
书的特征: 书号, 书名, 编号, 作者, 价格... - I. s! h7 U! R9 z7 Z" R
2) 类的声明:, w* _$ R5 Y3 B; S: |% m5 }
public class Book{
( U, k) h7 A' z4 Z$ @1 T8 C long id;/ a# O; Y3 {5 _
String name;
8 A5 Z% W3 I6 p: S* c String isbn; //书号
% ^6 e8 R' Z7 t$ q% @ String[] authors; //作者2 l# {) O, W0 j% K3 v6 N
double price;: l$ [7 U% H ]( \
}' d, j- ~2 f7 }0 B8 I
3) 引用变量与对象的创建过程:
$ X C3 ]# u0 o- Y A Java的内存管理与分配:1 v6 v5 L0 i" \! z( D, ?' l
栈是一块Java使用内存区域, 使用的方式 IFO(后来者居上)6 X: t& z( B D* ]* O
堆也是一块Java使用内存区域, 使用方式: 无需随机分配# [. M4 H- m" l! B7 c& k
B 局部变量 与 堆对象空间分配6 U0 R/ f7 z# R5 K& r& N$ f
Java 局部变量在栈中分配, 是按照变量的类型分配
5 X+ ^) m/ I [7 E8 n 对象在堆中分配, 按照类的属性(实例变量)分配空间' W% y* F/ g* [" c
C 变量类型与分配- w. i i3 h2 u: a% t
变量分为: 基本类型和引用类型
. Z1 J, ^# l# P( x" S. u. S 基本类型变量的空间大小: 就是基本类型的空间大小, 值是基本类型% D; m( c+ L) I
的值
7 K4 C1 ~- x2 T: s- g9 G2 A! V6 |0 l% M 引用变量的值是一个对象的地址值, 引用变量通过地址引用了一个堆
& A" E, v9 E( u4 r 对象.引用类型变量的占用空间大小和值管理是"透明的(不可看见)",
; Z& P/ S( V& _ 由Java系统管理: 变量占用空间以及值的管理, 都是透明的.
6 @: }- @# v! |% n/ D" y+ q) [- u- v! v$ G0 r2 a {: H
4) 对象的属性默认自动初始化的. 自动初始化为"零"值, 引用为null
& K' `$ C* c; t# Q 5) 在null引用上调用属性或方法, 会发生运行时异常% V7 `1 F4 s* j% L0 v, z
4 `& G5 [) [' h 案例:
$ D0 p( m: x9 T: p# L8 w9 t. r 平面绘图坐标系中的一个点(Point),定义合理的属性# ]5 Y, H8 _% ~4 p
坐标是int类型.
4 S+ {# U- U- Q; p% } O+-----------------------------> X
" M9 {0 R" ^# K- L) S- X# Q" p |) e$ b' p1 W( @! V3 u6 @& k
|7 N4 z6 z% X! U+ _
|6 [: \9 Z2 Y$ Z v0 u' U
|% M, N- Z1 ?5 w
| . p(x,y)! l1 j4 ]" a6 o1 X. k& t
|
3 R2 c: \. k- G9 n/ o( r |. o: A1 V% d1 s) U* `
|, L8 ~ s! n7 G9 F0 q; C. w
|- s9 V; U( a8 X5 O
, k% k& c( z; g; A+ d3 C Y4 b' ?% c0 Q. r) S) h
/ r, J5 F3 H& b4 k7 o7 P( S3 S( R4 o3 构造器(构造方法) 的作用: 用来描述对象的创建过程的.# q4 H% G% \: ^5 a2 t
1) % D7 I8 L( m: H1 S) ?7 w
如: 月饼实例的创建, 使用面和馅创建.. g) V, y5 @" F$ X0 ~% w% f
制作(构造器)4 G8 I9 x. J2 b2 m; x
月饼模子(类) -----> 月饼(对象)
* R8 O* E( R9 l$ S8 G$ h 原料(构建参数)! m }0 D( W% G$ R5 a" x2 p) z
( \ X: x2 E" y% S/ K% u% k
点类型 --------> 原点 + |: B0 r6 e& }" k* r5 l
坐标(1,2)+ r- k3 p1 F! r/ A1 u+ J J2 I
; c: x: ^# b# s x
2) Java中的构造器: 声明在类内部, 方法名与类名一致+ a, L4 ^+ N) M; r+ K6 S
的方法叫构造方法, 构造方法不能声明返回值类型., c" a2 i7 V+ Z+ q4 |* c, d
构造方法可以包含参数, 参数一般是创建对象实例) w! f z/ B& D
必须依赖的条件(前提条件).
$ Q2 U2 J7 p+ {8 \& S- B$ @ public class Point {
! r8 z4 S2 t( ^- a( W( S int x;0 c# w3 z- t1 f& u9 x9 d
int y;
0 R# p8 W( w: k* C- x1 E% B /** 构造器 */
4 ^: {9 f. }# [4 A- Y6 R6 m8 K, [ public Point(int x, int y){
/ R Z* C! X! c this.x = x;
: t0 x5 \4 V- p0 [. _4 b/ k1 q" H this.y = y;
% ^, B5 |) L: C( M: B& Z% u }
) R7 ^4 j1 d1 a4 W: i7 q2 c }
L) X9 ]: ~& \; L E+ a5 q' X! {7 O; D+ P
3) 对象实例化过程:. `7 [0 i. E3 V4 @; M1 D$ p! ?
new运算: 创建对象实例
' V' y2 R) z+ s9 `2 l 1 根据类的属性在堆中分配对象空间.并且自动初始化实例变量& O7 k7 b' m( q9 _% f* b
2 根据参数类型调用构造器.
: ?) ^* z0 u1 m) y0 j0 ^8 _; a 3 new运算返回对象的引用地址.$ @7 F1 @/ L6 q: X! A0 I; d1 E
2 j2 ?" C# | g 4) this 关键字0 Q. D7 I J) Q. f4 E
this 是对当前对象的引用, 是运行期间当前对象本身.
: w3 g$ K q1 \7 T9 L 可以使用this明确的访问当前对象的属性或者方法7 I6 n: {& v' Z0 n; W
类似于"我".# A4 t0 ^& H2 O" M* }8 @' _4 I8 N
this() 是调用本类的其他构造器, 可以使用构造器的重用, 4 @" t) d* q/ c
简化代码的实现.
9 l5 I5 |8 C$ ~' x8 d- v2 { * this() 必须写在构造器的第一行!
) M2 l6 Y& e N' g- K/ Y! x/ L: Q6 _! Z i9 u( o# y
5) 构造方法重载: 参数不一样的构造器
( U+ j! F* K' c% @9 K, i 案例: Point.java7 c7 T- [% J5 P# r9 Z
方法签名 = 方法名+参数类型列表
2 v, f9 L( k1 I 方法重载:a 方法名一样 b 方法参数不一样
8 A& K) p" G$ X6 V. H0 H9 f& e8 ] 也可以说: 方法名一样, 方法签名不同的方法/ ^& u6 J2 I7 j# W
0 t; Q) F4 l+ `& S& C* ]2 U2 `
6) 默认构造器6 B# ~' g2 R' O8 m+ O) r
1 java 类一定有构造器
7 r/ ~* I1 y$ l% N( A 案例: ConstructorDemo.java
0 T8 {1 f2 I+ h# z/ A 2 如果类没有声明任何构造器,Javac自动提供一个
) N. P" x2 r! I; q2 F4 p 默认构造器, 无参数默认构造器
4 l% Z/ `6 @8 E0 n/ D7 P( Y) ]2 _ 3 如果提供构造器声明, Javac将不再提供默认构
& [" m2 {& G) j0 |- }& U6 p 造器.
! @& g7 O3 ]& x0 a$ {6 a! A
2 [ P+ p, T; J5 r5 O* _7 v6 x5 f4 对象的方法
8 Z4 q3 P; t& I: F0 { 1) 表示对象的功能, 依赖于对象存在.
+ Q, M3 d0 F' L* i% `7 l 案例: Point.java
9 u/ _7 {! e% {0 _ 如: p1.distance() 和 p2.distance()
! D0 g' b" q* ~, K* X# M7 Q 方法是动作,是功能,一般用动词声明.
; }, N& \$ J. A% I u 2)方法也经常重载, 重载:方法名一样, 参数不一样重载体现了,7 a( R% v4 a# M
功能的多态.重载的方法经常互相重用." c# \/ f0 q5 d. }' J$ p* R
. w! v& j/ a7 t
对象: java运行期在堆(内存空间)中分配, 大小按照属性分配
( v% \; x7 D8 f; H 引用(引用变量): 临时变量(方法中的变量和方法参数)在栈中分配4 l. ?* v, M3 Z- H
实例变量(对象属性)对堆对象中分配(如: 书的名字)
, }/ @# v4 i7 [! \. a( W 引用变量的值是地址值(透明管理,不可见), 通过这个地址; h* t' f Z) c/ J7 X
值引用了一个堆对象.
4 e) |! ~7 O* R; D8 Q `( ^; l+ M7 a( n' T
不确切说法: 引用的值是对象
; e/ B2 I) L: k" w: M' r2 h& C$ B 引用变量在栈中分配' R& V# c' y) k+ P1 B( |" v* T
类(类型, 是名词概念): 对象的模板, 是对象的样子, 蓝图, 类型决定了! n( o2 |+ S, y" z# z( K5 @
对象的样子.( x' P5 j& L" v
. }% {8 M+ T0 `" J( E; H1 o 想着对象写类型: 面向对象, 类是对象的抽象化2 x" {4 C# W0 I
5 s- A% l0 G8 K
方法的重载: 体现了行为的多态现象! Q: W1 ]9 `8 v' a
8 Q1 h. K0 t" S+ |7 g |
|