/ H# w( N. p( g3 N: C7 {% y, k! B+ y 基本概念 0 z2 V- ? c$ I; s
/ Q5 J1 ~$ e# j4 A
1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大限度上提高复用率。 5 X" P" O( @$ ~3 {
U# V- s: S/ r/ T' r# s& F
2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)。 2 e3 m3 E6 U; ]: u0 b" m0 W A$ @/ A2 T' ^, r' V: {
3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。 0 B! ]- Y9 }3 n0 V
B0 m+ `* S2 z$ f 4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍。 6 `( r4 \5 _4 A 5 V2 G- l' [6 N8 E3 R" r% V 5.对象的3个主要特性 . M4 v- `: U$ Z0 q; q) v) i4 c( ]" w, Y* W! R+ ^& }
behavior---说明这个对象能做什么. $ q; C) D$ S7 t( `! x( _9 i8 x) s
* O; A j, v: Z state---当对象施加方法时对象的反映. 0 }7 L: D- x, p' Z# _; b; p& J m, x7 h. V
dentity---与其他相似行为对象的区分标志. : _9 D6 R2 W! w. \4 E & M- K6 {; H- B3 _: `5 |0 }( C5 i1 T) M 每个对象有唯一的indentity 而这3者之间相互影响. ; U$ N# b$ X/ h: m G
/ C, R# v. Z% R7 R4 ~ 6.类之间的关系: ) X" F4 A* C, ?$ ^5 J6 w
- ~4 V- Z9 `2 ^ use-a :依赖关系 8 D) I6 C: K7 b& W/ `& ^ ( g5 E; L0 P9 j% q- K; N has-a :聚合关系 0 B" R, R* B" r. v. {* V3 W. T6 `/ d& y8 i0 p; E( s
is-a :继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法.(个性存在于共性中) + _, O8 K: `3 Q5 [$ [ 3 O# E) k3 m- ~9 v) i$ d 7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化。 $ H- @+ f2 V0 Y* o2 c4 v1 T3 H7 Z7 X5 x% h
例ata类的构造器叫Data * O# R, c/ l+ Y( F8 l) ~$ d& k : G. O* f0 y5 ?. {5 p) z new Data()---构造一个新对象,且初始化当前时间. : S# |$ t' ]' H8 K
& z; j0 \, @& d+ a Data happyday=new Data()---把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者 ) N% L. Z7 a7 O1 ^. W6 ]3 h是不同的.new返回的值是一个引用。 : e$ S i" Z" `. j. K6 s- D2 I6 E. p* t' H$ c3 t) q
构造器特点:构造器可以有0个,一个或多个参数 ! {& E7 v- v* j
. ~! d/ I: ^: H 构造器和类有相同的名字 " }2 q. B0 v* e0 r: U- f( w# d& n
0 v# W2 f. p* ] 一个类可以有多个构造器 ( S; }6 y' T* W1 m , S: }9 M. r+ i5 t) |9 C W; N- O 构造器没有返回值 / ]6 C. _' U/ |0 Q3 u
, \5 d) V( K7 {; h/ N* O: `: | 构造器总是和new运算符一起使用. : `: V) D' v8 ?$ c 8.重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载.编译器必须挑选出调用哪个方法。 % z9 G$ I2 v k7 U4 n' w( A# u9 _3 i5 y
9.包(package)Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包.java.lang java.util java,net等,包是分层次的所有的java包都在java和javax包层次内。 7 Z9 g9 y4 b: t5 ~9 Q2 S9 v+ S
3 W- p8 a" b7 f9 l2 m; \ 10.继承思想:允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段。 ! f9 W0 k' Q7 W0 P8 Y
$ g! T2 t0 k. L
11.扩展类:扩展类充分体现了is-a的继承关系. 形式为:class (子类) extends (基类)。 * p6 {( t+ B# x# d l2 k
! A L% U; T: f) ?' ]
12.多态:在java中,对象变量是多态的.而java中不支持多重继承。 - ]7 l6 b# L7 F3 r9 V* S . p5 i+ D2 }, X8 g: f! J2 d 13.动态绑定:调用对象方法的机制。 6 A: N' l }5 J% p1 |1 L
$ }' o& J& r# R4 k (1)编译器检查对象声明的类型和方法名。 7 G8 G7 X6 ]$ i, Y" z# N" u 2 a- l, y8 C7 K% n1 f (2)编译器检查方法调用的参数类型。 : \4 a3 g9 u7 ^" T7 i/ Q) m" g
(3)静态绑定:若方法类型为priavte static final 编译器会准确知道该调用哪个方法。 / @7 c& D$ R' C+ e( r( A3 J
3 i; k5 ~2 i1 p
(4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用x所指向的对象的实际类型相匹配的方法版本。 8 @: u; x: ?5 u: W/ t
5 _2 z; ^) }8 j) l. D, i* O- i
(5)动态绑定:是很重要的特性,它能使程序变得可扩展而不需要重编译已存代码。 # Y: X* g: j( L) x1 L; _1 { e% x0 b) n4 M5 c! n Z: J
14.final类:为防止他人从你的类上派生新类,此类是不可扩展的。 ' H* G8 g( Q% Z" e( M 2 _$ `) D: ?# s0 z4 O# s6 c 15.动态调用比静态调用花费的时间要长。 1 E5 f1 A) Q9 c# k: |8 h7 M8 P! ?' ^# V x
16.抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。 6 @$ x8 D! ~: Z0 d* a: u/ M4 [$ Y. j# u
例: public abstract string getDescripition ' @% }! ?9 o) g& Z/ L4 U& {% b( m W; ~% } X+ }2 g+ l$ I: R
17.Java中的每一个类都是从Object类扩展而来的。 - X9 j! c: A% H9 S% I
" C0 s K* G9 C5 |+ W
18.object类中的equal和toString方法。 3 U, }6 o' A( ]' B1 m; a& ?3 c: U; V& ^0 u2 f' _4 e
equal用于测试一个对象是否同另一个对象相等。 8 f* x8 B& V: v' {- b ! o r0 D! W1 k toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示. 4 d* V6 }" s! e
; u" m6 L! Q6 x: l (toString 方法是一个很重要的方法) ( n8 A9 f9 }! a, m3 s% t4 t* s/ D! w4 Q7 {+ p( V
19.通用编程:任何类类型的所有值都可以同object类性的变量来代替。 ( z1 k" B& S# W0 E0 z5 \; e2 N
( C4 v" E$ @7 b) x1 `& D5 \0 r 20.数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大小。 % ]9 x1 O! I. d. q : M& `1 y; v) B# }0 p 21.class类 object类中的getclass方法返回ckass类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。 7 p; `4 |; D, E- {
$ U t* j# n9 z" G: }
22.class类为编写可动态操纵java代码的程序提供了强大的功能反射,这项功能为JavaBeans特别有用,使用反射Java能支持VB程序员习惯使用的工具。 ( [# @* ^- ?- f
+ t( ]$ ?1 D; b6 j5 q+ W
能够分析类能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射机制十分强大. * N4 G( p4 o D$ g5 S$ y5 j) J9 g" i+ R, I7 o! A/ k0 j% F
1.在运行时分析类的能力。 ?: |" l( i9 ^! u5 {
! f* i9 D* P) Y4 Y6 `8 z( {2 y
2.在运行时探察类的对象。 3 T+ a9 t' _- F% F( V
# b0 b; l3 ?8 O" v java.lang.reflect.Constructor 返回参数. 7 u" y5 k- T* v. O! k$ d( }
4 P& G( y1 S, ]% Y
方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案。 ) V! P* r8 @, |+ U7 ]1 T- c; a
" B- K! }' N0 A0 s( D
23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface。 ( i) o S1 O) J7 U9 [1 l* \
% R% M' l U$ ^; ?6 F! E 24.接口不是一个类,而是对符合接口要求的类的一套规范。 , j* p( ~: W# E5 q# i- P3 J ! d8 q# t4 g" K4 g' C) t' @ 若实现一个接口需要2个步骤: 2 B1 Z. i( H) c4 f( |. `
1 W3 A, x. X5 D2 |% m) R& `. ] 1.声明类需要实现的指定接口。 4 @3 F7 L9 }2 {) `4 ?0 ?- `6 \: V: D3 ]+ ^& |9 ^
2.提供接口中的所有方法的定义。 4 C$ u4 H2 |) \+ a9 h! L' B$ B% I
声明一个类实现一个接口需要使用implements 关键字 {( J6 B3 T* a
2 @5 a8 a# Z; {% `2 ~2 K6 A; s% Q
class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口. / S0 Y2 a$ _1 L B
, r; a7 ]$ N8 ^$ f1 L* h1 p 25.一个类只有一个超类,但一个类能实现多个接口。Java中的一个重要接口:Cloneable " `7 C7 v0 c+ L% r- m1 M 2 H9 v$ ?" F* _$ F4 B7 x 26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。 : R) U: ]& K) L N8 h e5 k7 B# ^/ t) c( g2 z$ K! E
例:ActionListener 接口监听. . n' [$ W: a J; v. L! z - E' E, E) Y+ S- r( i 类似的API有:java.swing.JOptionPane * y' i: h- }+ Z; m
; t# N; D; f" U# G) b% K java.swing.Timer 0 H. p3 F2 l, z& A- ?" u& S
6 h$ p: b6 t, @9 F; g
java.awt.Tookit x6 h; ]* E2 g q7 G0 c$ m0 z' P6 [ H! ^$ V5 Z
27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它。 ) [# w' f' V7 }( W& Z( C& S5 n0 V, G2 {+ q! V
28.内部类:一个内部类的定义是定义在另一个内部的类。 * w! c5 A2 b( ^- ], C& u 9 `. y: l% M* M4 a2 A 原因是: . C$ k$ O3 U4 z' V: A) {( i& k
+ }! Z' t+ n. p: I: o
1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。 6 J% [" J, M ]% P4 \5 e
3 {0 T& D' a+ ]( O4 [8 c. Q
2.对于同一个包中的其他类来说,内部类能够隐藏起来。 3 b3 `) c% h( L$ o& G% P
( `9 |) V3 x. i9 |* o% b# [$ _ 3.匿名内部类可以很方便的定义回调。 5 P- P) l2 t, p2 \2 O5 ~* S 1 J* g5 L/ d# \/ m 4.使用内部类可以非常方便的编写事件驱动程序。 : v0 }8 p% M5 [
0 D' n8 X; w& d( R/ y* l# N( c
29.代理类(proxy): , C+ n' F) r# S& n8 l i " h! z5 G* e& U6 M& m) h {+ ` c 1.指定接口要求所有代码 % x3 d! T O2 I' b1 b: Z0 ] b5 V: v7 w# n; D
2.object类定义的所有的方法(toString equals) / W; K9 D) V2 j. }0 `! b" U8 X) H' j 6 z. C4 o# h9 i5 _ 30.数据类型:Java是强调类型的语言,每个变量都必须先申明它都类型,java中总共有8个基本类型.4种是整型,2种是浮点型,一种是字符型,被用于Unicode编码中的字符,布尔型。