You are on page 1of 7

ng luc hoc lp trnh Java, Phn 1: Cc lp Java

v vic nap cc lp
Quan st cc lp v nhng g xy ra khi chng duqc mt JVM nqp
Muc d: Trung bnh
Dennis Sosnoski, Nh tu vn, Sosnoski Software Solutions, Inc.
04 12 2009
Hy xem xt nhung g xay ra o hu truong v vic thuc hin ung dung Java cua ban trong loat bi vit
moi v cc kha canh dng cua lp trnh Java. Chuyn gia Java doanh nghip Dennis Sosnoski dua ra tin
s deo v dinh dang lop nhi phn Java v nhung g xay ra voi cc lop bn trong JVM. Trong bi ny, ng
cn trnh by cc vn d nap lop nm trong pham vi tu s luong cc lop cn thit d chay mt ung dung
Java don gian dn cc xung dt trnh nap lop, m chng c th gy ra cc vn d trong J2EE v cc kin
trc phuc tap tuong tu.
Bi vit ny mo du mt loat bi vit moi trnh by mt ho cc chu d m ti goi l dong luc hoc lap trnh Java. Cc
chu d gm tu cu trc co so cua dinh dang tp lop nhi phn Java, thng qua truy cp siu du liu trong thoi gian chay
bng cch su dung su phan chiu, tt ca cc cch d sua di v xy dung cc lop moi trong thoi gian chay. Cc chu d
chung chay xuyn sut tt ca ti liu ny l tuong trong d vic lp trnh nn tang Java l nng dng nhiu hon lm
vic voi cc ngn ngu bin dich thng voi m gc. Nu ban hiu nhung kha canh nng dng ny, ban c th lm nhiu
thu voi lp trnh Java m khng th khop voi bt k ngn ngu lp trnh chu dao no khc.
Trong bi vit ny, ti trnh by mt s cc khi nim co ban lm nn tang cho cc tnh nng dng ny cua nn tang
Java. Cc khi nim ny xoay quanh dinh dang nhi phn duoc su dung d biu din cc lop Java, gm ca nhung g s
xay ra khi nhung lop ny duoc nap vo trong JVM. Ti liu ny khng chi cung cp mt nn mng cho phn cn lai
cua cc bi vit trong loat ny, m n cn giai thch mt s cc mi quan tm rt thit thuc cho cc nh pht trin dang
lm vic trn nn tang Java.
Mt lp dui dang m nh[ phn
Cc nh pht trin dang lm vic trong ngn ngu Java thuong khng phai bn tm dn cc chi tit v nhung g xay ra
voi m ngun cua ho khi n duoc chay qua trnh bin dich. Trong loat bi ny, ti sp trnh by rt nhiu cc chi tit o
hu truong lin quan dn vic s xay ra tu m ngun d thuc hin chuong trnh, tuy nhin, ti s bt du xem xt tai
cc lop nhi phn do mt trnh bin dich tao ra.
Dinh dang lop nhi phn trn thuc t duoc dc ta JVM xc dinh. Bnh thuong, tu m ngun cua ngn ngu Java, mt
trnh bin dich tao ra cc cch biu din cc lop ny v chng thuong duoc luu tru trong cc tp c phn mo
rng .class. Tuy vy, ca hai tnh nng ny khng cn thit. Cc ngn ngu lp trnh khc d duoc pht trin c su
dung dinh dang lop nhi phn Java v voi mt s muc dch, cc cch biu din lop moi duoc xy dung v ngay lp tuc
duoc nap trong lc thuc hin JVM. Di voi JVM , phn quan trong khng phai l m ngun hoc cch n duoc luu tru,
m l chnh dinh dang cua n.
V vy, trn thuc t lop ny dinh dang trng nhu th no? Lit k 1 dua ra cc m ngun cho mt lop (rt) ngn, cng
voi mt phn hin thi h dm muoi su cua kt qua tp lop cua trnh bin dich:

Lit k 1. M ngun v (mt phn) m nh| phn cho tp Hello.java
pub11c c1ass he11o
{
pub11c sfaf1c vo1d ma1n{5f1ng|] ags} {
5ysfem.ouf.p1nf1n{"he11o, Wo1d!"}
}
}

