Professional Documents
Culture Documents
Java - Những Câu Hỏi Ít Được Trả Lời
Java - Những Câu Hỏi Ít Được Trả Lời
Trc ht ti xin gii thch v thut ng Java IAQ (Java Infrequently Answered
Question). Th no l mt cu hi t khi c tr li? Mt cu hi m t khi c tr
li (IAQ Infrequently Answered Question) th ch c mt trong hai l do: ch c mt
s t ngi bit cu tr li, hoc l cu hi v mt iu m h hoc t nh no
(nhng chnh iu ny li c tnh quyt nh). Ti ngh ti pht hin ra thut ng
ny, nhng xem ra n cng c trnh by trn website About.com. C rt nhiu
vn xung quanh Java FAQ (Frequently Answered Question nhng cu hi
thng c tr li) nhng y ta ch cp n Java IAQ (Infrequently Answered
Question). Ngoi ra ta cn c mt ngha khc ca FAQ : Frequently Asked Questions
nhng cu hi thng gp.
Sau y l mt s cu tr li m c l bn t khi gp phi, hy c th nhng cu hi
v ngm ngh xem cu tr li tng ng c lm bn hi lng khng.
1. on m trong mnh finally s lun c thc hin?
Thng th iu ny l chnh xc nhng khng phi lun lun nh vy. Sau y l
mt v d trong on m finally s khng c thc thi bt chp gi tr ca bin
choice:
CODE
try {
if (choice) {
while (true);
} else {
System.exit(1);
}
}
finally {
code.to.cleanup();
}
Object entry;
...
if (entry.equals(key)) ...
}
}
b. Bn khng hin thc ng phng thc equals, mt phng thc equals phi i
xng, bc cu, v t phn chiu. i xng ngha l a.equals(B) phi c cng gi tr
vi b.equals(a). Bc cu ngha l nu gi tr ca a.equals(B) ng v gi tr ca
b.equals ng th a.equals cng phi ng. T phn chiu ngha l a.equals(a)
chc chn phi ng, l l do v sao c (this == that) trong on chng trnh
trn.
c. Bn qun phng thc hashCode.
Ngay khi bn nh ngha mt phng thc equals, bn nn nh ngha thm mt
phng thc hashCode. Bn phi chc chn rng hai i tng bng nhau phi c
y, ti gi s c mt lp Util vi :
CODE
public static boolean equals(Object x, Object y) {
return (x == y) || (x != null && x.equals(y));
}
Bn cn phi cn thn khi giao tip vi lp cha. c bit, bn cn phi hiu r nhng
phng thc ca lp cha hot ng nh th no. Trong trng hp ny, mc ch ca
hm Hashtable.put l n s ghi li nh x gia bin key v value trong bng bm.
Tuy nhin nu bng bm qu y, hm Hashtable.put s cp pht mt mng ln hn
cho bng sao chp tt c nhng i tng c qua, v sau s gi quy li hm
table.put(key,value). Lc ny, do Java phn gii cc phng thc vo thi gian thc
thi ca i tng ch, vic gi quy bn trong on m ca Hashtable s dn
HashtableWidthPlurals.put(key,value), v kt qu l thnh thong bn s nhn c
thm mt cho dogss thay v ch c dogs.
5. Ti sao i tng Properties ca ti khng chp nhn nhng gi tr mc nh khi ti
gi hm get()?
Bn khng nn gi hm get trn i tng Properties, thay vo bn nn dng
getProperty. Nhiu ngi cho rng ch c mt s khc bit duy nht l getProperty c
kiu tr v l String, trong khi get c kiu tr v l Object. Nhng thc ra n cn c
mt s khc bit ln hn l getProperty xem xt n nhng gi tr mc nh trong
khi get th c tha k t Hashtable, v n khng xem xt nhng gi tr mc nh.
Do , n s thc thi mt cch chnh xc nhng iu c a ra trong lp
Hashtable, nhng thng khng phi l nhng g bn mong i. Nhng phng thc
khc c tha k t Hashtable (nh l Empty v toString) cng hnh x tng t.
Chng hn nh on m sau:
CODE
Properties defaults = new Properties();
defaults.put("color", "black");
Properties props = new Properties(defaults);
System.out.println(props.get("color") + ", " + props.getProperty(color));
// kt qu in ra l "null, black"
t ca bng.
6. Ti sao trong Java khng c bin ton cc?
Bin ton cc trong Java khng c s dng ch yu v nhng l do sau:
Vic thm vo mt bin ton cc c th ph v tnh r rng ca on m (bn khng
cn hiu c mt pht biu hay biu thc nu nh khng xt n ng cnh ca ton
b chng trnh).
Bin ton cc lm gim tnh lin kt ca mt chng trnh: bn cn phi tm hiu li
xem mt s ni trong chng trnh hot ng nh th no. Vn ch yu ca lp
trnh hng i tng l chuyn t trng thi ton cc vo mt tp nhng trng thi
cc b d hiu hn.
Khi thm vo mt bin, bn gii hn phm vi s dng ca chng trnh trong mt
trng hp m thi. Nhng g bn ngh l ton cc th ngi khc c th cho l cc
b: c th h mun thc thi hai bn sao ca chng trnh cng mt lc.
7. Null c phi mt i tng khng?
Chc chn l khng. ca ti l cu lnh (null instanceof Object) s tr v false.
Ngoi ra bn nn bit thm mt s iu v null:
a. Bn khng th gi mt phng thc trn null: gi x.m() l sai khi x l null v m l
mt phng thc khng static (tnh).
b. Ch c mt gi tr null, ch khng phi mi lp u c mt gi tr null. Do c
th xem String null cng chnh l Hashtable null.
c. Ta c th truyn tr null nh l mt i s cho mt phng thc vi iu kin
phng thc cn ti n. Mt s phng thc chp nhn iu ny, mt s khc th
khng. V d nh System.out.println (null) th chp nhn cn string.compareTo(null)
th li khng. i vi nhng phng thc m bn vit, Java s bo cho bn bit ni
no null c chp nhn, tr khi l iu hin nhin.
d. Cc b JDK phin bn t 1.1 cho ti 1.1.5 coi null nh i s xc nh cu trc
ca mt lp ni v danh. V d new SomeClass (null) {} l nguyn nhn dn n
vic bin dch sai. Vic truyn mt biu thc c gi tr null hoc mt gi tr null bt
buc l hon ton hp l, chng hn new SomeClass((String) null) {}.
System.out.println(data);
print(right);
}
}
// null khng c dng
interface Node { void print(); }
class DataNode implements Node{
Object data;
Node left, right;
void print() {
left.print();
System.out.println(data);
right.print();
}
}
class EmptyNode implements Node {
void print() { }
}
Phng php ny th khng r rng lm, v garbage collection (qu trnh dn rc) c
th xy ra phn gia ca on m m bn ang thc thi lm gin on qu trnh
m. Ngoi ra nu bn ang s dng trnh bin dch just-in-time, mt s byte c th