Kan geen statische verwijzing maken naar de niet-statische methode fxn(int) van het type Twee

Mogelijk duplicaat:
Wat is de reden achter “niet-statische methode kan niet worden verwezen vanuit een statische context”?
Kan geen statische verwijzing maken naar de niet-statische methode
kan geen statische verwijzing maken naar het niet-statische veld

Ik begrijp niet wat er mis is met mijn code.

class Two {
    public static void main(String[] 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;
    }
}

Uitzondering in thread “main” java.lang.Error: onopgelost compilatieprobleem:
Kan geen statische verwijzing maken naar de niet-statische methode fxn(int) van het type Twee


Antwoord 1, autoriteit 100%

Aangezien de mainmethode staticis en de fxn()methode niet, kun je de methode niet aanroepen zonder eerst een Twoobject. Dus je verandert de methode in:

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

of verander de code in mainin:

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

Lees meer over statichier in de Java-zelfstudies.


Antwoord 2, autoriteit 8%

Je hebt geen toegang tot de methode fxn omdat deze niet statisch is. Statische methoden hebben alleen rechtstreeks toegang tot andere statische methoden. Als je fxn in je hoofdmethode wilt gebruiken, moet je:

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

Dat wil zeggen, maak een Two-Object en roep de methode op dat object aan.

…of maak de fxn-methode statisch.


Antwoord 3, autoriteit 5%

Je kunt niet-statische leden niet verwijzen vanuit een statische methode.

Niet-statische leden (zoals uw fxn(int y)) kunnen alleen worden aangeroepen vanuit een instantie van uw klas.

Voorbeeld:

U kunt dit doen:

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

of je kunt je methode als statisch declareren.


Antwoord 4

  1. Een statischemethode heeft GEENtoegang tot een niet-statische methode of variabele.

  2. public static void main(String[] args)is een statische methode, dus kan NIETtoegang krijgen tot de niet-statische public static int fxn(int y)methode.

  3. Probeer het op deze manier…

    static int fxn(int y)

    public class Two {
        public static void main(String[] 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;
        }
    

    }

Other episodes