0000: cafe babe 0000 002e 001a 0a00 0600 0c09 ................
0010: 000d 000e 000 0f0a 0010 0011 0700 1207 ................
0020: 0013 0100 063c 696e 6974 3e01 0003 229 .....<1n1f>...{}
0030: 5601 0004 436f 6465 0100 046d 6169 6e01 v...Code...ma1n.
Page 1 of 7 Dng luc hoc lp trnh Java, Phn 1: Cc lop Java v vic nap cc lop

Bn trong m nh[ phn
Diu du tin trong vic biu din lop nhi phn duoc th hin trong Lit k 1 l chu k "qun cafe babe" d xc nhn
dinh dang lop nhi phn Java (v ngu nhin dng nhu l mt -- nhung phn lon khng duoc thua nhn -- chung cu bn
vung cho nhung nguoi pha c ph (baristas) lm vic chm chi, nhung nguoi giu tinh thn cho cc nh pht trin dang
xy dung nn tang Java). Chu k ny l mt cch d dng d xc minh rng mt khi du liu thuc su dua ra yu cu l
mt c th cua dinh dang lop Java. Mi lop nhi phn Java, thm ch mt lop khng c trn h thng tp tin d, cn bt
du bng bn byte ny.
Phn cn lai cua du liu t th vi. Sau chu k l mt cp cc s phin
ban dinh dang lop (trong truong hop ny, phin ban phu 0 v phin
ban chnh 46 -- h dm muoi su 0x2e -- nhu duoc tao ra boi cc javac
1.4.1), sau d mt s dm cc li vo trong nhm hng s. S dm li
vo (trong truong hop 26 ny hoc 0x001a) tip theo l du liu cua
nhm hng s thuc su. Dy l noi luu tru tt ca cc hng s duoc su
dung boi cc dinh nghia lop. N gm lop v cc tn phuong thuc, cc
chu k v cc chui (m ban c th nhn ra trong phn giai thch bng
vn ban o bn phai cua kt qua theo h dm muoi su), cng voi cc
gi tri nhi phn khc nhau.
Cc muc trong nhm hng s c chiu di thay di, voi byte du tin
cua mi muc xc dinh kiu muc v cch giai m n. Ta s khng di
vo chi tit cua tt ca thu c o dy -- c rt nhiu ti liu tham khao c
sn nu ban quan tm, bt du voi dc ta JVM thuc su. Dim mu cht
l nhm hng s c tt ca cc tham chiu dn cc lop khc v cc
phuong thuc duoc lop ny su dung, cng voi nhung dinh nghia thuc
su cho lop ny v cc phuong thuc cua n. Nhm hng s c th d
dng chim mt nua hoc phn lon hon cua kch thuoc lop nhi phn,
mc d ty l trung bnh c l l thp hon.
Tip theo nhm hng s l mt vi muc tham chiu cc li vo nhm
hng s cho chnh lop d, siu lop v cc giao din cua n. Cc muc
ny duoc k tip boi cc thng tin v cc truong v cc phuong thuc, chnh chng duoc biu din nhu l cc cu trc
phuc tap. Cc m thuc hin cho cc phuong thuc duoc trnh by duoi dang cc thuoc tnh m duoc chua trong cc dinh
nghia phuong thuc. M ny c trong dang huong dn cho JVM, thuong duoc goi l m byte (bytecode), dy l mt
trong nhung chu d cho phn tip theo.
Cc thuoc tnh duoc su dung cho mt s cc muc dch d xc dinh
trong dinh dang lop Java, bao gm ca bytecode d ni trn, gi tri
hng s cho cc truong, xu l ngoai l v thng tin g ri. Du sao cc
muc dch ny khng phai chi c kha nng su dung cho cc thuc tnh.
Tu du, dc ta JVM d yu cu cc JVM bo qua cc thuc tnh cua cc
kiu khng r. Yu cu ny dua ra tnh linh hoat d cho vic mo rng
su dung cc thuc tnh d phuc vu cho cc muc dch khc trong tuong
lai, nhu l vic cung cp siu-thng tin duoc cc khung cng tc cn
d lm vic voi cc lop cua nguoi su dung -- mt cch tip cn m cc
ngn ngu C# c ngun gc Java d su dung rng ri. Tht khng may,
vn chua c cc kt ni no duoc cung cp d tin hnh su dung tnh linh hoat ny o muc nguoi dng.



0040: 0016 25b 4c6a 6176 612f 6c61 6e67 2f53 ..{|Lava/1ang/5
0050: 7472 696e 673b 2956 0c00 0700 007 0014 f1ng}v........
0060: 0c00 1500 1601 000d 465 6c6c 6f2c 2057 ........he11o, W
0070: 6f72 6c64 2107 0017 0c00 100 1901 0005 o1d!...........
000: 465 6c6c 6f01 0010 6a61 7661 2f6c 616e he11o...ava/1an
0090: 672f 4f62 6a65 6374 0100 106a 6176 612f g/Obecf...ava/
00a0: 6c61 6e67 2f53 7973 7465 6d01 0003 6f75 1ang/5ysfem...ou
...
Dng bo l phn cn li cua lot bi ny

Phn 2, "Gioi thiu su phan chiu" (June
2003)

Phn 3, "Ung dung su phan
chiu" (07.2003)

Phn 4, "Chuyn di lop bng
Javassist" (09.2003)

Phn 5, "Vic chuyn cc lop dang hoat
dng" (02.2004)

Phn 6, "Cc thay di huong-kha canh voi
Javassist" (03.2004)

Phn 7, "K thut bytecode voi
BCEL" (04.2004)

Phn 8, "Thay th su phan chiu bng vic
tao m" (06.2004)
Hoi chuyn gia: Dennis Sosnoski v cc
vn d JVM v bytecode
Di voi cc kin hay cc cu hoi v ti
liu duoc trnh by trong loat bi ny, cung
nhu bt cu diu g khc c lin quan dn
Java bytecode, dinh dang lop nhi phn Java
hoc cc vn d JVM chung, hy truy cp
vo din dn thao lun JVM v Bytecode,
do Dennis Sosnoski kim sot.
Page 2 of 7 Dng luc hoc lp trnh Java, Phn 1: Cc lop Java v vic nap cc lop
Bytecode v cc ngn xp
Bytecode chim phn thuc thi cua tp lop trn thuc t l m my cho mt loai my tnh dc bit -- JVM. My ny
duoc goi l mt my ao v n duoc thit k d thuc hin trong phn mm hon l phn cung. Mi JVM duoc su dung
d chay cc ung dung nn tang Java duoc xy dung xung quanh mt vic trin khai thuc hin cua my ny.
My ao ny thuc su kh don gian. N su dung mt kin trc ngn xp, c nghia l cc ton hang lnh duoc nap vo
mt ngn xp bn trong truoc khi chng duoc su dung. Tp lnh gm tt ca cc php ton s hoc v logic bnh thuong,
cng voi cc nhnh c diu kin v khng diu kin, nap/luu tru, goi/tra v, thao tc ngn xp v mt s cc kiu lnh
dc bit. Mt s lnh gm cc gi tri ton hang cu th duoc m ha truc tip vo trong cc lnh. Nhung ci khc truc
tip tham chiu cc gi tri tu nhm hng s.
Mc d my ao don gian, nhung vic thuc hin khng nht thit phai nhu vy. Cc JVM ban du (th h du tin) v
co ban d l cc trnh dich cho bytecode cua my ao. Trn thuc t chng tuong di don gian, nhung bi mc phai vn d
v hiu nng nghim trong -- ; vic thng dich m lun lun s mt nhiu thoi gian hon so voi thuc hin m gc. D
giam cc vn d hiu nng ny, cc JVM th h thu hai duoc b sung vic dich ngay (JIT). K thut JIT bin dich
bytecode Java thnh m gc truoc khi thuc hin n cho ln du tin, cho php hiu nng tt hon voi nhiu ln thuc
hin lp lai. Cc JVM th h hin nay thm ch cn di xa hon nua, bng cch su dung cc k thut thch nghi d theo
di vic thuc hin chuong trnh v chon lua ti uu ha cc m su dung nhiu.



Nap cc lp
Cc ngn ngu nhu C v C++ bin dich thnh m gc thuong di hoi mt buoc lin kt sau khi m ngun duoc bin
dich. Qu trnh lin kt ny kt hop m tu cc tp m ngun d bin dich tch bit nhau, cng voi m thu vin dng
chung, d tao thnh mt chuong trnh thuc hin. Ngn ngu Java c khc. Voi ngn ngu Java, cc lop duoc trnh bin
dich tao ra ni chung vn giu nguyn nhu chng c cho dn khi chng dang nap vo mt JVM. Ngay ca vic xy dung
mt tp JAR tu cc tp lop khng thay di diu ny -- JAR chi l mt thng chua cho cc tp lop d.
Thay v l mt buoc ring r, vic lin kt cc lop l mt phn cua mt cng vic duoc JVM thuc hin khi n nap
chng vo trong b nho. Diu ny b sung thm chi ph hoat dng khi cc lop duoc nap lc du, nhung cung tao ra
mt muc linh hoat cao hon cho cc ung dung Java. V du, cc ung dung c th duoc vit d su dung cc giao din voi
cc vic thuc hin thuc su m chng d d lai khng xc dinh cho dn khi dang chay. Cch tip cn lin kt cuoi ny
d lp rp mt ung dung duoc su dung rng ri trong nn tang Java, voi cc servlet dang l mt v du ph bin.
Cc quy tc d nap cc lop duoc giai thch mt cch chi tit trong dc ta JVM. Nguyn tc co ban l cc lop chi duoc
nap khi cn thit (hoc t nht xut hin d duoc nap theo cch ny -- JVM c mt s tnh linh hoat trong vic nap thuc
t, nhung phai duy tr trnh tu khoi tao lop c dinh). Mi lop d nap c th c cc lop khc m n phu thuc vo, do
d, qu trnh nap l qu trnh d quy. Cc lop trong Lit k 2 cho thy vic nap d quy ny hoat dng nhu th no. Lop
Demo gm mt phuong thuc main (chnh) don gian d tao ra mt c th Greeter Nguoi dn khch) v goi phuong
thuc greet. Hm tao Greeter tao ra mt c th Message (Thng bo), n sau d su dung trong cuc goi phuong
thuc greet.

