Java的白皮书为我们提出了Java语言的11个关键特性。" M1 {2 b- O% \; r& e0 b
% Q( C* | y! G$ `7 S (1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb。) J" i8 H1 r% H" [9 c* ~+ u
- s' L5 y+ t" B, U (2)分布式:Java带有很强大的TCP/IP协议族的例程库,Java应用程序能够通过URL来穿过网络来访问远程对象,由于servlet机制的出现,使Java编程非常的高效,现在许多的大的web server都支持servlet。) U1 X6 x& J7 J3 Y @9 D
, L V+ M- S- r: J
(3)O面向对象设计是把重点放在对象及对象的接口上的一个编程技术.其面向对象和C++有很多不同,在与多重继承的处理及Java的原类模型。4 `8 K% h( r# h9 E5 v# ~, P
6 k& y4 p0 s" i! O
(4)健壮特性:Java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能型。 0 ?1 I. ]) p* D! f- ?3 S 2 s+ z& s8 u* r* P1 w" C4 `8 c! F (5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的比较好。* I1 o2 A9 P) n' E4 |' c
0 d! t8 v6 L2 G1 l/ Y/ [4 R0 d
(6)中立体系结构:Java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(Javabytecode)实现此特性,此字节码可以在任何机器上解释执行。 : n5 B2 ` l5 A 5 f, H* t4 A! W( s, z0 ?( o (7)可移植性:Java中对基本数据结构类型的大小和算法都有严格的规定所以可移植性很好。" J: J6 U( l$ `4 a% ~) B
4 o/ A7 ]) D' r5 T, I0 S3 I' t: | (8)多线程:Java处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成.所以多线程是Java作为服务器端开发语言的流行原因之一。 3 w( C2 v9 s# N' y % H9 J2 |" y- A3 ~" M (9)Applet和servlet:能够在网页上执行的程序叫Applet,需要支持Java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的。/ `! ]9 T: h1 l) C7 I9 I
4 h8 {& h( S* l) I2 O- W 基本概念 2 h0 ?% ]7 n6 B8 q l( ~9 }+ Q ?8 [* k) L, \, O& U
1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大限度上提高复用率。7 L) `# T8 f2 v
- \+ q8 N( g, x5 t6 a4 y/ L
2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)。$ N2 F) |3 T% g5 G
" o) g: R" _. U 3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。* ~1 O/ S" P) W L7 h/ R. C9 L
) B G& w! h3 u4 N X s# e% S 4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍。 3 F! l8 L6 F. H% X9 p2 v/ }2 L2 i( D! L' B- @5 N) g5 B
5.对象的3个主要特性 9 ]) H4 i' G' f+ k, b1 Z8 Z W
/ B, t' f* i# m behavior---说明这个对象能做什么. 2 u& b9 ]0 S. } Y' ~% K8 F state---当对象施加方法时对象的反映. 2 M- f7 w6 j& C" K u! @$ h identity---与其他相似行为对象的区分标志. + r z) D; t4 @, H 每个对象有唯一的indentity 而这3者之间相互影响. 8 L8 U8 _' Z; \$ O# Q. [; H" L2 m$ _+ l0 u$ s
6.类之间的关系:7 l( G3 f, m \$ f2 H, F. S
) H% ^! D7 ]3 b) |- Q. A0 {8 k5 B7 r
use-a :依赖关系0 L( v, J- _$ d& k; U8 P
has-a :聚合关系* t* G0 a9 l% |) I1 S# q0 Q
is-a :继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法.(个性存在于共性中) ! d% N7 C) N; V; v+ i R2 \5 }' u% X- `& e- Q
7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化。5 O3 b* i M/ Q8 _( ^
$ z/ }6 u# f4 {6 X# O' t 例ata类的构造器叫Data ; @7 V7 L' r+ ` ' E! J5 G+ R" D$ O6 J9 U new Data()---构造一个新对象,且初始化当前时间. 6 F' G. f% N0 n7 A- N+ o Data happyday=new Data()---把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者是不同的.new返回的值是一个引用。; r3 J) y5 z- F! {1 Q; I, ^
, a8 i& s; t1 m 构造器特点:构造器可以有0个,一个或多个参数$ V' Q5 s: p! p( I, E9 I- v
构造器和类有相同的名字( g+ V! }6 L2 I+ l; O; Z9 g Y
一个类可以有多个构造器 0 o0 I z [' F. [6 c' a 构造器没有返回值 9 m* L6 d, t+ c; z 构造器总是和new运算符一起使用.
& B9 U N* T: I/ B+ H* \' q 方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案。 C M7 H4 X) R! a: I0 m
) z0 D" h h( v5 X6 { 23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface。& v; o' P) t) r# d7 X: X8 K
" ]. B6 f# { J) A- `
24.接口不是一个类,而是对符合接口要求的类的一套规范。 0 I8 ^3 ]. Z- ?# }. c! r7 Q0 D/ _. }1 Y& `2 w
若实现一个接口需要2个步骤: : L. d# Q- N1 }9 E5 _! l4 d & S* ] K( v+ o: P T 1.声明类需要实现的指定接口。$ b& H) Q1 C, a" N* r
2.提供接口中的所有方法的定义。 6 c7 t. r. ]+ ^$ ~7 `8 }+ |( f3 w4 ~ 9 K% z) t9 i" M, Q6 j 声明一个类实现一个接口需要使用implements 关键字+ q* q2 w: Y M) @, \
1 B, E5 k i+ ?1 @/ q, f class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口.( I5 Z, v# ^4 }/ e
, g5 @7 S0 w0 @ 25.一个类只有一个超类,但一个类能实现多个接口。Java中的一个重要接口:Cloneable3 k0 B. [6 L2 f _6 @: [& \4 [
! s+ | K# o0 H' ~- B
26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。$ F1 I H$ k. X
# l! F$ ~5 d y$ A 例:ActionListener 接口监听. K9 _- F- |! Q1 l8 \
类似的API有:java.swing.JOptionPane" O. F1 h6 }% h" Y7 S& g& L
! x/ ?4 t* g; ~3 ~ java.swing.Timer0 M% ~* C. l2 o/ S. k
java.awt.Tookit# y0 J7 ~$ G- o5 L
9 K K O, j. X
27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它。4 }# M& e! E6 y9 q* P t# E
: [# h# i" P4 i+ m U+ {( W' `
28.内部类:一个内部类的定义是定义在另一个内部的类。# J: Y, I/ P% Q6 p+ x
( U) l8 C; E" [1 A 原因是: - z" B6 h' X! n9 ^. M& ]) \' Q1 u
1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。" t/ N. W& C7 `2 ?& g* a5 ?
- L. D) {9 X: W, H$ C/ A+ \. {8 D
2.对于同一个包中的其他类来说,内部类能够隐藏起来。 - q7 X. X% d5 R ' b0 U z# m; l2 Y 3.匿名内部类可以很方便的定义回调。5 q: r9 ~. K5 [# @0 G2 H6 p
. Q4 p- y9 k4 \8 h5 X7 k0 h
4.使用内部类可以非常方便的编写事件驱动程序。 3 O8 A( Y! |1 E 4 ~5 y' B3 }8 c) C2 }2 a 29.代理类(proxy): , v1 i9 w5 R5 g. \ A* [5 O* |! c" F
1.指定接口要求所有代码& F# \3 N! e/ m: Y& n! T& I
' { x2 U7 w: { v 2.object类定义的所有的方法(toString equals)6 F+ a; v: p5 i# u3 _' H( s' j