ph
ng th c, thì Java s phát m t bi t l có tên
ươ
ứ
ẽ
ộ
ệ ệ
NullPointerException, in m t thông báo l i và k t thúc
ộ
ỗ
ế
ch
ng trình.
ươ
Point blank =
null
;
int
x = blank.x;
// NullPointerException
blank.translate(50, 50);
// NullPointerException
M t khác, s hoàn toàn h p l n u ta truy n m t đ i t
ng null làm đ i s ho c nh n m t null làm giá
ặ
ẽ
ợ ệ ế
ề
ộ ố ượ
ố ố
ặ
ậ
ộ
tr tr v . Th c ra, đi u này r t thông d ng, v i m c đích ch ng h n là bi u di n m t t p h p r ng hay
ị ả ề
ự
ề
ấ
ụ
ớ
ụ
ẳ
ạ
ể
ễ
ộ ậ
ợ ỗ
đ ch m t đi u ki n có l i.
ể ỉ ộ
ề
ệ
ỗ
9.10 Thu d n rác
ọ
M c
Ở ụ 9.8 ta đã nói v nh ng gì đã x y ra khi nhi u bi n cùng tham chi u t i m t đ i t ng. Th còn
ề
ữ
ả
ề
ế
ế ớ
ộ ố ượ
ế
đi u gì s x y ra khi
ề
ẽ ả
không có bi n nào tham chi u đ n đ i t
ng? Ch ng h n:
ế
ế
ế
ố ượ
ẳ
ạ
Point blank =
new
Point(3, 4);
blank =
null
;
Dòng th nh t t o ra m t đ i t
ng
ứ
ấ ạ
ộ ố ượ Point m i r i khi n cho
ớ ồ
ế
blank tham chi u đ n nó. Dòng th hai s a
ế
ế
ứ
ử
ch a
ữ blank đ cho, thay vì tham chi u đ n đ i t ng, nó không tham chi u đ n gì c (hay tham chi u
ể
ế
ế
ố ượ
ế
ế
ả
ế
đ n đ i t
ng null).
ế
ố ượ
N u không có ai tham chi u đ n đ i t
ng, thì cũng ch ng ai có th đ c hay ghi giá tr b t kì nào t nó,
ế
ế
ế
ố ượ
ả
ể ọ
ị ấ
ừ
hay kích ho t m t ph
ng th c lên nó. H qu là, nó s ng ng t n t i. Ta có th v n gi đ i t
ng này
ạ
ộ
ươ
ứ
ệ
ả
ẽ
ừ
ồ ạ
ể ẫ
ữ ố ượ
trong b nh , song làm nh v y ch t n dung l
ng; b i v y khi ch
ng trình ch y, theo đ nh kì h
ộ
ớ
ư ậ
ỉ ố
ượ
ở ậ
ươ
ạ
ị
ệ
th ng s tìm ki m các đ i t
ng lang thang r i thu h i l i nó, theo m t quá trình mang tên
ố
ẽ
ế
ố ượ
ồ
ồ ạ
ộ
thu d n
ọ
rác. Sau này, dung l
ng nh b chi m b i đ i t
ng s v tay ng
i dùng đ ph c v đ i t
ng m i.
ượ
ớ ị
ế
ở ố ượ
ẽ ề
ườ
ể
ụ ụ ố ượ
ớ
B n không c n ph i làm b t c đi u gì đ ti n hành thu d n rác, và nói chung b n s không nh n th c
ạ
ầ
ả
ấ ứ ề
ể ế
ọ
ạ ẽ
ậ
ứ
đ
c quá trình này. Song b n c n bi t r ng quá trình luôn đ
c ng m ch y m t cách đ nh kì.
ượ
ạ ầ
ế ằ
ượ
ầ
ạ
ộ
ị
9.11 Các đ i t
ng và ki u nguyên th y
ố ượ
ể
ủ
Trong Java có hai lo i ki u d li u, ki u nguyên th y và ki u đ i t
ng. Ki u nguyên th ,
ạ
ể
ữ ệ
ể
ủ
ể
ố ượ
ể
ủ
nh
ư int và boolean đ u b t đ u b ng ch vi t th ng; ki u đ i t ng b t đ u b ng ch vi t in. S phân
ề
ắ ầ
ằ
ữ ế
ườ
ể
ố ượ
ắ ầ
ằ
ữ ế
ự
bi t này r t có ích vì chúng nh c ta m t s đi m khác nhau gi a chúng:
ệ
ấ
ắ
ộ ố ể
ữ
•
Khi khai báo m t bi n nguyên th y, b n đ
c m t dung l
ng l u tr dành cho giá tr nguyên th y. Khi
ộ
ế
ủ
ạ
ượ
ộ
ượ
ư
ữ
ị
ủ
b n khai báo m t bi n đ i t
ng, b n nh n đ
c m t dung l
ng ch a tham chi u t i đ i t
ng. Đ
ạ
ộ
ế
ố ượ
ạ
ậ
ượ
ộ
ượ
ứ
ế ớ ố ượ
ể
giành đ
c dung l
ng cho b n thân đ i t
ng đó, b n ph i dùng đ n
ượ
ượ
ả
ố ượ
ạ
ả
ế new.
•
N u b n không kh i t o m t ki u nguyên th y, thì nó s đ
c đi n giá tr m c đ nh tùy theo ki u đó là
ế
ạ
ở ạ
ộ
ể
ủ
ẽ ượ
ề
ị ặ ị
ể
gì. Ch ng h n,
ẳ
ạ 0 v i tr ng h p
ớ ườ
ợ int và false v i
ớ boolean. Giá tr m c đ nh c a ki u đ i t ng là
ị ặ ị
ủ
ể
ố ượ
null,
nghĩa là không có đ i t
ng nào.
ố ượ
•
Các bi n nguyên th y tách bi t hoàn toàn, theo nghĩa b t c b n làm gì trong m t ph
ng th c này s
ế
ủ
ệ
ấ ứ ạ
ộ
ươ
ứ
ẽ
không nh h
ng đ n m t bi n ph
ng th c khác. Các bi n đ i t
ng thì l i c n ph i khéo léo khi
ả
ưở
ế
ộ
ế ở
ươ
ứ
ế
ố ượ
ạ ầ
ả
thao tác vì chúng không đ
c bi t l p nh v y. N u b n truy n m t tham chi u đ n đ i t
ng đ làm
ượ
ệ ậ
ư ậ
ế
ạ
ề
ộ
ế
ế
ố ượ
ể