Lit k 2. M ngun vi chng thc vic np lp
pub11c c1ass Demo
{
pub11c sfaf1c vo1d ma1n{5f1ng|] ags} {
5ysfem.ouf.p1nf1n{"""beg1nn1ng execuf1on"""}
Geefe geefe = neW Geefe{}
5ysfem.ouf.p1nf1n{"""ceafed Geefe"""}
geefe.geef{}
}
}

pub11c c1ass Geefe
{
p1vafe sfaf1c Message smessage = neW Message{"he11o, Wo1d!"}

pub11c vo1d geef{} {
smessage.p1nf{5ysfem.ouf}
Page 3 of 7 Dng luc hoc lp trnh Java, Phn 1: Cc lop Java v vic nap cc lop

Thit lp tham s -verbose:class trn dng lnh java in ra du vt cua qu trnh nap lop. Lit k 3 cho thy mt
phn kt qua tu lc chay chuong trnh cua Lit k 2 voi tham s ny:

Lit k 3. Mt phn kt qua cua -verbose:class

Dy chi l mt phn danh sch cua cc phn quan trong nht -- du vt dy du gm 294 dng, m voi danh sch ny
ti d xa hu ht. Tp du tin cua vic nap lop (trong truong hop ny l 279) tt ca duoc kch hoat bng n luc d
nap lop Demo. Dy l cc lop ct li duoc tt ca cc chuong trnh Java su dung, khng k nho bao nhiu. Ngay ca vic
loai bo tt ca cc m khoi phuong thuc Demo main khng anh huong dn trnh tu nap ban du ny. Tuy vy, s luong
v tn cua cc lop duoc bao hm s khc giua mt phin ban cua thu vin lop ny voi mt phin ban cua thu vin lop
khc.
Phn lit k sau khi lop Demo duoc nap s th vi hon. Trnh tu o dy cho thy lop Greeter duoc nap s th vi hon.
Trnh tu o dy cho thy lop Greeter su dung mt c th tinh cua lop Message, nn truoc khi mt c th cua lop
truoc c th duoc tao ra, cc lop sau ny cung cn phai duoc nap.
C nhiu vic xay ra bn trong JVM khi mt lop duoc nap v duoc khoi tao, bao gm vic giai m dinh dang lop nhi
phn, kim tra tnh tuong thch voi cc lop khc, xc minh chui cc php ton bytecode v cui cng l xy dung mt
c th java.lang.Class d biu din lop moi. Di tuong Class ny tro thnh co so cho tt ca cc c th cua lop
moi duoc JVM tao ra. D cung l trnh dinh danh cho lop d tu nap -- ban c th c nhiu ban sao cua cng mt lop
nhi phn d nap trong mt JVM, mi ban sao c c th Class ring cua n. Mc d tt ca cc ban sao ny chia se cng
mt tn lop, nhung chng s l cc lop ring bit voi JVM.
Tt dung dn (lp) theo li mn (beaten)
Cc trnh nap lop (class loaders) diu khin lop dang nap vo mt JVM. C mt trnh nap lop tu mi (bootstrap) duoc
xy dung bn trong JVM, n c trch nhim nap cc lop thu vin cua lop Java co ban. Trnh nap lop dc bit ny c
mt s tnh nng dc bit. Voi mt diu l, n chi nap cc lop duoc tm thy trn duong dn lop khoi dng. Boi v d
l nhung lop h thng tin cy, trnh nap bootstrap bo qua phn lon vic xc nhn hop l duoc thuc hin cho cc lop
}
}

