我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > java 面向对象知识: 类, 对象, 引用
总共48087条微博

动态微博

查看: 3247|回复: 4

java 面向对象知识: 类, 对象, 引用

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2014-03-03 17:29:28 |只看该作者 |倒序浏览
1 面向对象(OO)
) z8 P6 m: |3 l. B" V! P 1) 什么是Object(对象), Object 本意:东西,是指一个具体事物实例
$ Y& }) i) B, I: m/ [, s- }5 N 2) 面向对象, 面向客观事物之间的关系.0 x# A4 [9 Q0 F6 ]& X
4) OOA面向对象分析/OOD 面向对象设计
, B; Z4 I+ P/ U" m( f  x% b$ r   客人来了(来了一个客人类型的某人)
  Y% {# y% V: C3 D9 i4 y# U. A# W$ t+ H8 W* j( z4 n8 ~
5) 面向对象概念
2 A3 Y3 v5 ]7 t# ]+ @  A 类型: 名词概念, 如: 客人, 菜品, 厨师
. M7 j5 N1 m4 Q4 N5 h  B 引用(变量): 引用具体概念实例的代词, 如: 某人, 特价菜
* g, {3 B1 f# k* m7 h  C 对象(东西): 具体概念的个体实例,如:张三丰这个人, 一盘大盘鸡
% G% w9 e% i" O( M  D 行为(方法). K- q$ z  p# A9 G" K' }
  基本特征:5 z, D0 ~, k; s& q/ x7 Z
  A 多态: 行为/引用, 在具体情形下发生了变化的现象" [9 s% L% {- n" |/ h
          一盏灯:  多态的  K! ~/ w) Q( F( X4 X. e2 ^. X1 j
          打: 根据宾语发生变化3 Z; O8 [' F7 E
  B 封装: 任何对象实例都是尽可能封装, 减少暴露
( N/ U8 m. q6 C' O) [# }  C 继承: 概念的继承关系9 r% i! M3 X' K$ E# |  L8 G& Z5 f2 _
# y3 b! e9 f  E" @% Y
2 java 类型, 引用变量 与 堆对象! M0 W  U% Y" _5 C
1)Java 类, 是用来描述事物类型的. 如: 书
5 ?5 t% b7 u) G: X+ {& H   <图书馆管理系统>中的概念: 书 Book% C& f6 l" q+ w1 `$ @0 {- o. J
  书的特征: 书号, 书名, 编号, 作者, 价格...  8 O8 W4 D3 D" M' @
2) 类的声明:  U4 K& [2 L" h1 S
    public class Book{
% i2 g5 L0 ~8 a) D9 j            long id;8 e& b( j' U* d2 @1 r8 r6 y, Q8 I
            String name;$ }5 \3 J$ K$ Q9 B- }
            String isbn; //书号
6 l7 [. D# D0 x4 ?0 h. X7 @+ p1 d  u            String[] authors; //作者
  ~5 ~4 E7 M5 z: Z1 U( I4 N$ t. u            double price;$ o( y1 E+ r# {( J) j; \4 @3 j& y
    }
& f' {% j8 @; I; P7 L! G 3) 引用变量与对象的创建过程:  w/ p* i- q1 t& V3 j0 I9 h
  A Java的内存管理与分配:4 w1 s" e2 Z) Q# [8 M7 l0 j7 \
    栈是一块Java使用内存区域, 使用的方式IFO(后来者居上)" \2 H7 [1 e) E# F+ f( `- x
    堆也是一块Java使用内存区域, 使用方式: 无需随机分配
' D* g% l* d: |& q  i  B 局部变量 与 堆对象空间分配
& _1 o1 t7 x2 V0 t   Java 局部变量在栈中分配, 是按照变量的类型分配 2 o2 w9 |# l3 g8 b
   对象在堆中分配, 按照类的属性(实例变量)分配空间
- U. \: u5 B' {8 b& `# X  C 变量类型与分配
+ E% V* P3 E% T' j) {   变量分为: 基本类型和引用类型3 I! I7 N; U% e
   基本类型变量的空间大小: 就是基本类型的空间大小, 值是基本类型
, `; }  r/ e& `$ a" k$ H: f: c8 m    的值
% j1 L* p/ G1 K" x1 u   引用变量的值是一个对象的地址值, 引用变量通过地址引用了一个堆3 v- [4 A8 J  p: ]
   对象.引用类型变量的占用空间大小和值管理是"透明的(不可看见)",# l( ?7 _0 m; M5 m5 d/ F1 q
   由Java系统管理: 变量占用空间以及值的管理, 都是透明的.
, ~0 o  X! ?2 J  A! c& `& P8 |$ i& R+ O
4) 对象的属性默认自动初始化的. 自动初始化为"零"值, 引用为null3 d3 p, M& Z2 Q  E, H! E/ i2 v
5) 在null引用上调用属性或方法, 会发生运行时异常
4 Q6 |5 C# i7 P1 q! s8 I7 q! I7 R; o
案例:
% r6 ]0 G7 z, m& u) f2 Y  平面绘图坐标系中的一个点(Point),定义合理的属性7 L/ x! H! E1 i" u
  坐标是int类型.7 p8 D. y9 r) j& F
   O+-----------------------------> X
- t! z0 d  Z  ?$ |3 Z1 f; `. v5 m    |
  e" [% j, a# C7 T6 q    |# _3 U% ~. k7 l) U2 n0 n
    |- e9 |3 L' t$ T8 x
    |
3 v7 z9 B3 `4 }2 y; r6 k# q    |          . p(x,y)( ]( |" q9 K$ |: K- J* F
    |) f2 S% S7 j7 o
    |0 ~, L. Q; i0 t
    |, L$ V6 B2 X/ B# j1 i; [
    |+ E* P% ~  N$ h2 U: z; W

" v+ P* r0 g1 ~- \  F4 W    Y% D9 P# P) a7 d, f; }

+ W5 ~1 Y7 u6 l5 ^7 p5 U% ?& E3 构造器(构造方法) 的作用: 用来描述对象的创建过程的.
# U+ z9 K/ h. M, s  1) 0 N6 p0 a+ y1 R& @$ |
  如: 月饼实例的创建, 使用面和馅创建.
1 c+ A3 ]# q; v/ k. {+ ?              制作(构造器)
) @& i! s, B0 J4 o- B1 r  月饼模子(类)  -----> 月饼(对象)
/ z4 E0 p4 y$ D8 H% g( C              原料(构建参数)0 A1 \# B) a- f: R) T# O
* b/ k9 L& N2 F$ d) V# j4 L- C
  点类型   -------->  原点
' k9 F- O6 z  W, ~           坐标(1,2)
9 F8 V$ Q# \+ u& N! a7 ^$ T2 h+ c2 f; u
2) Java中的构造器: 声明在类内部, 方法名与类名一致
  Z, |( |" A5 ^7 O  的方法叫构造方法, 构造方法不能声明返回值类型.7 O% u. n& P9 ~
  构造方法可以包含参数, 参数一般是创建对象实例
  D' g# f. b* r8 I1 x0 i  必须依赖的条件(前提条件).
9 v) M: c* c1 m        public class Point {0 J2 \: V4 X8 `( Y3 U
          int x;$ `+ G% s$ p8 G8 g# j, E
          int y;
. p2 H  v' B0 o          /** 构造器 */
2 e% q; p0 G# o$ b$ ?/ J! @2 i          public Point(int x, int y){% B$ I! _! p& J2 `) q9 S" V) y
            this.x = x;
  [, T8 i9 L3 c% N4 s6 n; Q4 M5 ?            this.y = y;
4 ^+ i6 N  I" C          }- h7 A2 [  L1 r, h2 t, \/ w- f8 a
        }) j1 z* R: P  z7 u7 Z; a) l% {
7 T- l- y( l1 g$ x
3) 对象实例化过程:
8 h7 \' G7 o) B: r' b' X7 V& \- O# u new运算: 创建对象实例3 _0 ^  ?- a1 k# J4 \. r/ E
  1 根据类的属性在堆中分配对象空间.并且自动初始化实例变量
" L! ]5 e9 V/ D+ I  e$ V  2 根据参数类型调用构造器.
! r% }, i) {) f3 I; Z, ]  3 new运算返回对象的引用地址.8 B& s8 J* D2 C# O9 @( u& O
# ?1 p/ ^  n" J, Z
4) this 关键字/ k( d  J+ w. A" b/ T
  this 是对当前对象的引用, 是运行期间当前对象本身.& P. n% P0 L0 p: ?
          可以使用this明确的访问当前对象的属性或者方法
, Z, n; [1 _3 [2 L" `          类似于"我".
0 v. E: U% j, h' b  this() 是调用本类的其他构造器, 可以使用构造器的重用, * B1 e; t5 K: M9 z
    简化代码的实现.
7 d" z. }- s3 M  * this() 必须写在构造器的第一行!
# z" ]+ u' L! @4 a/ S  C
4 l, D( c4 o! H, B7 r5 I6 ]2 F+ i 5) 构造方法重载: 参数不一样的构造器! O  v9 {) @, k
        案例: Point.java' D% g" Z1 ^9 C' V- l: O& ~
   方法签名 = 方法名+参数类型列表
* ^) k* c5 e. o; f   方法重载:a 方法名一样 b 方法参数不一样- O! p0 i8 o# ]) r
     也可以说: 方法名一样, 方法签名不同的方法
7 o3 z; L. c" K4 r& {2 I% F5 w. b% \- d  [
6) 默认构造器
1 m- L& R+ z: e# g+ y) P  1 java 类一定有构造器; v) x. O3 [8 W5 S
  案例: ConstructorDemo.java, k! A7 V: ^5 E8 S+ K( G
  2 如果类没有声明任何构造器,Javac自动提供一个4 G0 m% h7 i; [2 ]0 q/ y) p
  默认构造器, 无参数默认构造器( [  A2 G5 z6 S& m, x9 f: B
  3 如果提供构造器声明, Javac将不再提供默认构
+ f4 }6 T' |+ g7 z  造器.   
! q0 `! K( e$ P9 C
4 u& R; M, b! p! R  v5 G4 \& Y9 H  y4 对象的方法6 V, s6 V. g" X. o) ^3 p( T
1) 表示对象的功能, 依赖于对象存在.# U  X5 u- o; G8 ?, I7 }) G7 n1 q. G
  案例: Point.java! b) g% U6 ?, q: y
  如: p1.distance() 和 p2.distance()
: Q/ I+ W( G) Y. a- d% W  方法是动作,是功能,一般用动词声明.  
- h% ?+ [+ Z# }9 { 2)方法也经常重载, 重载:方法名一样, 参数不一样重载体现了,. ?+ a+ Y' u3 c
   功能的多态.重载的方法经常互相重用.( `7 D) ?  `% Y

; |5 _+ v$ q" _$ F! Y  对象: java运行期在堆(内存空间)中分配, 大小按照属性分配
# K3 k& H+ e8 C8 `# g  引用(引用变量): 临时变量(方法中的变量和方法参数)在栈中分配
$ S3 e) w- O* C. W4 C* k: v* e                实例变量(对象属性)对堆对象中分配(如: 书的名字)2 E7 I3 Q# V+ B9 O" J
                引用变量的值是地址值(透明管理,不可见), 通过这个地址, \# g; g4 f8 U$ k6 f
                值引用了一个堆对象.6 T' a; s! S" F; \
! R7 r" n# {0 x) `! J% M$ J% E
  不确切说法: 引用的值是对象2 t# d. ^! m1 P
            引用变量在栈中分配8 Q0 z5 P+ m# o/ ?2 W
  类(类型, 是名词概念): 对象的模板, 是对象的样子, 蓝图, 类型决定了3 v1 B% Q- a) k% b2 W
                对象的样子.
