2009-02-10 6 views
0

Puis-je initialiser une variable d'instance en Java, quand je l'initialise quand je la déclare, et l'initialiser avec la valeur de retour d'une méthode, que je définirai plus tard dans la classe.Initialisation d'une variable d'instance avec une méthode de la classe

Quelque chose comme ceci:

public class MyClass { 

    integers[] myArray = new integers[length()]; 

    int length() { 
    .... 

    } 
} 

length() me donne un certain nombre, et je veux que ce numéro pour déterminer le nombre d'éléments du tableau. Il me semble plausible, mais je reçois NullPointerException (je ne sais pas si cette erreur d'initialisation provoque l'exception, mais je ne sais pas exactement quoi, et parce que je n'ai jamais fait cette initialisation avant, je ne suis pas sûr que ce soit correct).

Répondre

-3

Vous devez faire la méthode statique:

static int length() { … } 
3

semble fonctionner très bien pour moi, avec la méthode statique ou non statique:

public class test 
{ 
    public int[] myarray = new int[this.length()]; 

    public int length() { 
     return 5; 
    } 

    public static void main(String[] args) 
    { 
     test foo = new test(); 
     for (int element : foo.myarray) { 
      System.out.println(element); 
     } 
    } 
} 

qui produit:

0 
0 
0 
0 
0 
+0

Cela ressemble à un marché. :) –

2

Avant de le faire, il pourrait être utile de considérer si cette syntaxe pourrait être légèrement déroutante, et qu'il pourrait être plus approprié e pour initialiser le tableau dans le constructeur, ou dans un bloc d'initialisation.

private final int[] myArray; 

public MyClass() { 
    myArray = new int[length()]; 
} 

ou

private final int[] myArray; 
{ 
    myArray = new int[length()]; 
} 
2

Il y a des chances que le problème est quelque part dans la méthode length(). Je soupçonne que cela fait référence à une variable qui n'a pas encore été initialisée correctement. Voici un exemple d'un programme qui montre que:

public class MyClass { 

    int[] myArray = new int[length()]; 

    // This is only initialized *after* myArray 
    String myString = "Hi"; 

    int length() { 
     return myString.length(); 
    } 

    public static void main(String[] args) { 
     new MyClass(); // Bang! 
    } 
} 

Si cette est le problème, je vous suggère de faire l'initialisation dans le constructeur au lieu - de cette façon la commande est beaucoup plus claire.

+0

+1. Ce problème est largement discuté dans http://java.sun.com/docs/books/effective/. – Chii

Questions connexes