Static trong Java

cho em hỏi trong Java tại sao em không thể dùng this hay super trong phương thức static được ạ

Phương thức static không gắn với đối tượng, nên cũng chẳng có this đâu.

1 Like

Có nghĩa là this dùng để chỉ thuộc tính của đối tượng mà static là chỉ thuộc tính với phương thức chung của class nên phương thức static chỉ trả về thuộc tính chung của class thôi đúng không anh

Em hiểu rồi cảm ơn anh

2 Likes

Từ khóa this là để chỉ đối tượng hiện tại của class đó, trong method hoặc constructor. Nó không được dùng để chỉ thuộc tính của đối tượng như cậu nói đâu.
Nhưng nó được dùng để lấy giá trị thuộc tính của đối tượng hiện tại.

Ừ cậu, nhưng mà không chỉ thuộc tính với phương thức chung đâu cậu :smile:
Static là keyword để đánh dấu một thuộc tính/phương thức/một block/hay một nested class được đặt ở vùng nhớ tĩnh (static). Vì vùng nhớ này là vùng nhớ chung, nên tất cả các object của class sẽ access được vào thuộc tính/phương thức/một block/hay một nested class static đó.
Thuộc tính/phương thức/một block/nested class static này sẽ được gọi chung là thành viên tĩnh (static member).

See also:


6 Likes

You cannot use this or super in static.
Refer below resource to know why?

cho em hoỉ thêm là khi sử dụng static trong class, thì nó sẽ khởi tạo thông qua như nào vậy a nhỉ.Có phải mình gọi constructor() thì biến static nớ sẽ được khởi tạo không a.?

Việc khởi tạo biến static hoàn toàn không liên quan gì đến constructor.Biến static được khởi tạo tại thời điểm rum time, nó được cấp phát ô nhớ trước khi hàm main được gọi.

1 Like

giống kiểu khi khởi tạo class là mặt định mấy cái liên quan đến static sẽ khởi tạo hả bác.Em còn chưa rõ về cấp phát bộ nhớ trong opp.Nên mong bác giải thích thêm em xíu.

Trong Java thì khi class được load thì static member của nó mới được khởi tạo (một lần). Và không có liên quan gì đến hàm main() cả.

3 Likes

thanks bacs da chia se.

Uhm, không biết cậu đã nghe tới ClassLoader bao giờ chưa? :smile:


@tonghoangvu đã giải thích ngắn gọn về class loader, và tớ chỉ nói rõ hơn chút thôi.
Về cơ bản, tại mỗi thời điểm thích hợp mà JVM yêu cầu một class nào đó, class loader sẽ load bytecode của class đó lên.
Tại thời điểm load một class lên, các thành phần static của class đó cũng sẽ được khởi tạo luôn.
Vậy nên, việc này xảy ra trước khi cậu có bất cứ constructor nào được gọi để tạo object cho class đó :smile:

Hope it helps!

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?