pub11c c1ass Message
{
p1vafe 5f1ng mfexf

pub11c Message{5f1ng fexf} {
mfexf = fexf
}

pub11c vo1d p1nf{ava.1o.P1nf5feam ps} {
ps.p1nf1n{mfexf}
}
}
|Opened /us/ava/2sdk1.4.1/e/11b/f.a]
|Opened /us/ava/2sdk1.4.1/e/11b/sunsas1gn.a]
|Opened /us/ava/2sdk1.4.1/e/11b/sse.a]
|Opened /us/ava/2sdk1.4.1/e/11b/ce.a]
|Opened /us/ava/2sdk1.4.1/e/11b/chasefs.a]
|Loaded ava.1ang.Obecf fom /us/ava/2sdk1.4.1/e/11b/f.a]
|Loaded ava.1o.5e1a11zab1e fom /us/ava/2sdk1.4.1/e/11b/f.a]
|Loaded ava.1ang.Compaab1e fom /us/ava/2sdk1.4.1/e/11b/f.a]
|Loaded ava.1ang.Cha5equence fom /us/ava/2sdk1.4.1/e/11b/f.a]
|Loaded ava.1ang.5f1ng fom /us/ava/2sdk1.4.1/e/11b/f.a]
...
|Loaded ava.secu1fy.P1nc1pa1 fom /us/ava/2sdk1.4.1/e/11b/f.a]
|Loaded ava.secu1fy.cef.Cef1f1cafe
fom /us/ava/2sdk1.4.1/e/11b/f.a]
|Loaded Demo]
""beg1nn1ng execuf1on""
|Loaded Geefe]
|Loaded Message]
""ceafed Geefe""
he11o, Wo1d!
|Loaded ava.uf11.hashMap$key5ef
fom /us/ava/2sdk1.4.1/e/11b/f.a]
|Loaded ava.uf11.hashMap$keylfeafo
fom /us/ava/2sdk1.4.1/e/11b/f.a]
Page 4 of 7 Dng luc hoc lp trnh Java, Phn 1: Cc lop Java v vic nap cc lop
bnh thuong (khng tin cy).
Bootstrap khng phai l trnh nap lop duy nht. Di voi nguoi moi bt du, mt JVM dinh nghia mt trnh nap lop mo
rng (extension) d nap cc lop tu cc API mo rng Java tiu chun v lop h thng (system) d nap cc lop tu duong
dn lop chung (gm ca cc lop ung dung cua ban). Cc ung dung cung c th dinh nghia cc trnh nap lop ring cua
chng cho cc muc dch dc bit (chng han nhu nap lai cc lop trong thoi gian chay). Cc trnh nap lop duoc thm
vo nhu vy c ngun gc tu lop java.lang.ClassLoader (c th gin tip), lop ny cung cp su h tro ct li d
xy dung mt su biu din lop trong mt c th java.lang.Class tu mt mang cc byte. Mi lop duoc xy dung
theo mt s nghia "c so huu" bng trnh nap lop d nap n. Cc trnh nap lop thuong giu ban d cc lop m chng
d nap, d c kha nng tm mt lop theo tn nu n duoc yu cu lai.
Mi trnh nap lop cung giu mt tham chiu dn mt trnh nap lop cha me, khi xc dinh mt cy cua cc trnh nap lop
voi trnh nap bootstrap tai gc. Khi cn mt c th cua mt lop dc bit (duoc xc dinh theo tn), bt cu trnh nap lop
no lc du xu l yu cu thuong kim tra trnh nap lop cha me cua n du tin truoc khi c gng nap lop truc tip.
Diu ny p dung theo cch d quy nu c nhiu tng cua cc trnh nap lop, sao cho n c nghia l mt lop thuong s
nhn thay khng chi trong trnh nap lop d nap n, m cn cho tt ca cc trnh nap lop con chu. N cung c nghia l
nu mt lop c th duoc nap boi nhiu hon mt trnh nap lop theo mt chui, mt lop xa nht ln dn cy d s l mt
lop nap n thuc su.
C rt nhiu truong hop o d cc trnh nap lop (classloaders) cua nhiu ung dung duoc cc chuong trnh Java su dung.
Mt v du l trong khung cng tc J2EE. Mi ung dung J2EE duoc nap boi khung cng tc cn phai c mt trnh nap
lop ring d ngn chn cc lop trong mt ung dung khoi can tro cc ung dung khc. M cua khung cng tc tu n s su
dung mt hoc nhiu trnh nap lop khc, cung d ngn chn su can tro dn hoc tu cc ung dung. Tp cc trnh nap lop
hon chinh tao nn mt h thng phn cp c cu trc cy voi cc kiu khc nhau cua cc lop o mi cp.
Cc cy ca cc trnh nap
Nhu v du cua mt h thng phn cp cua mt trnh nap lop trong lc hnh dng, Hnh 1 cho thy h thng phn cp
cua mt trnh nap lop duoc my servlet Tomcat xc dinh. O dy trnh nap lop Chung (Common) nap tu cc tp JAR
trong mt thu muc cu th cua qu trnh ci dt Tomcat dnh cho nhung m dng chung giua my chu v tt ca cc ung
dung Web. Trnh nap Catalina dnh cho cc lop ring cua Tomcat v trnh nap dng chung (Shared) cho cc lop duoc
chia se giua cc ung dung Web. Cui cng, mi ung dung Web nhn trnh nap ring cho cc lop ring cua n.

