Impossible de faire une référence statique à la méthode non statique fxn (int) à partir du type Two

Dupliquer possible:
Quelle est la raison derrière “la méthode non statique ne peut pas être référencée à partir d’un contexte statique”?
Impossible de faire une référence statique à la méthode non statique
ne peut pas faire de référence statique au champ non statique

Je ne suis pas capable de comprendre ce qui ne va pas avec mon code.

class Two { public static void main(Ssortingng[] args) { int x = 0; System.out.println("x = " + x); x = fxn(x); System.out.println("x = " + x); } int fxn(int y) { y = 5; return y; } } 

Exception dans le thread “main” java.lang.Error: Problème de compilation non résolu: impossible de créer une référence statique à la méthode non statique fxn (int) à partir du type Two

Comme la méthode main est static et que la méthode fxn() ne l’est pas, vous ne pouvez pas appeler la méthode sans créer au préalable un object Two . Donc soit vous changez la méthode pour:

 public static int fxn(int y) { y = 5; return y; } 

ou remplacez le code main par:

 Two two = new Two(); x = two.fxn(x); 

En savoir plus sur la static ici dans les tutoriels Java .

Vous ne pouvez pas accéder à la méthode fxn car elle n’est pas statique. Les méthodes statiques peuvent uniquement accéder directement à d’autres méthodes statiques. Si vous voulez utiliser fxn dans votre méthode principale, vous devez:

 ... Two two = new Two(); x = two.fxn(x) ... 

C’est-à-dire, faites un Two-Object et appelez la méthode sur cet object.

… ou rendre la méthode fxn statique.

Vous ne pouvez pas faire référence à des membres non statiques à partir d’une méthode statique.

Les membres non statiques (comme votre fxn (int y)) ne peuvent être appelés qu’à partir d’une instance de votre classe.

Exemple:

Tu peux le faire:

  public class A { public int fxn(int y) { y = 5; return y; } } class Two { public static void main(Ssortingng[] args) { int x = 0; A a = new A(); System.out.println("x = " + x); x = a.fxn(x); System.out.println("x = " + x); } 

ou vous pouvez déclarer votre méthode comme statique.

  1. Une méthode statique ne peut PAS accéder à une méthode ou à une variable non statique.

  2. public static void main(Ssortingng[] args) est une méthode statique. Par conséquent, il ne peut PAS accéder à la méthode non statique statique public static int fxn(int y) .

  3. Essayez de cette façon …

    static int fxn (int y)

     public class Two { public static void main(Ssortingng[] args) { int x = 0; System.out.println("x = " + x); x = fxn(x); System.out.println("x = " + x); } static int fxn(int y) { y = 5; return y; } 

    }