2011-01-12 27 views
8
String name = "Marcus"; 
static String s_name = "Peter"; 

public static void main(String[] args) {  
    System.out.println(name);//ERROR 
    System.out.println(s_name);//OK 
} 

LỖI: Không thể làm cho một tham chiếu tĩnh để tên trường không tĩnhTại sao có một vấn đề với một biến không tĩnh được đọc từ chính?

+0

Cùng một vấn đề như với phương pháp không tĩnh. Xem http://stackoverflow.com/questions/ 2042813/call-non-static-method-in-static-method-in-java – dkarp

Trả lời

6

Lý do điều này gây ra một vấn đề là main là một phương pháp tĩnh, có nghĩa là nó không có đối tượng nhận. Nói cách khác, nó không hoạt động liên quan đến một số đối tượng. Do đó, nếu bạn thử tìm kiếm một trường không tĩnh, thì Java sẽ bị nhầm lẫn về đối tượng mà trường đó sinh sống. Thông thường, nó sẽ giả định trường nằm trong đối tượng mà từ đó phương thức được gọi, nhưng vì main là tĩnh đối tượng không tồn tại.

Như một quy tắc chung, bạn không thể truy cập các biến mẫu thông thường từ các phương thức tĩnh.

+0

Về mặt kỹ thuật, đối tượng mà bạn đang hoạt động là chính lớp đó. Tôi cũng sẽ không nói đó là quy tắc chung ... Tôi ' d nói rằng đó là một quy tắc –

+0

Tôi cũng sẽ không nói Java 'bị lẫn lộn'. Không có gì để nó bị nhầm lẫn về. Không có đối tượng ví dụ.Thời gian.Vì vậy, không có cách nào để truy cập vào một trường thể hiện – EJP

2

Để truy cập các biến và hàm thành viên không phải tĩnh, bạn phải có một đối tượng cụ thể. (Ví dụ: nếu tất cả những gì bên trong class Bob { ... }, bạn sẽ cần phải làm điều gì đó như

Bob bob = new Bob(); 
System.out.println(bob.name); 

bên trong chính bạn.

+0

(Cảm ơn bạn đã chỉnh sửa. Có vẻ như tôi đã viết thư g quá nhiều Ruby gần đây.) – Matt

Các vấn đề liên quan