Hnh 1. Cc trnh np lp Tomcat

Trong kiu mi truong ny, vic theo di trnh nap thch hop d su dung cho yu cu mt lop moi c th ln xn. Do
diu ny, cc phuong thuc setContextClassLoader v getContextClassLoader d duoc thm vo lop
java.lang.Thread trong nn tang Java 2. Cc phuong thuc ny cho php khung cng tc thit lp trnh nap lop s
duoc su dung cho mi ung dung trong lc chay m tu ung dung d.
Tnh linh hoat v kha nng nap cc tp dc lp cua cc lop l mt tnh nng quan trong cua nn tang Java. Tuy nhin,
khi tnh nng ny c ch, n th tao ra su ln ln trong mt s truong hop. Mt kha canh ln ln l vn d tip tuc di
ph voi cc duong dn lop (classpaths) cua JVM. Trong phn cp Tomcat cua cc trnh nap lop d chi ra trong Hnh 1,
v du, cc lop duoc nap boi trnh nap lop Common s khng bao gio c kha nng truc tip truy cp (theo tn) cc lop
duoc ung dung Web nap. Cch duy nht d lin kt cc lop ny cng nhau l thng qua vic su dung cc giao din truc
quan cho ca hai tp cc lop. Trong truong hop ny, diu d bao gm javax.servlet.Servlet duoc servlet Java
trin khai thuc hin.
Cc vn d c th nay sinh khi m duoc di chuyn giua cc trnh nap lop v bt cu l do no. V du, khi J2SE 1.4 d di
chuyn JAXP API d xu l XML trong su phn phi chun, n d tao ra cc vn d cho nhiu mi truong, m o d cc
ung dung truoc d d dua vo vic nap cc vic thuc hin d chon theo cc XML API ring cua chng. Voi J2SE 1.3,
Page 5 of 7 Dng luc hoc lp trnh Java, Phn 1: Cc lop Java v vic nap cc lop
diu ny c th duoc thuc hin chi bng cch dt tp JAR thch hop trong duong dn lop cua nguoi su dung. Trong
J2SE 1.4, cc phin ban tiu chun cua cc API ny by gio dang o trong duong dn lop cua cc phn mo rng
(extensions), d cho nhung duong dn ny thuong s ghi d ln bt ky su hin din cua vic thuc hin trong duong dn
lop cua nguoi su dung.
Cc kiu ln ln khc cung c th xay ra khi su dung cc trnh nap nhiu lop. Hnh 2 cho thy mt v du v bin dong
nhan dang lop xay ra khi mi mt giao din v vic thuc hin c lin quan duoc nap boi hai trnh nap lop ring bit.
Mc d cc tn v vic trin khai thuc hin m nhi phn cua cc giao din v cc lop du ging nhau, mt c th cua
mt lop tu mt trnh nap c th khng duoc thua nhn khi trin khai thuc hin giao din tu trnh nap khc. Su ln ln
ny c th duoc giai quyt trong Hnh 2 bng cch di chuyn lop giao din I vo vng cua trnh nap lop System. Vn
l hai c th ring bit cua lop A, nhung ca hai s trin khai thuc hin cng giao din I.

