Tôi nghĩ rằng nó là giá trị chỉ ra rằng bởi các quy tắc của ngôn ngữ Java trình biên dịch Java chèn tương đương với "này". khi nó thông báo rằng bạn đang truy cập các phương thức instance hoặc các instance fields mà không có một cá thể rõ ràng. Tất nhiên, trình biên dịch biết rằng nó chỉ có thể làm điều này từ bên trong một phương thức thể hiện, có một biến "this", như các phương thức tĩnh không.
Có nghĩa là khi bạn đang ở trong một phương pháp dụ sau đây là tương đương:
instanceMethod();
this.instanceMethod();
và đây cũng là tương đương: "này"
... = instanceField;
... = this.instanceField;
Trình biên dịch được một cách hiệu quả chèn khi bạn không cung cấp một trường hợp cụ thể.
Điều này có thể gây nhầm lẫn cho người mới: nó có nghĩa là các cuộc gọi và cuộc gọi tĩnh đôi khi có cùng cú pháp trong khi thực tế là các cuộc gọi của các kiểu khác nhau và cơ chế cơ bản.
Cuộc gọi phương thức thể hiện đôi khi được gọi là lời gọi phương thức hoặc công văn vì các hành vi của các phương thức ảo hỗ trợ đa hình; hành vi gửi đi xảy ra bất kể bạn đã viết một cá thể đối tượng rõ ràng để sử dụng hay trình biên dịch đã chèn một "this".
Cơ chế gọi phương thức tĩnh đơn giản hơn, giống như cuộc gọi hàm bằng ngôn ngữ không phải là OOP.
Cá nhân, tôi cho rằng thông báo lỗi là gây hiểu nhầm, có thể đọc "phương pháp không tĩnh không thể được tham chiếu từ ngữ cảnh tĩnh mà không chỉ định đối tượng rõ ràng".
Trình biên dịch phàn nàn là không thể đơn giản chèn tiêu chuẩn "này". như trong các phương thức instance, bởi vì đoạn mã này nằm trong một phương thức tĩnh; tuy nhiên, có lẽ tác giả chỉ quên cung cấp cá thể quan tâm cho lời gọi này — nói, một cá thể có thể được cung cấp cho phương thức tĩnh làm tham số hoặc được tạo trong phương thức tĩnh này.
Tóm lại, bạn chắc chắn nhất có thể gọi các phương thức ví dụ từ bên trong một phương thức tĩnh, bạn chỉ cần có và chỉ định một đối tượng cá thể rõ ràng cho lời gọi.
"Vì bạn chưa tạo một đối tượng, phương pháp không tĩnh chưa tồn tại." - Cảm ơn rất nhiều. Tôi nên nghĩ về nó. – DragonBorn
Phương thức tự tồn tại. Đâu đó trong định nghĩa lớp đã tải. Vì vậy, câu trả lời là sai :) –
@Vladimir, OK nếu bạn muốn được cầu kỳ. :) "không tồn tại trong ngữ cảnh hiện tại" :) –