[Fixed] Slik løser du feilen «Kan ikke finne symbol» i Java

Java er et generellt formål, objektorientert, sterkt skrevet programmeringsspråk for å bygge web-, mobil- og bedriftsapplikasjoner. Java, utviklet av Sun Microsystems og for tiden eid av Oracle Corporation, har blitt et veldig populært programmeringsspråk på grunn av dets portabilitet, skalerbarhet, pålitelighet og stabilitet.

Når du skriver programmer som bruker Java, er Java programmeringsspråk at Java kildekoden først kompileres til bytekode. Bytekoden tolkes deretter av Java Virtual Machine til maskinkode, og lar dermed Java-programmet kjøre. Derfor er Java både et kompilert og tolket språk.

Kompilering innebærer å skanne en hel kildekode og oversette den til maskinkode på en gang. En tolk konverterer derimot kildekoden til maskinkode én linje om gangen.

Under kompilering lager kompilatoren en liste over alle identifikatorer som brukes i programmet. I Java er identifikatorer navn gitt til de forskjellige elementene i programmet, for eksempel variabler, klasser, metoder, pakker og grensesnitt, blant andre.

Når et Java-program kompileres, kan det oppstå feil under kompileringsprosessen. Slike feil er kjent som kompileringsfeil eller kompileringstidsfeil. Kompileringsfeil hindrer Java-kompilatoren i å generere et programs bytekode.

Kompileringsfeil hindrer programmet i å bli kompilert. Slike feil kan være forårsaket av syntaks, semantiske eller strukturelle feil i kildekoden. Et eksempel på en kompileringsfeil er Kan ikke finne symbolfeil.

feil: finner ikke symbol

Som nevnt tidligere, under kompilering, oppretter Java-kompilatoren en liste over alle identifikatorer som brukes i programmet, og den finner ut hva hver identifikator betyr. Hvis kompilatoren finner en identifikator den ikke gjenkjenner, eller den ikke kan fortelle hva identifikatoren refererer til, oppstår en symbolfeil som ikke kan finne.

En kan ikke finne symbolfeil er kompilatorens måte å fortelle deg at du bruker en identifikator som den ikke kan forstå og dermed ikke kan finne ut hva identifikatoren skal gjøre.

Dette kan skyldes at identifikatoren du prøver å bruke ikke er deklarert, ikke er tilgjengelig innenfor omfanget du bruker den, eller ikke har blitt importert riktig. En feil som ikke finner symbol kan føre til mislykket kompilering.

Årsaker til feilen: finner ikke symbol

Noen av de potensielle årsakene til feilen: finner ikke symbol inkluderer:

  • Typografiske feil fører til feilstavede variabler, metoder, klasser eller pakkenavn. Bruk av feil store og små bokstaver fører også til denne feilen, siden Java skiller mellom store og små bokstaver.
  • Bruke en variabel, metode eller klasse som ikke er deklarert eller bruke den før den faktiske deklarasjonen.
  • Bruk av variabler, metoder eller klasser utenfor omfanget de er deklarert i.
  • Opprette en forekomst av en klasse uten å bruke det nye nøkkelordet
  • Mangler importsetninger når du prøver å bruke klasser fra andre pakker. Unnlatelse av å importere en klasse som er i en annen pakke før du bruker den, vil også forårsake denne feilen.
  • Feil pakkeimport.
  7 Online CCNA-sertifiseringskurs for nettverksadministratorer

Når kompilatoren oppdager noen av feilene ovenfor i koden din, vil den stoppe kompileringen og gi feilen som ikke finner symbol.

Eksempler på feil: finner ikke symbol

La oss ta en detaljert titt på kodeeksempler som viser de forskjellige årsakene til symbolfeilen som ikke kan finne, og hvordan du kan løse feilen.

#1. Typografiske feil

Feilstavede variabler, metoder, klasser eller pakkenavn og feil tilfeller fører til at symbolfeilen ikke kan finne. Tenk på koden nedenfor:

class Test {
  public static void main(String[] args) {
    int even_number = 4;
    System.out.println(even_numbe); // misspelled variable name
    System.out.println(Even_number);// wrong case
    int sum = addnumber(5, 20); // misspelled method name, wrong case
    System.out.println(sum);
  }
  
