THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 87

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

ượ

ệ ậ

ư ậ

ế

ế

ế

ố ượ