该用户从未签到
|
1 面向对象(OO)
. o9 E; G* ]3 R5 y1 O 1) 什么是Object(对象), Object 本意:东西,是指一个具体事物实例' n! o6 Q6 ]1 E' m
2) 面向对象, 面向客观事物之间的关系.
" y3 q8 E" C/ f" S- ~ 4) OOA面向对象分析/OOD 面向对象设计
* ^' X' t8 w5 G1 E; P 客人来了(来了一个客人类型的某人) V% L9 C1 A& q4 j8 t
1 |4 ]: h- T9 \8 } c
5) 面向对象概念
& F. ]: c% J8 `) w- T; `" E A 类型: 名词概念, 如: 客人, 菜品, 厨师
4 I/ U( g' R- m B 引用(变量): 引用具体概念实例的代词, 如: 某人, 特价菜
+ @3 k4 U8 o" m' h* q t. Y) U C 对象(东西): 具体概念的个体实例,如:张三丰这个人, 一盘大盘鸡, Y1 ~! ^2 T: m, o+ X5 K7 M
D 行为(方法)
% G% d/ `7 O O z; w 基本特征:( l; E, L3 M- [/ f+ V
A 多态: 行为/引用, 在具体情形下发生了变化的现象( R: g3 j" P5 z+ O+ U. ` Y- }
一盏灯: 多态的
4 g8 q% ^1 x# [ 打: 根据宾语发生变化. b0 o0 P7 ]! l0 E" m
B 封装: 任何对象实例都是尽可能封装, 减少暴露
, u9 V v0 b2 ?5 H1 \ C 继承: 概念的继承关系
) ~# Q7 D* a, ^) p) ^
$ f& `( v# G2 Z2 M2 java 类型, 引用变量 与 堆对象$ R& ], F% Z% ?0 u; c: \. m
1)Java 类, 是用来描述事物类型的. 如: 书
; \1 @- Q; {& m d, t7 n <图书馆管理系统>中的概念: 书 Book* r) @/ |$ f: R8 q8 f/ q
书的特征: 书号, 书名, 编号, 作者, 价格... 7 g% c$ g5 e/ m$ ?) u* N. ^
2) 类的声明:
% W0 V H k' z9 m- k public class Book{8 D6 Z/ d* s, z$ M) O0 G& E4 x* l
long id;
, l0 h, w v2 Z# M: y) d String name;. k" b; d" W- @! g+ P
String isbn; //书号
7 d, B* c8 R7 j T String[] authors; //作者9 S" G, r: H- F6 \5 c
double price;
% k% U% I- d2 \- `7 w8 @; ? }
8 B( l+ b; K' P, ]4 J; {2 v 3) 引用变量与对象的创建过程:# ^# E! d2 n% J0 @
A Java的内存管理与分配:
+ K) X1 N V5 M8 j' u 栈是一块Java使用内存区域, 使用的方式IFO(后来者居上)( r! N- C% q, d. H, S! l
堆也是一块Java使用内存区域, 使用方式: 无需随机分配) n' _' F- S5 d# r
B 局部变量 与 堆对象空间分配
( h6 Q) P6 ]: x/ E F& v$ A Java 局部变量在栈中分配, 是按照变量的类型分配 ' Q1 e9 C: k: u+ V' \$ |
对象在堆中分配, 按照类的属性(实例变量)分配空间( R" B5 x9 _( j2 S5 h! s/ u3 x
C 变量类型与分配( _* b( U3 N1 a# }* q% a9 Q
变量分为: 基本类型和引用类型
# a7 V# M% E [: H: x- F; c 基本类型变量的空间大小: 就是基本类型的空间大小, 值是基本类型
7 d/ p0 t4 ?4 r0 p 的值* b$ L; `( @+ R5 B+ ~ F: K
引用变量的值是一个对象的地址值, 引用变量通过地址引用了一个堆* ?" J7 p8 [; Z$ V
对象.引用类型变量的占用空间大小和值管理是"透明的(不可看见)",
0 Z& H/ @, u, s% z 由Java系统管理: 变量占用空间以及值的管理, 都是透明的. $ k9 F9 i' f; B6 X
$ s+ B* N; Y m+ z 4) 对象的属性默认自动初始化的. 自动初始化为"零"值, 引用为null! H# ]( b: Z; y( X7 \! `
5) 在null引用上调用属性或方法, 会发生运行时异常4 Q7 c6 ?3 A, }. H
/ Z$ j3 o6 y# x
案例:- a( f& `* w9 {% P: l0 R& T$ V2 o
平面绘图坐标系中的一个点(Point),定义合理的属性, k9 q9 G. Q9 J$ J% o2 F8 }2 P; u
坐标是int类型.# j( U* ~- M8 V0 `
O+-----------------------------> X: S9 U6 Q$ a3 h( U3 m0 K
|* @) k9 \; t2 Z% d
|5 T; b4 m4 }; n8 ]. b8 P" g/ m
|
$ G7 a* p5 }* g" T0 A X1 a |
9 C) M" @/ ~: u' v, u% w0 Y& i | . p(x,y)# N4 ^! s% l- H/ W ~
|
2 a9 n/ k2 r9 V |
5 W [ ]) m3 @, C2 Z0 N- u |
2 s* ]) k* C) ^( f0 ` |
' W, p3 v& d4 J! ^' o* p \: O; q8 H
% S* E A! s2 s3 B4 r Y9 F( {2 K' P F9 H
$ h- t* f% j3 v$ L6 i3 构造器(构造方法) 的作用: 用来描述对象的创建过程的.
# b$ _% M- a4 e8 U) b3 { 1)
9 [' ^ i3 X& D# C( A/ z 如: 月饼实例的创建, 使用面和馅创建.3 r2 y. J' K7 l: u' O
制作(构造器)0 r$ ]& c0 |( v4 h
月饼模子(类) -----> 月饼(对象)% u6 q2 F% Q) h8 Q. [, q0 A% w
原料(构建参数)
8 e% P3 A) ?; s# c1 u8 M3 W# q. d o# e9 E
点类型 --------> 原点
- {' m# l' i% l4 q+ I4 } 坐标(1,2); I+ ?7 ?! D; i
, ~' L# [! O- n0 o
2) Java中的构造器: 声明在类内部, 方法名与类名一致
% t$ m2 ^$ p; c3 P4 ~. w 的方法叫构造方法, 构造方法不能声明返回值类型.+ R ?, x8 q8 g
构造方法可以包含参数, 参数一般是创建对象实例
?1 s. h3 U1 h& w/ b. o 必须依赖的条件(前提条件).
1 F* L' T0 E0 O% s6 p4 Z8 N7 G) L4 | public class Point {7 u- Q6 c* J# u" H: |6 U C
int x;
. B7 L2 @) H3 K4 r& Y+ ~ int y;7 P& |7 M+ u) z9 w, {
/** 构造器 */
1 V# @! T9 Q) i# s. g- q/ c public Point(int x, int y){
% [# I: p. L9 o0 }$ ^/ a! ]( q; q this.x = x;
# g' \5 L) w" `( d/ \" { this.y = y;6 q6 E8 `6 O, J5 a6 k: c
}
3 [. p' c6 ~ ]1 }/ U }8 e4 z! W. B6 J& G, t
* T" T! w3 U8 a1 y 3) 对象实例化过程:& z9 R/ H8 ?' r) {3 }. N# H
new运算: 创建对象实例5 g w8 ]1 e" w& x* r1 m
1 根据类的属性在堆中分配对象空间.并且自动初始化实例变量
% J! |1 f$ M* r 2 根据参数类型调用构造器.
" u- _( u4 b- F0 k+ u 3 new运算返回对象的引用地址.0 h# C( a. h" c; r5 X
! u' e/ F4 n" R/ d
4) this 关键字2 ]2 X, K* I' U7 r8 X; |" l
this 是对当前对象的引用, 是运行期间当前对象本身.' J2 c: j# h: A8 Q7 N& N
可以使用this明确的访问当前对象的属性或者方法3 _% b& ^* a5 ^! R
类似于"我".4 H m6 x* y T/ Q6 D
this() 是调用本类的其他构造器, 可以使用构造器的重用,
/ R; K* [5 v; f1 p! H" z6 [ 简化代码的实现.
9 t8 b# p( S s. f( F$ q: Z* E1 A2 _ * this() 必须写在构造器的第一行!8 u/ a" ]- j' S
8 E0 m+ O# R1 j$ b
5) 构造方法重载: 参数不一样的构造器+ X5 W3 a M! Y" [3 g
案例: Point.java
% v- V! g5 o* H. V 方法签名 = 方法名+参数类型列表0 B" Q( Y6 {0 K8 k5 q
方法重载:a 方法名一样 b 方法参数不一样: g" Y1 p( t3 R! B* V/ Q/ r
也可以说: 方法名一样, 方法签名不同的方法; o5 h$ W6 E& }+ v+ f1 U
6 Z, o5 q N2 e' i1 g- `4 { 6) 默认构造器
0 W: F4 ]) @ y 1 java 类一定有构造器
9 d8 |' y2 |/ g8 z; o 案例: ConstructorDemo.java
. G! B1 `( \9 \; f7 s 2 如果类没有声明任何构造器,Javac自动提供一个
* n; q) M/ D- B, j: n 默认构造器, 无参数默认构造器
( S. A" M) P9 ^: v; h+ ]; U* r 3 如果提供构造器声明, Javac将不再提供默认构% u. C" I- {4 K5 E' O# P' f! u
造器.
! @: `* j# B5 F. V% C& E
]4 X* K8 c! r; N! c+ \# E" H1 r' A4 对象的方法2 P8 M" T* i* d6 _2 `
1) 表示对象的功能, 依赖于对象存在.
7 W/ a' f' z& x9 h9 D 案例: Point.java
\( n- b* t+ E( R: ^6 b$ L" H 如: p1.distance() 和 p2.distance()
4 ~. T" w8 z- D) E& `1 ] 方法是动作,是功能,一般用动词声明. 1 [0 Q' v* n3 Z2 C7 q: C
2)方法也经常重载, 重载:方法名一样, 参数不一样重载体现了," ~+ e" Q4 L3 t
功能的多态.重载的方法经常互相重用.
; N1 s( G R5 L# g& v1 f
Z3 o( w) @6 w# X 对象: java运行期在堆(内存空间)中分配, 大小按照属性分配9 t: ]* ~8 h4 a' }. X% e
引用(引用变量): 临时变量(方法中的变量和方法参数)在栈中分配2 G) c6 p z1 L2 M1 Y
实例变量(对象属性)对堆对象中分配(如: 书的名字)
O1 S7 v5 G/ q 引用变量的值是地址值(透明管理,不可见), 通过这个地址
4 n. T5 P! ? A! {0 Q* | p 值引用了一个堆对象.- z: O* a$ f2 u1 j, ?
( S! P0 o3 l4 O4 T }) F ] 不确切说法: 引用的值是对象
; G3 b, `( {, i5 ~: `3 w' Z& f/ ]# V 引用变量在栈中分配1 @3 [# P5 B3 _8 G
类(类型, 是名词概念): 对象的模板, 是对象的样子, 蓝图, 类型决定了8 Q% Z4 h6 `6 b
对象的样子.
8 f4 H$ \! z% |7 C9 \) Q' I! J% b
( d y; z6 |6 y3 f5 ~. h 想着对象写类型: 面向对象, 类是对象的抽象化! M$ v/ g- _1 q+ l* @0 n
0 T5 l5 G B& r' m% |& L; A
方法的重载: 体现了行为的多态现象. e! a* _# h/ v a4 v" @0 w
4 u: g/ { V. y2 i0 k
|
|