  public static int addNumbers(int a, int b) {
    int result = a + b;
    return result;
  }
}

Resultatet av å kompilere koden ovenfor er vist nedenfor:

For å rette opp feilene, sørg for at du bruker riktig metode og variabelnavn. I eksemplet ble variabelen partall og metodenavnet addNumbers feilstavet og de brukte feil bokstaver. For å korrigere disse feilene, bruk riktig variabel og metodenavn som er partall, og legg tilNumbers som vist nedenfor:

class Test {
  public static void main(String[] args) {
    int even_number = 4;
    System.out.println(even_number); // Correct variable name with the right case
    System.out.println(even_number); // Correct variable name with the right case
    int sum = addNumbers(5, 20); // Correct method name
    System.out.println(sum);
  }

  public static int addNumbers(int a, int b) {
    int result = a + b;
    return result;
  }
}

Produksjon:

4
4
25

#2. Udeklarert variabel

Udeklarerte variabler, ved å bruke variabler før deklarasjonen, og ved å bruke variabler, metoder og klasser utenfor deres omfang, kan ikke finne symbol som vist nedenfor:

class Test {
  public static void main(String[] args) {
    System.out.println(y); // y is undeclared
    System.out.println(num); // num used before its declaration
    int num = 4; // num's declaration and initialization
    if (num > 3) {
      int x = 2;
    };
    System.out.println(x); // x - used outside its scope
  }
}

Resultatet av å kompilere denne koden vises nedenfor:

For å rette opp denne feilen, sørg for å deklarere alle variabler du bruker i programmet og kun bruke dem etter at du har erklært dem. I vårt tilfelle ble variablene y og num brukt før de ble deklarert. Rett denne feilen ved å bruke dem etter erklæringen.

Variabelen x ble brukt utenfor omfanget den ble deklarert i. For å korrigere dette, bruk den innenfor if-blokken der den har blitt deklarert som vist nedenfor:

class Test {
  public static void main(String[] args) {
    String y = "Hello World";
    System.out.println(y); // y - used after it has been declared
    int num = 4; 
    System.out.println(num); // num - used after it has been declared
    
    if (num > 3) {
      int x = 2;
      System.out.println(x); // x - used within the scope of the if statement
    };
  }
}

Produksjon:

Hello World
4
2

#3. Variabler, metoder og klasser utenfor omfanget

Bruk av variabler, metoder og klasser utenfor omfanget de har blitt deklarert i vil føre til at symbolet ikke kan finne som vist i koden nedenfor:

class Test {
  public static void main(String[] args) {
    if (true) {
      int number = 10;
    }
    System.out.println(number); // 'number' is out of scope
  }
}

Å kompilere denne koden fører til følgende feil:

  Ofte stilte JavaScript-intervjuspørsmål og svar

For å rette feilen, sørg for at du bruker variabelnummeret innenfor omfanget det er deklarert. Det er innenfor rammen av if-blokken som vist nedenfor:

class Test {
  public static void main(String[] args) {
    if (true) {
      int number = 10;
      System.out.println(number); // number - used within the scope of the if block
    }
  }
}

Produksjon:

10

#4. Opprette en forekomst av en klasse uten å bruke det nye nøkkelordet

Java er et objektorientert språk og du kan dermed lage objekter også kjent som klasseforekomster i et Java-program. Men hvis du gjør dette uten å bruke det nye søkeordet, vil du støte på et kan ikke finne-symbol som vist nedenfor:

public class Car {
  private String make;
  private String model;

  public Car(String make, String model) {
    this.make = make;
    this.model = model;
  }

  public String getMake() {
    return make;
  }

  public String getModel() {
    return model;
  }

  public static void main(String[] args) {
    // Creating an instance of the Car class without using new
    Car myCar = Car("Ford", "Fiesta");

    System.out.println("Make: " + myCar.getMake());
    System.out.println("Model: " + myCar.getModel());
  }
}

Å kompilere koden resulterer i en feil som vist nedenfor:

For å rette feilen, bruk det nye nøkkelordet når du lager objekter. For å lage en forekomst av en klasse i Java, må du bruke det nye nøkkelordet. For å lage en forekomst av klassen Bil må du altså bruke new Car() som vist nedenfor:

