2013-06-08 45 views
5

Ví dụ, tôi đang cố gắng để làm một cái gì đó như thế nàyLàm cách nào để gọi phương thức không tĩnh từ phương thức chính?

public class Test { 

    public static void main(String args[]) { 

     int[] arr = new int[5]; 

     arrPrint(arr); 
    } 

    public void arrPrint(int[] arr) { 

     for (int i = 0; i < arr.length; i++) 
      System.out.println(arr[i]); 

    } 
} 

tôi nhận được một lỗi nói với tôi rằng tôi không thể tham khảo các biến không tĩnh từ enviorments tĩnh. Vì vậy, nếu đó là sự thật làm thế nào tôi sẽ bao giờ sử dụng một phương pháp không tĩnh bên trong của một chính?

+0

xem câu trả lời của tôi và hỏi xem có qs –

Trả lời

13

Bạn không thể. Một phương thức không tĩnh là một phương thức phải được gọi trên một cá thể của lớp Test của bạn; tạo một thể hiện của thử nghiệm để chơi với trong phương pháp chính của bạn:

public class Test { 

    public static void main(String args[]) { 
     int[] arr = new int[5]; 
     arr = new int[] { 1, 2, 3, 4, 5 }; 

     Test test = new Test(); 
     test.arrPrint(arr); 

    } 

    public void arrPrint(int[] arr) { 
     for (int i = 0; i < arr.length; i++) 
      System.out.println(arr[i]); 

    } 
} 
+0

Điều này làm việc nhưng tôi không chắc chắn lý do tại sao, do đó, bằng cách sử dụng mới tạo ra một biến thể hiện được tham chiếu từ một enviornment không tĩnh? –

+0

Phương thức arrPrint được định nghĩa là public void arrPrint (int []) do đó nó là "không tĩnh" nghĩa là nó không thể được gọi trừ khi nó được gọi trên một thể hiện của Test. Nếu bạn khai báo phương thức của bạn: public static void arrPrint (int []) thì bạn có thể gọi: Test.arrPrint (arr); bên trong chính mà không tạo ra một thể hiện cho nó. – fr1550n

1

Tóm lại, bạn không thể. Vì chính là một trường hợp đặc biệt (tức là điểm vào trong đó chỉ có một) bạn không thể có bất cứ điều gì khác ngoài các phương thức tĩnh, các biến trong chính.

+1

Vậy làm cách nào để kiểm tra mã của tôi? Tôi muốn thử và in ra một số mã, tôi có loại bỏ chính không? Khi tôi làm điều đó nói với tôi rằng tôi cần một chính. –

2

Bạn có thể gọi phương thức không tĩnh chỉ bằng cách sử dụng phiên bản lớp, vì vậy bạn phải tạo phương thức này bằng cách sử dụng từ khóa mới.

public class Something { 

    public static void main(String args[]) { 
     Something something = new Something(); 
     something.method1(); 

     new Something().method2(); 
    } 

    public void method1() { 
    } 

    public void method2() { 
    } 
} 
+0

Không trả lời câu hỏi –

+4

Ồ, hãy tin tôi, nó – kaktooss

+0

Tôi đã sử dụng mới trong ví dụ của tôi bây giờ mà tôi đã chỉnh sửa. –

0

Phương pháp không tĩnh cần được gọi trên phiên bản lớp. Để tạo Ví dụ sử dụng new từ khóa như

Test instance = new Test(); 

bây giờ bạn sẽ có thể gọi các phương pháp trên dụ như

instance.arrPrint(arr); 
+0

không trả lời câu hỏi –

+0

@PaulSullivan OP hỏi 'làm thế nào tôi có thể sử dụng một phương pháp không tĩnh bên trong của một chính? '.Ví dụ của tôi không trả lời câu hỏi đó như thế nào? – Pshemo

+0

đọc toàn bộ câu hỏi –

0

Something mới(). Method1() hoặc điều gì đó mới(). Method2()

1

Theo ví dụ mới của bạn là giải pháp sẽ là:

public class Test { 

    public static void main(String args[]) { 
     int[] arr = new int[5]; 
     new Test().arrPrint(arr); 
    } 

    public void arrPrint(int[] arr) { 
     for (int i = 0; i < arr.length; i++) 
      System.out.println(arr[i]); 

    } 
} 

Hoặc bạn có thể di chuyển

int[] arr = new int[5]; 

đến phần tĩnh như

public class Test { 

    static int[] arr; 

    public static void main(String args[]) { 
     arr = new int[5]; 
     new Test().arrPrint(arr); 
    } 

    public void arrPrint(int[] arr) { 
     for (int i = 0; i < arr.length; i++) 
      System.out.println(arr[i]); 
    } 
} 

Nhưng điều thứ hai mùi thực sự xấu từ thời điểm thực hành lập trình tốt

+1

Bạn không phải đăng câu trả lời. Bạn có thể [sửa [] (http://stackoverflow.com/posts/17004049/edit)] cũ và thông báo cho OP về cập nhật. – Pshemo

1

non-static -> tài sản của object

static method -> tài sản của lớp nó ngã.

Vì vậy, khi không có từ khóa static trong khai báo phương thức/biến mà bạn KHÔNG THỂ gọi/tham chiếu đến phương thức/biến đó mà không có bất kỳ cá thể nào của lớp từ ngữ cảnh tĩnh.

Khi mọi người khác đề xuất tạo một phiên bản mới (new Test()) của lớp chính trong phương thức chính và gọi phương thức non-staticarrPrint.

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