2012-03-12 34 views
5

Tôi biết điều này là đơn giản nhưng tôi không thực sự hiểu câu hỏi ...Basic Java bài tập về nhà

Giả chữ ký của phương pháp xMethod là như sau. Giải thích hai cách khác nhau để gọi xMethod:

public static void xMethod(double[] a) 

Tôi nghĩ để gọi một phương pháp bạn chỉ cần làm:

xMethod(myarray); 

nó có thể có nghĩa là gì bằng cách hỏi hai cách khác nhau? Có lẽ tôi chỉ nhìn vào câu hỏi quá nhiều.

+1

'XClass.class.getMethod ("xMethod", a.getClass()) gọi (null, a);. '? Trên một lưu ý nghiêm trọng hơn: 'XClass.xMethod (a);' 'xObject.xMethod (a);' –

+0

Hãy thử và nghĩ về những nơi để gọi phương thức từ –

+0

Không chắc chắn nếu đó là câu hỏi, nhưng bởi vì nó là tĩnh, bạn có thể gọi nó trên một cá thể ('myClassInstance.xMethod()') hoặc trên chính lớp đó ('MyClass.xMethod()') ... – assylias

Trả lời

7

Nếu đây là cho một lớp thời gian java đầu tiên, tôi đoán là anh đang tìm kiếm những 2 trường hợp:

//the one you have, using a precreated array 
double[] myArray = {1.1, 2.2, 3.3} 
xMethod(myarray); 

//and putting it all together 
xMethod(new double[]{1.1, 2.2, 3.3}); 

Về cơ bản minh họa bạn có thể làm cho một mảng để vượt qua, hay đơn giản là tạo ra một trong các cuộc gọi.

Chỉ cần một đoán mặc dù

+0

Tôi đang suy nghĩ quá ... các câu trả lời khác có vẻ hơi phức tạp đối với những gì chúng tôi đã học được. Cảm ơn bạn –

+0

cú pháp là xMethod (new double [] {1.1, 2.2, 3.3}); – Hurda

+0

Cảm ơn vì điều đó, tôi không bao giờ có thể nhớ cú pháp chết tiệt cho các mảng đơn giản! –

3

Bạn có thể gọi nó bằng cách gọi nó trên một lớp học, hoặc thông qua một thể hiện của lớp đó.

Foo.xMethod(a); 

hay:

Foo foo = new Foo(); 
foo.xMethod(a); 

Cách tiếp cận thứ nhất được ưa thích, nhưng điều thứ hai sẽ biên dịch và chạy. Nhưng lưu ý rằng nó thường được coi là một lỗ hổng thiết kế trong ngôn ngữ mà phương pháp thứ hai được cho phép.

+1

không đúng khi gọi nó thông qua cá thể của lớp ngay cả khi nó không phá vỡ bất cứ điều gì. – Amareswar

+0

Tôi nghĩ nó giống nhau khi được biên dịch. Tôi phải kiểm tra lại rằng, mặc dù. @Amareswar Nó không phải là một lỗi cú pháp, nó chỉ là thực hành xấu. –

+0

@Amareswar: Ngạc nhiên là nó thực sự hợp lệ. Nó chỉ là một thực tế xấu để thực sự sử dụng nó. Nhưng đáng để biết về nó trong trường hợp bạn chạy vào mã của người khác sử dụng nó, để bạn không hoàn toàn bối rối bởi nó. –

0

Chỉ có một cách hợp lệ để làm điều này:

YourClass.xMethod(myDoubleArray); 

Tuy nhiên, bạn có thể viết không hoàn toàn-đúng Java:

YourClass instance = new YourClass(); 
instance.xMethod(myDoubleArray); 

này sẽ làm việc, nhưng được đánh giá là sai rồi. Trình biên dịch Java thậm chí sẽ phàn nàn về nó. Bởi vì không cần phải gọi một phương thức tĩnh bằng cách tạo một thể hiện của lớp. Tĩnh có nghĩa là phương thức này là độc lập. Gọi nó thông qua một cá thể là vô nghĩa và khó hiểu.

Sau đó, bạn sẽ thấy rằng có một cách chính xác thứ hai để làm điều đó, tức là "phản chiếu". Nhưng đó là một chủ đề nâng cao, vì vậy tôi cho rằng bạn không phải biết điều này.

+0

Tại sao điều này không chính xác? – Jlange

+1

Nó không thực sự sai, nhưng đó là một ý tưởng tồi bởi vì nó giới thiệu một phụ thuộc giả mạo - có vẻ như 'instance' là bắt buộc và có nghĩa là một cái gì đó, nhưng thực sự nó không phải là và không. Xem http://stackoverflow.com/questions/7884004/is-calling-static-methods-via-an-object-bad-form-why –

10

Đối với đá, cho thấy giáo sư của bạn này:

XClass.class.getMethod("xMethod", a.getClass()).invoke(null, a); 

Sau đó nói với họ hai câu trả lời là

XClass.xMethod(a); 
//and 
xObject.xMethod(a); //this is bad practice 
+1

Điều này tôi nghĩ là câu trả lời hợp lệ nhất của nhóm. –

+0

@HovercraftFullOfEels Cảm ơn: D –

2

phương pháp tĩnh không bị ràng buộc để việc xây dựng các lớp học. Các phương pháp trên có thể được gọi bằng cách xây dựng các lớp học hoặc chỉ bằng cách sử dụng không gian tên:

Classname myclass = new Classname(); 
myclass.xMethod(myarray); 

hoặc bạn chỉ có thể làm:

Classname.xMethod(myarray); 

như bạn thấy, bạn không cần phải xây dựng các lớp học để sử dụng phương pháp. Mặt khác, phương thức tĩnh không thể truy cập các thành viên không tĩnh của lớp. Tôi đoán đó là câu hỏi có ý nghĩa của 2 cách khác nhau ...

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