Hnh 2. Bin dng nhn dng lp




Kt lun
Dinh nghia lop Java v dc ta JVM cng xc dinh mt khung cng tc v cng manh m d lp rp m trong thoi gian
chay. Thng qua vic su dung cc trnh nap lop, cc ung dung Java c kha nng lm vic voi nhiu phin ban cua cc
lop, nu khc di cc lop ny s gy ra cc xung dt. Tnh linh hoat cua cc trnh nap lop thm ch cho php nap dng
lai m d sua di trong khi mt ung dung tip tuc thuc hin.
Chi ph cho tnh linh hoat cua nn tang Java trong linh vuc ny l chi ph hoat dng cao hon mt cht khi bt du mt
ung dung. Hng trm cc lop ring bit cn phai duoc JVM nap truoc khi n c th bt du thuc hin ngay ca nhung
m ung dung don gian nht. Chi ph khoi dng ny thuong lm cho nn Java ph hop voi cc ung dung kiu my chu,
chay lu di tt hon d su dung thuong xuyn hon cho cc chuong trnh nho. Cc ung dung my chu cung duoc huong
loi nhiu nht tu su linh hoat lp rp m trong thoi gian chay, v vy khng c g ngac nhin rng nn tang Java d tro
nn ngy cng thun loi cho kiu pht trin ny.
Trong phn 2 cua loat bi ny, ti s trnh by mt gioi thiu v cch su dung mt kha canh khc cua cc nn mng
nng dng cua nn tang Java: API phan chiu (Reflection API). Su phan chiu gip cho vic thuc thi m cua ban truy
cp toi cc lop thng tin bn trong. Dy c th l mt cng cu quan trong d xy dung m linh hoat, c th duoc ni
voi nhau trong thoi gian chay m khng cn bt ky cc lin kt m ngun no giua cc lop. Tuy nhin, nhu voi hu ht
cc cng cu, ban cn phai bit su dung n khi no v nhu th no d c loi ch tt nht. Kim tra lai d tm hiu cc thu
thut v cc su thoa hip v su phan chiu hiu qua trong Phn 2 cua Cc dong luc hoc lap trnh Java.