/ ^$ Z# C! }( A3 ]5 g) e2 y; ?" W
- i6 ^4 k  P) b/ J  [0 J  想着对象写类型: 面向对象, 类是对象的抽象化0 c4 \$ x- k, h- z
; d5 R' _0 l! U/ A8 R6 _
  方法的重载: 体现了行为的多态现象
& H9 F+ q) o5 S' f4 b3 f1 |; s9 q( \% Y

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

2

主题

0

听众

148

金钱

三袋弟子

该用户从未签到

沙发
发表于 2015-10-15 13:46:03 |只看该作者
看了看  学习学习  哈哈哈哈
回复

使用道具 举报

1

主题

3

听众

341

金钱

四袋长老

该用户从未签到

板凳
发表于 2016-03-17 21:57:23 |只看该作者
学习一下。谢谢
回复

使用道具 举报

woniu 实名认证   

2

主题

0

听众

330

金钱

四袋长老

该用户从未签到

地板
发表于 2016-04-12 12:22:53 |只看该作者
这个项目太棒勒!下下来学习下!
回复

使用道具 举报

5

主题

0

听众

316

金钱

四袋长老

该用户从未签到

5#
发表于 2017-08-12 20:47:52 |只看该作者
不错不错不错不错
回复

使用道具 举报

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表