2013-06-08 8 views
5

Per esempio, io sto cercando di fare qualcosa di simileCome si chiama un metodo non statico da un metodo principale?

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]); 

    } 
} 

ottengo un errore che mi dice che non posso fare riferimento a variabili non statici da enviorments statici. Quindi, se è vero, come potrei mai utilizzare un metodo non statico all'interno di un main?

+0

vedere la mia risposta e chiedere se qs –

risposta

13

Non è possibile. Un metodo non statico è uno che deve essere chiamato su un'istanza della classe Test; creare un'istanza di prova con cui giocare nel metodo principale:

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

Questo funziona ma non sono sicuro del perché, quindi l'utilizzo del nuovo crea una variabile di istanza a cui fare riferimento da un ambiente non statico? –

+0

Il metodo arrPrint è definito come vuoto pubblico arrPrint (int []), quindi è "non statico", il che significa che non può essere chiamato a meno che non venga chiamato su un'istanza di Test. Se hai dichiarato il tuo metodo: public static void arrPrint (int []), puoi chiamare: Test.arrPrint (arr); all'interno principale senza aver creato un'istanza per esso. – fr1550n

1

In breve, non è possibile. Poiché main è un caso speciale (vale a dire il punto di ingresso di cui ce n'è uno solo) non è possibile avere nient'altro che metodi statici, variabili in main.

+1

Quindi come faccio a testare il mio codice allora? Voglio provare e stampare un po 'di codice, mi libero di main? Quando lo faccio mi dice che ho bisogno di un main. –

2

È possibile chiamare il metodo non statico solo utilizzando un'istanza di classe, quindi è necessario crearlo utilizzando la parola chiave nuova.

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

Non rispondere alla domanda –

+4

Oh, credetemi, lo fa – kaktooss

+0

Ho usato nuovo nel mio esempio ora che ho modificato. –

0

I metodi non statici devono essere richiamati su istanza di classe. Per creare un'istanza utilizzare new parole chiave come

Test instance = new Test(); 

ora si sarà in grado di richiamare i metodi di istanza come

instance.arrPrint(arr); 
+0

non risponde alla domanda –

+0

@PaulSullivan OP ha chiesto 'come utilizzerei mai un metodo non statico all'interno di un main?'.In che modo il mio esempio non risponde a questa domanda? – Pshemo

+0

leggi l'intera domanda –

0

nuova Qualcosa(). Method1() o nuova Something(). Method2()

1

secondo il vostro nuovo esempio la soluzione sarà:

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]); 

    } 
} 

oppure è possibile spostare

int[] arr = new int[5]; 

alla sezione statico come

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]); 
    } 
} 

Ma la seconda puzza tremendamente dal punto di buone pratiche di programmazione

+1

Non è necessario inviare una risposta. È possibile [[modificare] (http://stackoverflow.com/posts/17004049/edit)] quello vecchio e informare OP sull'aggiornamento. – Pshemo

1

non-static -> proprietà della object

static method -> proprietà della classe da-sé.

Quindi, quando non esiste una parola chiave static in una dichiarazione di metodo/variabile, NON è possibile richiamare/fare riferimento a tale metodo/variabile senza alcuna istanza della classe da un contesto statico.

Come tutti gli altri hanno suggerito di creare una nuova istanza (new Test()) della classe principale nel metodo principale e invocare il metodo non-staticarrPrint.