30/09/2018, 19:20

Hỏi static trong java

Mình có đọc 1 đoạn code trên mạng và thấy người ta viết:

private final int BOX_WIDTH=6;    //cái này với cái trên khác nhau chỗ nào?```

Mình không hiểu tại sao dùng ```static``` ở đây, vì đã là ```private``` thì class khác đâu thể truy cập biến ```BOX_WIDTH``` thông qua tên class được, và có ```final``` thì đâu thể thay đổi giá trị ```BOX_WIDTH``` được.

Mong mọi người giúp đỡ!
Nguyễn Hữu Quyền viết 21:20 ngày 30/09/2018

static tức là biến tĩnh , hiểu nôn na là khi ứng dụng bạn chạy biến ấy là duy nhất , và ví dụ khi đối tượng A nào đó thay đổi giá trị từ 3 sang 4 chẳng hạn , thì khi đối tượng B nào đó sử dụng biến ấy sẽ nhận giá trị 4. và nếu không có từ khóa static thì nó sẽ là biến thường và sẽ tồn tại nhiều biến trong chương trình nếu có nhiều đối tượng.

Nếu bạn khai báo final tức là hằng không thể đổi được . Thông thường static final hay dùng cho các hằng số để có thể lấy dễ dàng và tiết kiệm bộ nhớ. ví dụ Constant.PI chẳng hạn thì sẽ sử dụng và quản lý dễ dàng.

Thường thì hay khai báo các hằng số này trong một Interface tên là Constant là hợp lý nhất.

ở trên bạn dùng private vậy chỉ có thể lấy từ trong class dùng nó thôi , đó là một biện pháp chống hard-code rất tốt.

Interns viết 21:34 ngày 30/09/2018

vậy sự khác nhau của 2 cách dước đây:
private static final int BOX_WIDTH=6;
private final int BOX_WIDTH=6;

Thông thường static final hay dùng cho các hằng số để có thể lấy dễ dàng và tiết kiệm bộ nhớ

Đúng không anh

Nguyễn Hữu Quyền viết 21:23 ngày 30/09/2018

đúng rồi đó em , làm như vậy là tốt nhất ^^~ , em đọc hai ví dụ dưới đây là hiểu sâu liền.

1 ) dùng static final , ví dụ số PI chẳng hạn , nó đâu thay đổi mà nếu cứ tạo ra một đối tượng lại tạo ra nó thì quá phí phạm đúng không.

  1. dùng static , ví dụ như em làm trò chơi đánh yêu quái chẳng hạn , em đánh yêu quái đó hết nửa bình máu rồi , xong đó đến anh thì anh chỉ cần đánh nửa bình nửa thôi , thông số máu của con yêu quái đó sẽ được truyền qua cho anh dùng , Anh với em trong ví dụ này là hai đối tượng khác nhau đó . Nôm na vậy cho dễ hiểu , còn thực tế thì Static thường ứng dụng trong kỹ thuật Logging , Cache bộ đệm , v.v

^^~~

Interns viết 21:21 ngày 30/09/2018

Đọc cái 1 ) của anh là em hiểu rồi còn cái 2 ) có phần hơi khó hiểu chắc do ít chơi game
Cảm ơn anh vì đã giúp em hiểu thêm 1 vấn đề đơn giản mà đó giờ cứ mặc định là như thế mà không biết tại sao phải là như thế!

Bài liên quan
0