|
该用户从未签到
|
1 面向对象(OO)
& s6 W ]4 b* a; _5 J 1) 什么是Object(对象), Object 本意:东西,是指一个具体事物实例1 K. v# u0 M5 K* d( K6 z) P/ w9 ^
2) 面向对象, 面向客观事物之间的关系.
4 D; U4 O( U% A/ x3 \9 z* n 4) OOA面向对象分析/OOD 面向对象设计
& m9 h1 O% O9 O8 M$ q1 [0 t' U 客人来了(来了一个客人类型的某人)' A0 X: h0 s% g! s
9 L+ x8 F7 c: R) o, q" m* A 5) 面向对象概念
9 R* @$ w- c! t- S# u! l! b A 类型: 名词概念, 如: 客人, 菜品, 厨师
7 b- ]) k6 n8 ]* Z7 e% G2 J B 引用(变量): 引用具体概念实例的代词, 如: 某人, 特价菜. F; B- G! p6 {) b7 c
C 对象(东西): 具体概念的个体实例,如:张三丰这个人, 一盘大盘鸡3 L7 Y7 a" U% A& T. F4 ]( H J
D 行为(方法)
8 B5 y+ I" p. Q0 X6 { 基本特征:6 @& `' U- L( w2 G/ [' V" X' V. x
A 多态: 行为/引用, 在具体情形下发生了变化的现象
& b8 d; `; Z$ \" @( B 一盏灯: 多态的2 a- B+ d" I4 t) t
打: 根据宾语发生变化
* g. \& \' r- [. a. X B 封装: 任何对象实例都是尽可能封装, 减少暴露 N5 }1 L# l, y3 }7 K. I" \! h4 M
C 继承: 概念的继承关系
) }' B% O1 p5 y% Y( q3 X* Z6 K/ G, F+ n7 D. e5 n1 ~- l) @+ f
2 java 类型, 引用变量 与 堆对象
$ ?$ z* L3 w, Y# | 1)Java 类, 是用来描述事物类型的. 如: 书
5 [! K" C( D, Y& O0 h/ \- l: @ <图书馆管理系统>中的概念: 书 Book
: A9 u. t8 ~; p5 s! {# U: ]; U! R9 e 书的特征: 书号, 书名, 编号, 作者, 价格...
9 P& [6 Q& I8 i3 n2 Z 2) 类的声明:
5 H0 E" |0 L) z public class Book{4 P- t' T3 r( Y& p3 C D
long id;
/ e0 H9 d- x5 O0 j String name;
- ^; k. Y n4 N5 @6 x) P String isbn; //书号
( r% x7 y3 H5 d1 p" _8 V String[] authors; //作者
5 Z; w9 P. k- G: x double price;8 v3 v2 @' w5 R" z! |9 m4 ^
}
( n9 J- e! _/ f& R 3) 引用变量与对象的创建过程:
/ O6 i3 E$ d3 g8 k" N A Java的内存管理与分配:
8 J, }1 _) G9 f/ w" s& c 栈是一块Java使用内存区域, 使用的方式 IFO(后来者居上)/ w" P7 A" z: x4 c7 L6 O
堆也是一块Java使用内存区域, 使用方式: 无需随机分配1 l: a+ K) D1 c, h& ^4 _2 k" F1 F
B 局部变量 与 堆对象空间分配3 C& B, w/ o8 x
Java 局部变量在栈中分配, 是按照变量的类型分配
: [* |0 R. S6 Z+ D) \ 对象在堆中分配, 按照类的属性(实例变量)分配空间! z7 h" P- k& l6 J+ w4 S* r/ j: B
C 变量类型与分配
) `: B$ W# q2 N7 Y- k 变量分为: 基本类型和引用类型
, a$ V7 ~$ y& W1 i# M7 g 基本类型变量的空间大小: 就是基本类型的空间大小, 值是基本类型0 Q* w5 s- c+ l& o6 f* T* g
的值) Q+ W) k2 Y. c8 f
引用变量的值是一个对象的地址值, 引用变量通过地址引用了一个堆* {5 q5 O% G3 Y; v: W, b
对象.引用类型变量的占用空间大小和值管理是"透明的(不可看见)",
+ i/ o7 m4 u2 c* H 由Java系统管理: 变量占用空间以及值的管理, 都是透明的.
, O U& X0 @% o
. O1 h! k! D$ o6 F 4) 对象的属性默认自动初始化的. 自动初始化为"零"值, 引用为null
1 N8 ^$ m! p% L1 R/ Z 5) 在null引用上调用属性或方法, 会发生运行时异常
! Q( l( ]/ C o# D9 s' r w
1 o6 Q: B, V% @9 Z6 e 案例:8 T$ {+ A" o* C6 K/ ^! @
平面绘图坐标系中的一个点(Point),定义合理的属性; ?5 n; \. r+ W, T: b3 T
坐标是int类型.% t' c' o" o3 q! m
O+-----------------------------> X% P9 ] q% r5 ~* L: U, E" u
|2 a( T/ N0 p: R0 E' @
|
7 p/ s0 f- v: x |
' W' A. M. N3 m: g+ p | E; [2 w( v, F: {1 Q+ \
| . p(x,y)/ s) K6 h A8 C- u1 c6 K( N* v* h
|+ [" _ L) ]1 N6 k8 P. U8 G. L0 M7 P
|1 c& h) i' l8 Q. z' d; U
|6 g: E! j+ T i' K2 K
|
" w/ W: R7 d6 i a! {: Y2 o3 |; Z4 t! y# e, [9 f
Y
* t* s* U0 P8 | Q
0 m9 y+ z* \' ]2 {* |3 构造器(构造方法) 的作用: 用来描述对象的创建过程的. D: K1 H& W) K) o7 {, D
1) & d/ [0 E& Y* b6 ^( t0 \% f3 R7 f
如: 月饼实例的创建, 使用面和馅创建.* x2 a; f5 _: E( i* z0 r
制作(构造器)5 f$ n4 |% `# z( J; e
月饼模子(类) -----> 月饼(对象)
3 B) Y5 ]* y: z: ~; F 原料(构建参数)& |9 f: p8 w! N
2 K+ V* p. x, N
点类型 --------> 原点
6 y0 E4 w4 ?* {7 W1 L) l% G 坐标(1,2)
9 t2 o; c# P0 \6 |: u' T4 p
$ d6 e% M; M& G 2) Java中的构造器: 声明在类内部, 方法名与类名一致6 t& P( Q/ q+ L, K/ h9 P
的方法叫构造方法, 构造方法不能声明返回值类型./ Z) A) ~/ O, z' P
构造方法可以包含参数, 参数一般是创建对象实例
0 n& w& X+ |: P z1 i 必须依赖的条件(前提条件).* i! q1 y7 E. K3 F; [) y) n
public class Point {
/ e% P( N' p1 L% Q, H; B& z0 y int x;+ N8 n% v2 g8 `- y6 S: ?# S/ Z+ I
int y;; W* Y5 m+ J. ?- ]6 X) l
/** 构造器 */
! @! F; r2 t0 x, R public Point(int x, int y){
2 E: l% y6 ]3 x- `- T% `6 I3 T" @: } this.x = x;
+ u. v: i9 w6 q this.y = y;
~" @0 o) r( j0 m }3 v# a) P3 l; j8 e* b+ _
}
8 s: m- ~4 m W$ l1 I0 h& S! S, q- a; k+ j$ d
3) 对象实例化过程:& V% `- G( p6 l# j* c, x+ e1 \$ q
new运算: 创建对象实例
. h/ F1 h: q# |( P# [ 1 根据类的属性在堆中分配对象空间.并且自动初始化实例变量1 H4 u4 i: T1 X7 x, |9 [
2 根据参数类型调用构造器.
k c7 @) O5 g9 C' z 3 new运算返回对象的引用地址.
" [& i* ^0 t V; A0 W5 x. I6 h0 S# W5 g) ?3 l7 L8 C0 l
4) this 关键字7 l4 s8 Q, D$ \% u& y% L3 ~! A3 ?
this 是对当前对象的引用, 是运行期间当前对象本身.
P0 H* y& J. T& G( k; `8 X 可以使用this明确的访问当前对象的属性或者方法
" s# E; ~. B- i! C* K8 @# h7 ]; V 类似于"我".
7 g0 V- Y# K& }: a this() 是调用本类的其他构造器, 可以使用构造器的重用, " J0 \/ e; r8 x( J! `
简化代码的实现. ' @2 r7 p) O. s! Y0 Q
* this() 必须写在构造器的第一行!
% V8 G/ F L h: r& }- z. _' a q* T4 D) j/ t' Y) ^4 u% I* \, Y
5) 构造方法重载: 参数不一样的构造器
9 U9 ?+ m8 m% `1 b. ?+ ~ 案例: Point.java
) m$ U. e" K3 N 方法签名 = 方法名+参数类型列表% v5 J; t/ {6 w4 N" q8 y/ {% \4 a
方法重载:a 方法名一样 b 方法参数不一样1 s! u1 `. M+ T
也可以说: 方法名一样, 方法签名不同的方法: }# V5 u' S/ s1 T: o
2 p. y9 W, g3 j: p; U/ S% Y 6) 默认构造器* X! u; Y% F* @
1 java 类一定有构造器
7 f/ c# j9 E: ~2 O( Q9 m% `+ f 案例: ConstructorDemo.java
" o1 H8 Q! `0 ]6 [1 P4 J9 X9 ]2 S 2 如果类没有声明任何构造器,Javac自动提供一个1 O6 Z: o. e2 t2 g4 y2 C- n I# g
默认构造器, 无参数默认构造器; ~$ w( h( G5 m+ g
3 如果提供构造器声明, Javac将不再提供默认构# M6 q# B4 I8 H# a6 F
造器.
- z* q8 y2 Z0 m" A, A, X- U7 H
4 对象的方法
r0 b2 v$ V/ E! \8 G 1) 表示对象的功能, 依赖于对象存在.
, A# m2 a4 g2 _ 案例: Point.java! `+ M5 U3 |7 ]( p" V% V- a0 }
如: p1.distance() 和 p2.distance()4 U. G$ `: W6 }) v# B7 X5 B+ ?% u
方法是动作,是功能,一般用动词声明. 4 {$ Y9 u: R/ Y
2)方法也经常重载, 重载:方法名一样, 参数不一样重载体现了,
: r* w2 U2 R9 ~% s 功能的多态.重载的方法经常互相重用.+ r# X; Z. A# {. C% _2 l4 K
! {# c) M8 l5 s$ J% }, O2 a( U( M- U
对象: java运行期在堆(内存空间)中分配, 大小按照属性分配
0 I# u9 L+ e0 S; d 引用(引用变量): 临时变量(方法中的变量和方法参数)在栈中分配8 Q- o$ u* x h4 x3 [
实例变量(对象属性)对堆对象中分配(如: 书的名字)) n" r/ ?( F& s/ }/ [( ]3 L' A8 P
引用变量的值是地址值(透明管理,不可见), 通过这个地址
& @2 }. H7 g; ?# T$ s+ [/ L 值引用了一个堆对象.$ K1 g4 T/ f; Q
4 c% X! g( L" B: U* x
不确切说法: 引用的值是对象
5 A$ |7 M9 d9 |( Z( O/ Y, A+ n 引用变量在栈中分配% q. I9 d$ W9 ]1 g
类(类型, 是名词概念): 对象的模板, 是对象的样子, 蓝图, 类型决定了$ r5 {0 A' }7 [5 E6 _
对象的样子.
6 V& ]8 f5 Q4 M+ n2 s# V
! _/ ]8 T* [6 D+ C/ N 想着对象写类型: 面向对象, 类是对象的抽象化
f% q' b( x2 g
+ Q3 w# a: H% x/ _- q 方法的重载: 体现了行为的多态现象
) T8 E, S) C6 d
& z; V& W3 I) `% }. _ |
|