Java的白皮书为我们提出了Java语言的11个关键特性 H2 _+ E: e& s, |8 V - v' _7 f3 L. r (1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb。 % e/ s( m& ^6 u; N 6 I9 a* H- Y2 b7 C v. c4 J, z: q% o (2)分布式:Java带有很强大的TCP/IP协议族的例程库,Java应用程序能够通过URL来穿过网络来访问远程对象,由于servlet机制的出现,使Java编程非常的高效,现在许多的大的web server都支持servlet。 # Y# q4 g: y5 V, |
' d# W4 p) x% A& j' _8 }( v (3)O面向对象设计是把重点放在对象及对象的接口上的一个编程技术.其面向对象和C++有很多不同,在与多重继承的处理及Java的原类模型。 8 u& M" A. a: ]' j* ~8 A4 P
8 {6 i: g6 `6 d7 M) G
(4)健壮特性:Java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能型。 , f+ }! j3 l, r/ U, G! l8 V( s7 {) `( k% h& e
(5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的比较好。 , b0 ?6 v( w; D3 D 0 t+ f, @( D, {* E" k# Y1 |! e (6)中立体系结构:Java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(Javabytecode)实现此特性,此字节码可以在任何机器上解释执行。 / g6 O$ M# Q+ `
7 G! ^7 Y" p5 X# i1 M5 X (7)可移植性:Java中对基本数据结构类型的大小和算法都有严格的规定所以可移植性很好。 $ m9 f( B4 ]) a5 \" U
; j+ J. g: v+ B( z7 q. s (8)多线程:Java处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成.所以多线程是Java作为服务器端开发语言的流行原因之一。 ( N4 [! d! S- ^ ) b* m/ S, M8 @1 F* ] (9)Applet和servlet:能够在网页上执行的程序叫Applet,需要支持Java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的。 9 Q; w* B/ i( t% C; g" a) R& d* P. @2 L- Y9 s H
基本概念 $ e `; R: b4 Y, b: _) I5 P! q5 \ 3 F+ P: z! I* g 1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大限度上提高复用率。 6 b$ q0 ]- a3 q% O
. E" h, ^5 Q5 ?3 ~8 G9 r5 H6 a% | 2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)。 5 v/ x F. N K) H2 k' q
4 R! J. o; e( x/ V% b5 n 3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。 , T. J% s- H0 v& R' F5 q
3 e2 T. T0 X h6 b2 T) |- ` V 4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍。 0 ?7 C: b! b% f
7 `( i& ]; B3 l# J9 ?
5.对象的3个主要特性 6 V' E, X! k; x" _, ] Z+ D9 i
! `& b# T) o( f behavior---说明这个对象能做什么. 2 G' L- f' `2 o/ ]6 _/ z
: L( d! u' D; n7 G8 ^; }4 M, N$ N
state---当对象施加方法时对象的反映. ! X$ x5 @ w* m$ O2 ^0 q6 q1 y
: W4 W2 V+ C5 | dentity---与其他相似行为对象的区分标志. . i( d9 L% k' V) w
% k% s0 {7 o( v6 Z
每个对象有唯一的indentity 而这3者之间相互影响. : h5 f7 j8 l! \7 L: `+ m/ I: l* w- Z/ O
6.类之间的关系: & `. m5 L' v+ T6 H) p7 o
5 [4 s; {4 R3 F0 N+ W use-a :依赖关系 8 @( a* ^9 j: T" `) A4 ~
! M2 j% o' k7 d9 @
has-a :聚合关系 2 d" d y* s1 V/ [, ]. N2 |
1 x& G4 t6 o% S% z3 Y# p
is-a :继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法.(个性存在于共性中) / ?( B1 H0 {- m% T: f2 u
) Q. M/ y i3 ~8 r- v5 o6 n
7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化。 5 k/ Y) l* p+ u: Y4 h( |0 d1 j3 y + _* z7 P/ h- L 例ata类的构造器叫Data 8 x$ F8 v3 q V* m# U- ] A/ X
) F( G8 P6 W" ^$ ]( Q4 x r new Data()---构造一个新对象,且初始化当前时间. % N. L+ @; E: n9 T$ q+ h- C; t
' y8 c! N6 t2 o Data happyday=new Data()---把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者 y# M" r2 X. O# ], g是不同的.new返回的值是一个引用。 / _/ R9 _0 e6 C) ^8 b, D- A' r( J! w4 z4 f9 |+ Z* ?
构造器特点:构造器可以有0个,一个或多个参数 : W0 S) O Z% R- k
! v; n: W0 Q% W* o0 j
构造器和类有相同的名字 % g' n1 @ b, P$ o- m
& V; Q' w; k' n" |. _ 一个类可以有多个构造器 9 W% D$ a' J/ }: x: Y5 @# Y+ y$ v3 ^: Z. m# ~' m/ F
构造器没有返回值 ) w B. X, b9 q! ]3 s1 L% u1 S# g
构造器总是和new运算符一起使用. ) v8 n& z) F% F) W, M2 \ 8.重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载.编译器必须挑选出调用哪个方法。 , o* r* K/ c7 a4 ]; R6 b$ C" G2 h3 r9 A `$ R+ \$ E7 |4 Q* Y- d
9.包(package)Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包.java.lang java.util java,net等,包是分层次的所有的java包都在java和javax包层次内。 . B5 F) ?4 @( _: Q7 _
0 g/ L& I& g5 i- z0 ]9 n3 W
10.继承思想:允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段。 6 P# x; e9 R% y5 O1 S d2 x
]' ^8 w9 O: K5 E5 L" e. P; L& e 11.扩展类:扩展类充分体现了is-a的继承关系. 形式为:class (子类) extends (基类)。 7 Z1 D5 S7 z7 h1 Y* H2 O! L
% \8 q, G+ s8 } 12.多态:在java中,对象变量是多态的.而java中不支持多重继承。 ' U( `9 I1 }% E( y$ W. r1 T3 A) ]' D2 x) P
13.动态绑定:调用对象方法的机制。 1 l/ q& \( O$ L p+ E: m6 s
7 E& ~) b, _ s) r2 X/ C (1)编译器检查对象声明的类型和方法名。 ( U7 ? A+ E& [, e- U# }3 S
, m* E7 U! K& B# t7 q5 D( X
(2)编译器检查方法调用的参数类型。 - M, G R7 ~; G
5 v8 I# E1 w: v6 s' @
(3)静态绑定:若方法类型为priavte static final 编译器会准确知道该调用哪个方法。 % ^! b- q* C7 l0 Y6 Q# A) I: }
! g$ Z) _6 d* E: H (4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用x所指向的对象的实际类型相匹配的方法版本。 , _$ A" Y. w. X" Z8 R, s9 `7 y
, Y& h# n1 z, W1 v+ z5 t
(5)动态绑定:是很重要的特性,它能使程序变得可扩展而不需要重编译已存代码。 % k, n! }9 I8 i: P8 D. c9 u ; X: X$ I9 h6 _+ ~& D& { 14.final类:为防止他人从你的类上派生新类,此类是不可扩展的。 . }/ O% Y; F( {/ @2 `" s6 o/ A7 j: K/ U7 h$ _
15.动态调用比静态调用花费的时间要长。 0 F' l( a, w. g. O& J( Z
& B p- k3 B1 T, N4 I7 L! d 16.抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。 - U; m/ J3 q7 F% i c
( f' o# \# G. O6 L9 f 例: public abstract string getDescripition : D) F! k2 a2 n3 ]( D( t9 S4 U6 E# y6 L: P3 t0 T$ U) Q# b
17.Java中的每一个类都是从Object类扩展而来的。 7 [) f% w A8 M9 V8 L. R& J& k: j , a5 \# ]( O2 L; \7 ?( l2 g7 g 18.object类中的equal和toString方法。 9 w( X6 c4 D/ e. K& X* ^
) U M( h4 Y3 a8 j' s9 Y# s K equal用于测试一个对象是否同另一个对象相等。 ) O) z. D/ ~, b" {7 x1 U% G- |) L2 A1 x6 ^5 k: t
toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示. 2 }+ O; |! p9 ~$ R
2 Y& C; z! q1 z/ d
(toString 方法是一个很重要的方法) & x8 {3 B g; b( B t' F' x" M4 \
; a, f7 X0 Q1 G. F% v3 C 19.通用编程:任何类类型的所有值都可以同object类性的变量来代替。 . J' |$ o$ [/ v6 ^" T- I* e4 R8 A 6 a3 n. e' G! G3 T3 j- S 20.数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大小。 8 i, S' _# X9 U) i1 [% S$ C0 n, c$ a. q: L' T
21.class类 object类中的getclass方法返回ckass类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。 7 z* d7 h z$ M2 F8 F
2 v2 Z5 K" t2 ` 22.class类为编写可动态操纵java代码的程序提供了强大的功能反射,这项功能为JavaBeans特别有用,使用反射Java能支持VB程序员习惯使用的工具。 0 i: v" O% D. p# o* a. F# e' K) P* l# o6 q: D4 j
能够分析类能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射机制十分强大. 9 L* O3 Q+ a$ u
$ j" m, D1 U) i2 ^% V/ N3 h 1.在运行时分析类的能力。 9 _4 J) a9 l8 W# d* }; ?' H2 w' H: y, G0 q" U7 h4 A5 G p
2.在运行时探察类的对象。 # y. p0 K& r+ M% I& b9 B
- k& {: N0 s; e! D E5 v7 s 3.实现通用数组操纵代码。 2 A8 I% K# @2 A" h8 K" P- v+ T6 _; k0 I; E* b2 {
4.提供方法对象。 4 b. W; J# q. x$ y# s7 ?. B- e9 @# I 而此机制主要针对是工具者而不是应用及程序。 2 O: ]8 V+ ? {( K3 d3 H1 y U0 g. K" h+ |% G7 [5 [! G
反射机制中的最重要的部分是允许你检查类的结构.用到的API有: / d0 {8 w% F s% f r9 N # d- ?: Z+ i+ q java.lang.reflect.Field 返回字段. 9 W" g# R+ t& ^ \, q7 ^
% ^* H+ u; v9 _" {5 m4 C7 X% x
java.reflect.Method 返回方法. ; H* g$ M" f' ~; A
5 r$ X; W" }" n$ W% B java.lang.reflect.Constructor 返回参数. . E2 B2 x; y" ?# y% N7 g' r % r- e% ~. e1 Y/ |1 x1 F# i 方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案。 $ U1 @5 k* r8 \% u
/ H# h/ P. G8 U3 f 23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface。 # ]4 o: ]' {( |' x
) w0 e6 V% q, ?, N% y+ B; p/ F 24.接口不是一个类,而是对符合接口要求的类的一套规范。 7 T4 g {4 @& a5 F1 q4 d$ r5 Q0 D0 K6 D3 v( E
若实现一个接口需要2个步骤: h, V9 }; j3 f1 ] ; w/ w! v& ~9 z 1.声明类需要实现的指定接口。 " t( [9 o' V: Z1 o! s* {0 F3 i
}) m) j. P6 @$ f8 I" P 2.提供接口中的所有方法的定义。 2 @4 I+ f1 b" H, I. `, p5 j0 u! z/ j% ?9 v
声明一个类实现一个接口需要使用implements 关键字 ; s0 @( Z1 B* U! Z8 t$ w' O( X- z
$ N1 @+ B5 i4 E+ T, }! s4 A class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口. 5 p3 |: k R7 f9 ~# I$ x5 ?' Y* p9 y, F: G: H, C6 b9 [
25.一个类只有一个超类,但一个类能实现多个接口。Java中的一个重要接口:Cloneable / {5 ]/ s+ y% t' L
$ y' y0 O9 { u! v8 S
26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。 , F1 W: z8 N$ [
7 L& |2 x% d$ d2 ~8 o. q 例:ActionListener 接口监听. 7 ~6 Q) j6 P1 y) H
S. _4 G1 z. ~! x) \
类似的API有:java.swing.JOptionPane " R. M# o' J; ?% s1 _ 0 p( d+ @0 ^6 A* s6 x" E java.swing.Timer 6 G) Y, D# E" R* ^; |/ V
3 ]7 v8 n7 v$ E" P
java.awt.Tookit 8 G+ d' R% w! ~3 ^; i8 z- n0 I& ~: H$ H: D% l! t: ~( {/ e
27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它。 : V* z. Z9 h& ^4 ]" [: w% l9 P- g1 N- F. Z) {, j3 y9 @
28.内部类:一个内部类的定义是定义在另一个内部的类。 * X/ \8 B$ I; h5 t% z6 ?1 j0 t; i; ?6 D7 t l! z
原因是: 4 ]' j# H* N; j7 E! y, g' v0 E
3 G) w. z+ o( E! o
1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。 0 ?! W1 J8 _4 `7 H; }! V) Z+ C. [5 K! ^ O+ N
2.对于同一个包中的其他类来说,内部类能够隐藏起来。 o: m& g+ e0 N+ P: F4 O( i& y1 @4 q4 j5 V
3.匿名内部类可以很方便的定义回调。 3 a/ l* A9 x# X0 F) T
3 }. h1 N; ~, u6 @' ^1 c! p 4.使用内部类可以非常方便的编写事件驱动程序。 " m: U5 e% ]1 N- x7 @2 i5 y& V$ q1 j4 @& _# v4 u; @
29.代理类(proxy): 8 w" c1 l8 R# r# ]$ n/ d
' ~+ D/ c, Z* |2 S8 m
1.指定接口要求所有代码 7 k7 |0 @$ W: H
! f" F1 B4 z4 E
2.object类定义的所有的方法(toString equals) + N0 f0 V, f- n* d
4 T" e$ e/ h1 _' S 30.数据类型:Java是强调类型的语言,每个变量都必须先申明它都类型,java中总共有8个基本类型.4种是整型,2种是浮点型,一种是字符型,被用于Unicode编码中的字符,布尔型。