Professional Documents
Culture Documents
cc
c
cc
-- - - - - --
Đӗ án môn hӑc:
! "
#$!%&
' ()
Ë|
!ava đưӧc khӣi đҫu bӣi !ames Gosling và bҥn đӗng nghiӋp ӣ Sun Microsystems năm 1991. Ban đҫu ngôn
ngӳ này đưӧc gӑi là Oak (có nghĩa là cây sӗi; do bên ngoài cơ quan cӫa ông Gosling có trӗng nhiӅu loҥi
cây này), hӑ dӵ đӏnh ngôn ngӳ đó thay cho C++, nhưng các tính năng giӕng Objective C. Không nên lүn
lӝn !ava vӟi !avaScript, hai ngôn ngӳ đó chӍ giӕng tên và loҥi cú pháp như C. Công ty Sun Microsystems
đang giӳ bҧn quyӅn và phát triӇn !ava thưӡng xuyên.
!ava đưӧc tҥo ra vӟi tiêu chí "ViӃt (code) mӝt lҫn, thӵc thi khҳp nơi" ("Write Once, Run Anywhere"
(WORA)). Chương trình phҫn mӅm viӃt bҵng !ava có thӇ chҥy trên mӑi nӅn tҧng (platform) khác nhau
thông qua mӝt môi trưӡng thӵc thi vӟi điӅu kiӋn có môi trưӡng thӵc thi thích hӧp hӛ trӧ nӅn tҧng đó. Môi
trưӡng thӵc thi cӫa Sun Microsystems hiӋn hӛ trӧ Sun Solaris, Linux, Mac OS, FreeBSD & Windows.
Ngoài ra, mӝt sӕ công ty, tә chӭc cũng như cá nhân khác cũng phát triӇn môi trưӡng thӵc thi !ava cho
nhӳng hӋ điӅu hành khác như BEA, IBM, HP... . Trong đó đáng nói đӃn nhҩt là IBM !ava Platform hӛ trӧ
Windows, Linux, AIX & z/OS.
Nhӳng chi tiӃt vӅ ngôn ngӳ, máy ҧo và API cӫa !ava đưӧc giӳ bӣi Cӝng đӗng !ava (do Oracle quҧn lý).
!ava đưӧc tҥo ra vào năm 1991 do mӝt sӕ kӻ sư ӣ Sun, bao gӗm ông !ames Gosling, mӝt phҫn cӫa Dӵ án
Xanh (Green Project). !ava đưӧc phát hành vào năm 1994, rӗi nó trӣ nên nәi tiӃng khi Netscape tuyên bӕ
tҥi hӝi thҧo SunWorld năm 1995 là trình duyӋt Navigator cӫa hӑ sӁ hӛ trӧ !ava. VӅ sau !ava đưӧc đưӧc
hӛ trӧ trên hҫu hӃt các trình duyӋt như Internet Explorer (Microsoft), Firefox (Mozilla), Safari (Apple)...
!ava đưӧc sӱ dөng chӫ yӃu trên môi trưӡng mҥng, internet.subby Sau khi Oracle mua lҥi công ty Sun
Microsystems năm 2009-2010, Oracle đã mô tҧ hӑ là "ngưӡi quҧn lý công nghӋ !ava vӟi cam kӃt không
ngӯng đӇ bӗi dưӥng mӝt cӝng đӗng tham gia và minh bҥch".
r| R
Có 5 mөc tiêu chính trong viӋc xây dӵng ngôn ngӳ !ava:
ß|
±| !DK 1.1.4 (Sparkler) 12 tháng 9, 1997
±| !DK 1.1.5 (Pumpkin) 3 tháng 12, 1997
±| !DK 1.1.6 (Abigail) 24 tháng 4, 1998
±| !DK 1.1.7 (Brutus) 28 tháng 9, 1998
±| !DK 1.1.8 (Chelsea) 8 tháng 4, 1999
±| !2SE 1.2 (Playground) 4 tháng 12, 1998
±| !2SE 1.2.1 (không có) 30 tháng 3, 1999
±| !2SE 1.2.2 (Cricket) 8 tháng 7, 1999
±| !2SE 1.3 (Kestrel) 8 tháng 5, 2000
±| !2SE 1.3.1 (Ladybird) 17 tháng 5, 2001
Khi bҥn viӃt mã, bҥn sinh ra mӝt tӋp .java. Khi bҥn biên dӏch tӋp này, trình biên dӏch cӫa !ava sinh ra mӝt
tӋp .class, chӭa các mã byte. !VM đӑc và thông dӏch tӋp .class này lúc chҥy và nó hoҥt đӝng như thӃ nào
là tùy thuӝc vào nӅn tҧng hӋ thӕng mà bҥn đang chҥy. ĐӇ chҥy trên các nӅn hӋ thӕng khác nhau, bҥn phҧi
biên dӏch mã nguӗn cӫa mình theo các thư viӋn dành riêng cho nӅn tҧng hӋ thӕng đó. Bҥn có thӇ hình
dung, lӡi hӭa hҽn ³viӃt mӝt lҫn, chҥy mӑi nơi´ sӁ trӣ thành ³viӃt mӝt lҫn, kiӇm thӱ mӑi nơi´. Bӣi vì giӳa
các nӅn tҧng hӋ thӕng khác nhau có nhiӅu điӇm khác nhau nên có thӇ khiӃn cho mã lӋnh cӫa bҥn thi hành
khác nhau trên nhӳng nӅn tҧng khác nhau.
r|
!ava Platform, Standard Edition hoһc !ava SE là mӝt nӅn tҧng đưӧc dùng rӝng rãi đӇ lұp trình bҵng ngôn
ngӳ !ava. Đây là nӅn tҧng !ava đưӧc sӱ dөng đӇ triӇn khai các ӭng dөng portable đӇ sӱ dөng chung. Trên
thӵc tӃ, !ava SE bao gӗm mӝt máy ҧo, đưӧc sӱ dөng đӇ chҥy các chương trình !ava, cùng vӟi mӝt tұp hӧp
các thư viӋn (hoһc "các gói") cҫn thiӃt đӇ cho phép sӱ dөng các tұp tin hӋ thӕng, mҥng, giao diӋn đӗ hӑa,
và cҧ chính chương trình đó.
Tӯ phiên bҧn !ava 1.2 đӃn 1.5, !ava SE thưӡng đưӧc biӃt đӃn vӟi cái tên !2SE(!ava 2 Platform: Standard
Edition). Tuy nhiên, đӃn phiên bҧn 1.6 thì sӕ 2 đã đưӧc bӓ đi.
§| !
Tên !2SE (!ava 2 Platform, Standard Edition) đưӧc sӱ dөng tӯ phiên bҧn 1.2 cho đӃn 1.5. Tӯ "SE" đưӧc
sӱ dөng đӇ phân biӋt vӟi các nӅn tҧng khác là !ava EE và !ava ME. "2" ban đҫu vӕn đưӧc dùng đӇ chӍ đӃn
nhӳng thay đәi lӟn trong phiên bҧn 1.2 so vӟi các phiên bҧn trưӟc, nhưng đӃn phiên bҧn 1.6 thì "2" bӏ loҥi
bӓ.
Phiên bҧn đưӧc biӃt đӃn tӟi thӡi điӇm hiӋn tҥi là !ava SE 6 (hay !ava SE 1.6 theo cách đһt tên cӫa Sun
Microsystems) vӟi tên mã Mustang.
ß|
!ava Platform, Micro Edition (!ava ME) là 1 môi trưӡng mҥnh, linh đӝng trong viӋc phát triӇn ӭng dөng
chҥy trên điӋn thoҥi di đӝng (mobile) và các thiӃt bӏ nhúng (embedded devices) ± mobile phones, PDAs,
TV set-top boxes, và máy in. !ava ME gӗm giao diӋn ngưӡi dùng linh đӝng, bҧo mұt mҥnh, giao thӭc
mҥng đưӧc xây dӵng sҹn, và hӛ trӧ cҧ ӭng dөng có kӃt nӕi mҥng lүn ӭng dөng offline. Ӭng dөng dӵa trên
!ava ME mang tính khҧ chuyӇn trên nhiӅu thiӃt bӏ, tương thích nhiӅu nӅn tҧng.
!ava ME Platform là 1 dӵ án mӣ cho viӋc xây dӵng ӭng dөng trên điӋn thoҥi di đӝng. Nó bao gӗm các
thành phҫn chuҭn đưӧc đӏnh nghĩa bӣi !ava Community Process (!CP). !ava ME đưӧc thiӃt kӃ đӇ cung
cҩp tính linh đӝng giӳa các nӅn tҧng.
Công nghӋ !ava ME đưӧc sӵ tham gia và cҧi tiӃn liên tөc đӇ tҥo ra các chuҭn tӯ !CP.
§| i
Mobile Information Device Profile (MIDP) là mӝt đһc tҧ kӻ thuұt đưӧc công bӕ cho viӋc sӱ dөng !ava
trên các thiӃt bӏ nhúng như điӋn thoҥi di đӝng và PDA. MIDP là mӝt phҫn cӫa nӅn tҧng !ava, Micro
Edition (!ava ME) framework và nҵm ӣ phҫn đҫu cӫa Cҩu hình thiӃt bӏ bӏ hҥn chӃ KӃt nӕi (Connected
Limited Device Configuration - CLDC), mӝt tұp hӧp các giao diӋn lұp trình cҩp thҩp. MIDP đã đưӧc phát
triӇn theo !ava Community Process. Các thiӃt bӏ MIDP đҫu tiên đưӧc tung ra vào tháng Tư năm 2001.
KӇ tӯ khi ngôn ngӳ !ava ra đӡi, !DK là bӝ phát triӇn phҫn mӅm thông dөng nhҩt cho !ava. Ngày 17 tháng
11 năm 2006, hãng Sun tuyên bӕ !DK sӁ đưӧc phát hành dưӟi giҩy phép GNU General Public License
(GPL), !DK trӣ thành phҫn mӅm tӵ do. ViӋc này đã đưӧc thӵc hiӋn phҫn lӟn ngày 8 tháng 5 năm 2007[1]
và mã nguӗn đưӧc đóng góp cho Open!DK.
ß|
j| c67)128&
Eclipse là mӝt môi trưӡng phát triӇn tích hӧp (Integrated Development Environment ± IDE) cho !ava,
đưӧc phát triӇn ban đҫu bӣi IBM và hiӋn nay bӣi tә chӭc Eclipse (http://www.eclipse.org). ĐӃn thӡi điӇm
hiӋn nay, Eclipse không gói gӑn trong viӋc cung cҩp môi trưӡng phát triӇn tích hӧp cho !ava mà còn cho
các ngôn ngӳ khác như !avaScript, PHP, C, C++, Cobol, Python, C#, HTML, XML nӃu ngưӡi dùng cài
đһt thêm các plug-in. Ngoài viӋc hӛ trӧ các ngôn ngӳ lұp trình, các plug-in còn cho phép Eclipse làm viӋc
đưӧc vӟi ngôn ngӳ sҳp chӳ (typesetting language) như LaTEX; ӭng dөng mҥng như Telnet, trình duyӋt
web; hӋ quҧn trӏ cơ sӣ dӳ liӋu«
a)| c atformruntim
Công viӋc chính cӫa Platform runtime là phát hiӋn xem plug-in nào đang có trong thư mөc plug-in cӫa
Eclipse.Mӛi Plug-in đӅu có 1 tұp tin Manifest liӋt kê nhӳng kӃt nӕi mà plug-in cҫn.Plug-in chӍ đưӧc tҧi
vào Eclipse mӛi khi thӵc sӵ cҫn thiӃt đӇ giҧm lưӧng tài nguyên yêu cҫu và thӡi gian khӣi tҥo.
l)| c orkspac
±| Workspace chӏu trách nhiӋm quҧn lý tài nguyên ngưӡi dùng đưӧc tә chӭc dưӟi dҥng Project. Mӛi
Project là mӝt thư mөc con trong thư mөc Workspace.
±| Workspace lưu trӳ lӏch sӱ nhӳng sӵ thay đәi tài nguyên, tránh thҩt thoát tài nguyên ngưӡi dùng.
±| Workspace đӗng thӡi chӏu trách nhiӋm thông báo nhӳng công cө cҫn thiӃt cho viӋc thay đәi tài
nguyên.
)| ?p
Cung cҩp hӋ thӕng tài liӋu mӣ rӝng, có thӇ là đӏnh dҥng HTML hay XML.
Ë | :242$1<2 =
r| R
Là mӝt nhóm các class, interface, các gói khác đã đưӧc biên dӏch thành !ava bytecode. Mӑi đӕi tưӧng
!ava đӅu nҵm trong mӝt package. NӃu bҥn không nói rõ ràng nó thuӝc gói nào, !ava sӁ đһt nó vào
trong gói mһc đӏnh. Mӝt package chӍ đơn giҧn là mӝt tұp các đӕi tưӧng, tҩt cҧ (thưӡng là thӃ) liên quan
vӟi nhau theo mӝt cách nào đó. Cácpackage quy chiӃu theo đưӡng dүn đӃn tӋp tin trong hӋ thӕng tӋp cӫa
bҥn. Tên cӫa các gói dùng ký pháp dҩu chҩm (.) đӇ dӏch đưӡng dүn tӋp tin này thành mӝt thӭ mà nӅn tҧng
!ava hiӇu đưӧc.
±| DӉ tìm các lӟp: Các lӟp có chӭc năng tương tӵ nhau đưӧc đһt trong cùng mӝt gói đӇ dӉ tìm.
±| Tránh sung đӝt tên.
±| Phân tán phҫn mӅm thuұn tiӋn.
±| Bҧo vӋ các thành viên cӫa lӟp.
±| !ava yêu cҫu cҩu trúc thư mөc chӭa gói phҧi tương ӭng vӟi tên gói.
Ví dө: vӟi tên gói là vn.edu.hau1.mypackage thì phҧi tҥo cҩu trúc thư
mөc là \vn\edu\hau1\mypackage
±| ĐӇ !ava tìm đưӧc nơi đһt cây thư mөc gói thì biӃn môi trưӡng classpath phҧi xác đӏnh thư mөc
chӭa cây thư mөc gói.
Ví dө: nӃu cây thư mөc gói đһt trong thư mөc c:\javapro thì classpath = . ;c:\javapro
j| c2>&
Khai báo package trong code cӫa class.
Dùng tӯ khóa package
Cú pháp: package PackageCha[.PackageCon];
Khai báo package phҧi là dòng đҫu tiên cӫa code java.
/* Comment */
package PackageCha[.PackageCon];
[import OtherPackageName ;]
class ClassName
{ .......
}
Khi biên dӏch thành công:
Ô| NӃu chưa có thư mөc PackageName thì thư mөc này sӁ đưӧc tӵ đӝng tҥo ra
Ô| File.class cӫa code này sӁ đưӧc đһt vào thư mөc này.
import PackageName.*;
import PackageCha.PackageCon.*;
import PackageName.ClassName;
import PackagCha.PackageCon.ClassName;
ß|
Mӝt lӟp có thӇ đưӧc dүn xuҩt (derived) tӯ lӟp khác, và do vұy kӃ thӯa (inherit) mӑi trưӡng và phương
thӭc cӫa lӟp đó.
±| Lӟp đưӧc kӃ thӯa gӑi là lӟp cha (superclass, parent class) hoһc lӟp cơ sӣ (base class).
±| Lӟp thӯ kӃ gӑi là lӟp con (subclass, child class) hoһc lӟp dүn xuҩt (derived class) hoһc lӟp mӣ
rӝng (extended class).
Trong !ava, tҩt cҧ các lӟp đӅu đưӧc dүn xuҩt tӯ Object. Quan hӋ kӃ thӯa tҥo thành cây hay cҩu trúc phân
cҩp.
«««««««««««..
«««««««««««
|
Interface là 1 lӟp bao gӗm biӃn hҵng và các hàm đưӧc khai báo trưӟc nhưng không đưӧc đӏnh nghĩa,
nghĩa là các hàm này không hӅ có thân (body). Interface chӭa các hành vi chuҭn (standard behavior) đưӧc
thӵc hiӋn bӣi bҩt kì lӟp nào trong hӋ thӕng phân cҩp lӟp. Nghĩa là các hàm trong interface có thӇ đưӧc
thӵc hiӋn bӣi các lӟp không có liên hӋ gì đӃn nó.
Interface đưӧc dùng như mӝt "kiӇu" chӍ chӭa đӏnh nghĩa hҵng và phương thӭc trӯu tưӧng. Interface
không thӵc thi bҩt cӭ mӝt phương thӭc nào nhưng đӇ lҥi cҩu trúc thiӃt kӃ trên bҩt cӭ lӟp nào sӱ dөng
nó.Mӝt lӟp thӵc thi interface phҧi hoһc cài đһt tҩt cҧ các phương thӭc(có trong interface) hoһc khai báo là
lӟp trӯu tưӧng.
j| :A>+BË& .&;
±| Mӝt lӟp thi hành các hàm trong interface thông qua tӯ khoá implements.
±| Mӝt lӟp có thӇ implements nhiӅu interface.
±| Dù không khai báo tӯ khoá abstract, nhưng mӑi hàm trong 1 interface đӅu đưӧc coi là abstract
(trӯu tưӧng).
±| Các biӃn trong Interface thì phҧi là public, static hay final.
±| Không đưӧc khai báo private hay protected đӕi vӟi các biӃn và các hàm trong Interface vì các
hàm này sӁ đưӧc viӃt lҥi (overriden) trong lӟp thӵc thi nó.
±| Hàm trong interface không thӇ là final.
Cú pháp:
[modifier]interface InterfaceName
NӃu không có modifier thӍ chӍ các class/interface cùng gói/ cùng thư mөc mӟi truy cұp đưӧc.
Mӝt lӟp có code cө thӇ hóa các hành vi cӫa mӝt interface thì gӑi là implementation.
Mӝt lӟp có thӇ thӵc thi nhiӅu interface (vì trong java chӍ cho đơn thӯa kӃ nên cách này dung đӇ phөc vө
cho đa thӯa kӃ).
<Data riêng>
j| 8&D)E
extends AbstractSet<E>
Tұp hӧp các phҫn tӱ đưӧc sҳp xӃp theo thӭ tӵ (các phҫn tӱ khi đưa vào TreeSet sӁ tӵ đӝng đưӧc đưa đúng
vӏ trí theo thӭ tӵ sҳp xӃp).
Là implement trung gian giӳa HasSet và TreeSet, giӕng như là mӝt bҧng băm vӟi mӝt danh sách liên kӃt
chҥy bên trong nó. LinkedHashSet có tӕc đӝ truy xuҩt nhanh gҫn bҵng HasSet.
ß| 0
Là tұp hӧp các phҫn tӱ theo thӭ tӵ (do ngưӡi dùng sҳp xӃp). Ngưӡi sӱ dөng interface này có thӇ kiӇm soát
chính xác các phҫn tӱ thông qua vӏ trí cӫa mà phҫn tӱ đó đưӧc thêm vào. Ngưӡi dùng có thӇ truy xuҩt các
phҫn tӱ thông qua vӏ trí cӫa nó và có thӇ tìm kiӃm các phҫn tӱ trong đó. Không như Set, trong List cho
phép các phҫn tӱ trùng lһp.
j| r 08D)E
extends AbstractList<E>
Cung cҩp các truy xuҩt theo vӏ trí không đәi theo thӡi gian, tӕc đӝ nhanh. Nó không phҧi cҩp phát mӝt
đӕi tưӧng Node cho mӛi phҫn tӱ trong List, và nó có thӇ tұn dөng lӧi thӃ cӫa System.arraycopy khi nó
phҧi di chuyӇn nhiӅu phҫn tӱ cùng mӝt lúc.
'| 0>&+08D)E
extends AbstractSequentialList<E>
|
Tұp hӧp các phҫn tӱ đưӧc truy xuҩt theo nguyên tҳc ³vào trưӟc, ra trưӟc´. LinkedList là mӝt thӵc thi cӫa
interface Queue.
|
Là mӝt đӕi tưӧng dùng đӇ ánh xҥ các Key thành giá trӏ tương ӭng. Trong Map không chӭa các key trùng
lһp và mӛi key chӍ ánh xҥ cho duy nhҩt mӝt giá trӏ tương ӭng.
j| c &&F2D*E
extends AbstractMap<K,V>
TreeMap dùng đӇ ánh xҥ mà trong đó các key đưӧc sҳp xӃp theo thӭ tӵ.
'| 8F2D*E
extends AbstractMap<K,V>
Dùng đӇ ánh xҥ mà tӕc đӝ truy xuҩt các key và value cӵc kì nhanh.
| 0>&+ 8F2D*E
extends HashMap<K,V>
implements Map<K,V>
Là sӵ kӃt hӧp giӳa TreeMap và LinkedHashMap, các key đưӧc sҳp xӃp theo thӭ tӵ và tӕc đӝ truy xuҩt
cũng khá nhanh.