public class Car {
  private String make;
  private String model;

  public Car(String make, String model) {
    this.make = make;
    this.model = model;
  }

  public String getMake() {
    return make;
  }

  public String getModel() {
    return model;
  }

  public static void main(String[] args) {
    // Instance of Car created correctly by using the new keyword
    Car myCar = new Car("Ford", "Fiesta");

    System.out.println("Make: " + myCar.getMake());
    System.out.println("Model: " + myCar.getModel());
  }
}

Produksjon:

Make: Ford
Model: Fiesta

#5. Manglende import

Prøver du å bruke en klasse som finnes i en annen pakke uten å importere den, fører det til ikke-finner-symbolet ikke feil. Se koden nedenfor:

class Test {
  public static void main(String[] args) {
    System.out.println("Hello, enter any number");
    // Missing import for the Scanner class
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    System.out.println("The number you entered is: " + number);
    scanner.close();
  }
}

Resultatet av kompileringen av koden vises nedenfor:

  Forskjeller mellom Flask og Django

Skannerklassen brukes til å få brukerinndata fra tastaturet i et Java-program. For å bruke den, må du først importere den til filen du vil bruke den. Import av skannerklassen gjør den tilgjengelig for bruk som vist. Importerklæringen er den første linjen i koden nedenfor:

import java.util.Scanner;
class Test {
  public static void main(String[] args) {
    System.out.println("Hello, enter any number");
    // Missing import for the Scanner class
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    System.out.println("The number you entered is: " + number);
    scanner.close();
  }
}

Produksjon:

Hello, enter any number
45
The number you entered is: 45

#6. Feil import

Bortsett fra unnlatelsen av å importere en pakke du vil bruke, kan import av feil pakke også føre til at det ikke finnes symbol. Tenk på koden nedenfor:

import java.util.Dates; // importing the wrong package - correct package is Date
class Test {
  public static void main(String[] args) {
    Dates now = new Dates();
        System.out.println(now);
  }
}

Å kompilere koden resulterer i følgende feil:

For å rette opp feilene som ikke kan finne symboler, sørg for at du importerer riktig pakke. I koden som genererte en feil, var klassen som ble importert Dates. Imidlertid er det ingen innebygd klasse kalt Dates. Riktig navn er Dato. Derfor, for å fjerne feilen, importerer du Dato og ikke Datoer som vist nedenfor:

import java.util.Date; // importing the correct package - Date and not Dates
class Test {
  public static void main(String[] args) {
    Date now = new Date();
        System.out.println(now);
  }
}

Produksjon:

Thu Aug 17 12:02:12 EAT 2023

Virkning av feil: finner ikke symbolet i kompilering

Siden den er en kompileringsfeil, er den mest umiddelbare virkningen av feilen som ikke kan finne symbol en feil i kompileringsprosessen. Når Java kompileres til bytekode, resulterer feil oppdaget i kildekoden i feil i kompileringsprosessen. Derfor vil det ikke genereres noen bytekode som skal brukes til å kjøre programmet.

Når slike feil oppstår, er den åpenbare årsaken til handling å begynne å feilsøke kildekoden din for å finne hva som forårsaker feilene og rette opp feilene. Mens feilsøking kan ha fordelen av å hjelpe deg med å bli bedre kjent med et språk, kan det føre til utviklingsforsinkelser. I tillegg påvirkes den generelle kildekodekvaliteten på grunn av feil i kildekoden.

Konklusjon

De kan ikke finne symbolfeil, en veldig vanlig feil, og du er nødt til å støte på dem mens du skriver Java-kode. Heldigvis er det også en veldig enkel feil å unngå. Kan ikke finne symbolfeilresultater fra feil bruk av identifikatorer. For å unngå feilen, sørg for at du erklærer alle variablene, metodene og klasser før du bruker dem.

Pass i tillegg på at du ikke gjør noen skrivefeil når du refererer til identifikatorene du bruker i programmet, og bruk alle identifikatorene dine innenfor omfanget du har deklarert dem. Til slutt, i tilfelle du skal bruke en pakke eller eksterne klasser i programmet, sørg for å importere de riktige pakkene til programmet før du begynner å bruke dem.

Du kan også utforske den beste Java-overvåkingsprogramvaren for bedrifter.