Ti nguyn
Page 6 of 7 Dng luc hoc lp trnh Java, Phn 1: Cc lop Java v vic nap cc lop
Di thng dn m ngun trong c ta my ao Java (Java Virtual Machine Specification) voi cc chi tit v dinh
dang lop nhi phn, nap cc lop v m byte Java thuc t.

Tm hiu tt ca cc chi tit v vic xy dung cc trnh nap lop dc bit ring cua ban voi huong dn, "Hiu bit
v cc trnh nap lop Java"cua Greg Travis (developerWorks, 04.2001).

Nhn duoc cc chi tit v My ao nghin cuu Jikes (RVM- Jikes Virtual Machine), my ao ny duoc trin khai
thuc hin trong ngn ngu Java v duoc tu tao my chu (c nghia l, m Java cua n tu chay trn d m khng
di hoi mt my ao thu hai).

Theo kip voi qu trnh tao cc thuc tnh sn c cho cc nh pht trin Java voi Java Specification Request
(JSR) 175 voi Mt kha nng siu du liu cho ngn ngu lp trnh Java.

Tm hiu cc chi tit v du n my chu Web cua ngn ngu Java Apache Tomcat cua Qu Apache Software,
gm ca cc chi tit v cch su dung trnh nap lop Tomcat.

Tm thm hng trm ti nguyn cng ngh Java trn vng cng ngh Java cua developerWorks.


i nt v tc gi







Dennis Sosnoski l mt nh tu vn v nh tro gip do tao chuyn v cc dich vu Web v SOA dua trn-Java. Kinh
nghim pht trin phn mm chuyn nghip cua ng trai sut hon 30 nm qua, voi mt thp ki cui tp trung vo cc
cng ngh XML v Java pha my chu. Dennis l nh pht trin hng du v dung cu lin kt du liu XML JiBX m
ngun mo, cung l mt nguoi c duyn no voi khung cng tc cua cc dich vu Web Apache Axis2. ng cung l mt
trong nhung thnh vin cua nhm chuyn gia dc ta k thut cua Jax-WS 2.0 v JAXB 2.0. Xem trang web cua ng
d c thng tin v cc dich vu do tao v tu vn cua ng.
Page 7 of 7 Dng luc hoc lp trnh Java, Phn 1: Cc lop Java v vic nap cc lop

You might also like