2012-05-04 69 views

Trả lời

7

Tôi không nghĩ đây là một câu hỏi dễ trả lời bởi vì nó có ý nghĩa hơi khác một chút dựa trên ngôn ngữ. Nếu tôi đặt nó theo các thuật ngữ chung nhất có thể sẽ thay đổi một cách dữ dội từ người này sang người khác:

Biến tĩnh là biến được chia sẻ trên tất cả các phiên bản của một lớp.

Phương thức tĩnh là phương thức có thể được gọi trên lớp và thường không yêu cầu lớp được khởi tạo.

Một lần nữa nếu tôi chọn ba ngôn ngữ khác nhau, tôi sẽ đưa ra ba câu trả lời khác nhau.

Wikipedia cũng có thể giúp một chút để xác định những điều này.

http://en.wikipedia.org/wiki/Method_(computer_programming) http://en.wikipedia.org/wiki/Static_variable

+0

Tôi đang nói về Java nói riêng. – WAMoz56

15

Trong Java, static biểu class methods và lớp biến (như trái ngược với phương pháp dụ và các biến chẳng hạn). Các phương thức và biến này có thể được truy cập mà không có một cá thể hiện tại.

Tương phản điều này với các phương pháp thể hiện và các biến mẫu: chúng phải được truy cập thông qua một đối tượng. Ví dụ: length() hoạt động trên một đối tượng:

String a = "hello"; 
int len = a.length(); 

Ngược lại, valueOf không thể hoạt động trên đối tượng; hơn nữa, nó tạo ra một đối tượng mới khi được gọi là:

String x = String.valueOf(123.45); 

Lưu ý cách phương pháp dụ được gọi là sử dụng <objectName> tiếp theo là một dấu chấm ., trong khi các phương pháp tĩnh được truy cập sử dụng <className> tiếp theo là một dấu chấm ..

6

Từ khóa 'tĩnh' có thể gây nhầm lẫn bởi vì trong C, nơi từ khóa bắt nguồn, từ khóa có nhiều ý nghĩa. Khi được sử dụng để khai báo một biến trong một hàm, nó có nghĩa là biến có một tuổi thọ bên ngoài hàm. Đó là bản chất toàn cầu riêng tư đối với hàm. Nếu một biến toàn cục là tĩnh, về cơ bản nó là riêng tư đối với tệp nguồn đó. Trong cả hai trường hợp, biến có một vị trí bộ nhớ duy nhất giống như toàn cục. Nó chỉ là trình biên dịch ngăn cản bạn truy cập nó bên ngoài chức năng hoặc đơn vị biên dịch.

Tôi đoán rằng từ 'tĩnh' được sử dụng vì vị trí của biến tĩnh không bao giờ thay đổi, trái ngược với biến cục bộ bình thường, sẽ có vị trí bộ nhớ ở đâu đó trên ngăn xếp chức năng được gọi.

Khi C++ được tạo, từ khóa này đã được định hướng lại để chỉ các thuộc tính và phương thức cấp lớp. Tôi cho rằng suy nghĩ là một phương pháp hay thuộc tính tĩnh là một kiểu toàn cầu riêng tư cho lớp. Nếu bạn nghĩ về cách chúng được đặt ra trong bộ nhớ, nó làm cho một loại ý nghĩa nhất định như là một thuộc tính tĩnh sẽ có một địa chỉ giống như một biến toàn cầu. Sự khác biệt duy nhất là trình biên dịch không cho phép bạn sử dụng nó bên ngoài lớp.

Vì Java (và các ngôn ngữ khác) có cú pháp lấy cảm hứng từ C++, sử dụng 'tĩnh' để tham chiếu đến các phương thức và thuộc tính lớp được sử dụng ở đó. Thật không may, bởi vì việc sử dụng từ khóa này có ít liên quan đến ý nghĩa tiếng Anh.

Nhưng nói chung, đó là cách để xem nó. Trong hầu hết các ngôn ngữ, nếu nó là 'tĩnh', chỉ có một trong số chúng trong toàn bộ chương trình. Hãy nghĩ về nó như một thứ gì đó với một địa chỉ bộ nhớ cố định.

1

Biến tĩnh là biến được sử dụng bởi tất cả cá thể của một lớp trong đó như trong các biến thông thường biến được khởi tạo lại. Phương pháp tĩnh có thể có ý nghĩa gọi chúng mà không cần tạo đối tượng.

1

Tôi sẽ hiển thị các ví dụ để hiểu rõ các phương pháp tĩnh.

Khi nhập dữ liệu từ bàn phím java sử dụng Lớp máy quét

ex; Scanner scn = new Scanner (System.in); int a = scn.nextInt();

Vì vậy, nó có nghĩa là phương thức nextInt() không tĩnh.

Phương pháp tĩnh là phương pháp mà nó có thể được sử dụng mà không cần instantiating một lớp học.

Nhìn vào ví dụ sau:

public class Calculate { 

    static void calculatePower(int num, int pow) { 
     System.out.println(Math.pow(num, pow)); 
    } 


} 

Sử dụng phương pháp tĩnh.

public static void main(String[] args) { 
    Calculate.calculatePower(2,8); 
} 

Vì vậy, chúng tôi đã không khởi tạo lớp Tính toán và sử dụng phương pháp calculatePower đó là tĩnh

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