Lỗi biến không tĩnh không thể được tham chiếu từ ngữ cảnh tĩnh trong Java hầu hết người mới bắt đầu gặp phải tại thời điểm biên dịch chương trình Java. Lý do xảy ra lỗi này là do họ sử dụng biến thành viên không tĩnh trong phương thức main[]. Vì phương thức main[] trong Java là một phương thức tĩnh và nó được gọi tự động nên chúng ta không cần tạo đối tượng để gọi nó. Để hiểu lỗi, trước tiên chúng ta nên hiểu phương thức tĩnh và không tĩnh trong Java
Phương thức tĩnh
Trong Java, các phương thức công khai thuộc về một thể hiện của lớp nhưng nếu chúng ta nói về phương thức tĩnh, thì chúng thuộc về một lớp chứ không phải một thể hiện của một lớp. Không cần tạo một thể hiện của lớp để gọi một phương thức tĩnh. Thành viên tĩnh chỉ có thể truy cập thành viên dữ liệu tĩnh và có thể thay đổi giá trị của nó
Phương pháp không tĩnh
Tất cả các phương thức không có từ khóa tĩnh trước tên phương thức được gọi là Phương thức không tĩnh. Không cần tạo một thể hiện của lớp để truy cập phương thức tĩnh và biến tĩnh. Các phương thức không tĩnh được sử dụng liên kết động hoặc thời gian chạy. Không giống như phương thức tĩnh, chúng ta có thể ghi đè phương thức không tĩnh
Hãy tạo một chương trình Java và tạo ra lỗi tương tự
Trong ví dụ sau, chúng ta đã khai báo một biến private number kiểu int trước phương thức main[]. Trong phương thức main[], chúng ta đang cố tăng số lên 1. Cần lưu ý rằng phương thức main[] là một phương thức tĩnh và biến không phải là tĩnh. Khi chúng tôi biên dịch chương trình trên, chúng tôi gặp lỗi tương tự như chúng tôi đã hiển thị bên dưới
Ví dụ tĩnh1. java
đầu ra
Bây giờ, hãy khai báo biến số là tĩnh và biên dịch mã. Lưu ý rằng, cả biến và phương thức main[] đều là tĩnh
Ví dụ tĩnh2. java
đầu ra
Chương trình biên dịch và chạy thành công
Mỗi thể hiện của một biến không tĩnh có một giá trị khác nhau và được tạo khi toán tử new[] khởi tạo một thể hiện của một đối tượng. Các biến tĩnh được tạo hoặc khởi tạo khi lớp tải vào JVM
Chúng ta cần một thể hiện của một đối tượng để gọi biến không tĩnh. Chúng ta có thể tạo nhiều đối tượng bằng cách đưa ra các giá trị khác nhau cho biến thể hiện hoặc không tĩnh đó
Ví dụ tĩnh3. java
đầu ra
Trong chương trình trên, ba đối tượng var1, var2, var3 được tạo cho biến lớp và gán ba giá trị khác nhau 12, 13, 14 cho các đối tượng var1, var2 và var3 tương ứng. Bây giờ, thuộc tính số của mỗi đối tượng có giá trị số nguyên riêng. Khi chúng ta cố gắng tăng giá trị của thuộc tính số bằng cách gọi phương thức increment[], trình biên dịch không hiểu giá trị của số mà phương thức sẽ tăng giá trị. Trình biên dịch phải đối mặt với lỗi mơ hồ và đưa ra lỗi thời gian biên dịch biến không tĩnh không thể được tham chiếu từ ngữ cảnh tĩnh
Giải pháp cho Lỗi
Có một cách đơn giản để giải quyết biến không tĩnh không thể được tham chiếu từ lỗi bối cảnh tĩnh. Trong đoạn mã trên, chúng ta phải xử lý biến không tĩnh bằng tên đối tượng. Nói một cách đơn giản, chúng ta phải tạo một đối tượng của lớp để tham chiếu đến một biến không tĩnh từ ngữ cảnh tĩnh. Một bản sao mới của tất cả các biến không tĩnh được tạo khi một phiên bản biến mới được tạo. Vì vậy, chúng ta có thể truy cập các biến này bằng cách sử dụng tham chiếu của thể hiện mới của lớp. ví dụ, hãy xem xét chương trình Java sau
Ví dụ tĩnh4. java
đầu ra
Sự miêu tả
Trong chương trình trên, chúng ta truy cập thuộc tính số bằng cách sử dụng tên lớp staticExample. Chúng tôi tạo một đối tượng của bài kiểm tra tên lớp StaticExample và tăng giá trị của số bằng cách sử dụng đối tượng kiểm tra
Ở đây, chúng tôi khai báo một phương thức tĩnh. hoan nghênh[]. Sau đó, chúng ta gọi phương thức tĩnh bằng cách sử dụng tên lớp, dấu hai chấm [. ] và tên phương thức [không tạo phiên bản của lớp trước]
PHP - Tìm hiểu thêm về các phương thức tĩnh
Một lớp có thể có cả phương thức tĩnh và không tĩnh. Một phương thức tĩnh có thể được truy cập từ một phương thức trong cùng một lớp bằng cách sử dụng từ khóa self
và dấu hai chấm [. ]
Thí dụ
lời chào lớp học {
chức năng tĩnh công khai chào mừng[] {
echo "Xin chào thế giới. ";
}
public function __construct[] {
self. hoan nghênh[];
}
}
lời chào mới[];
?>
Các phương thức tĩnh cũng có thể được gọi từ các phương thức trong các lớp khác. Để làm điều này, phương thức tĩnh phải là public
Thí dụ
lời chào lớp học {
chức năng tĩnh công khai chào mừng[] {
echo "Xin chào thế giới. ";
}
}
class SomeOtherClass {
public function message[] {
chào. chào mừng[];
}
}
?>
Để gọi một phương thức tĩnh từ một lớp con, hãy sử dụng từ khóa parent
bên trong lớp con. Ở đây, phương thức tĩnh có thể là public
hoặc protected