Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
In Développement Dernière mise à jour : 21 août 2023
Partager sur:
Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Java est un langage de programmation à usage général, orienté objet et fortement typé pour la création d'applications Web, mobiles et d'entreprise. Java, développé par Sun Microsystems et actuellement détenu par Oracle Corporation, est devenu un langage de programmation très populaire en raison de sa portabilité, de son évolutivité, de sa fiabilité et de sa stabilité.

Lors de l'écriture de programmes utilisant Java, le langage de programmation Java est que Java, le code source est d'abord compilé en bytecode. Le bytecode est ensuite interprété par la machine virtuelle Java en code machine, permettant ainsi au programme Java de s'exécuter. Par conséquent, Java est à la fois un langage compilé et interprété.

La compilation consiste à numériser un code source entier et à le traduire en code machine en une seule fois. Un interprète, par contre, convertit code source dans le code machine une ligne à la fois.

Jeune programmeuse travaillant au bureau

Lors de la compilation, le compilateur crée une liste de tous les identifiants utilisés dans le programme. En Java, les identificateurs sont des noms donnés aux différents éléments du programme, tels que les variables, les classes, les méthodes, les packages et les interfaces, entre autres.

Lorsqu'un programme Java est en cours de compilation, des erreurs peuvent survenir au cours du processus de compilation. Ces erreurs sont appelées erreurs de compilation ou erreurs de compilation. Les erreurs de compilation empêchent le compilateur Java de générer avec succès le bytecode d'un programme.

Les erreurs de compilation empêchent la compilation de votre programme. Ces erreurs peuvent être causées par des erreurs de syntaxe, de sémantique ou de structure dans le code source. Un exemple d'erreur de compilation est l'erreur Impossible de trouver le symbole. 

error: cannot find symbol

Comme indiqué précédemment, lors de la compilation, le compilateur Java crée une liste de tous les identifiants utilisés dans le programme et détermine la signification de chaque identifiant. Si le compilateur trouve un identificateur qu'il ne reconnaît pas ou s'il ne peut pas dire à quoi l'identificateur fait référence, une erreur de symbole introuvable se produit.

Une erreur de symbole introuvable est la façon dont le compilateur vous indique que vous utilisez un identifiant qu'il ne peut pas comprendre et ne peut donc pas comprendre ce que l'identifiant est censé faire.

Cela peut être dû au fait que l'identifiant que vous essayez d'utiliser n'a pas été déclaré, n'est pas disponible dans la portée que vous utilisez ou n'a pas été importé correctement. Une erreur de symbole introuvable peut entraîner un échec de la compilation.

Causes of the error: cannot find symbol

Cause commune d'erreur-0x80004005-

Certaines des causes potentielles de l'erreur : symbole introuvable incluent :

  • Les erreurs typographiques conduisent à des variables, méthodes, classes ou noms de packages mal orthographiés. L'utilisation de la mauvaise casse conduit également à cette erreur, car Java est sensible à la casse.
  • Utiliser une variable, une méthode ou une classe qui n'a pas été déclarée ou l'utiliser avant sa déclaration réelle.
  • Utiliser des variables, des méthodes ou des classes en dehors de la portée dans laquelle elles ont été déclarées.
  • Créer une instance d'une classe sans utiliser le nouveau mot-clé
  • Instructions d'importation manquantes lors de la tentative d'utilisation de classes d'autres packages. Le fait de ne pas importer une classe qui se trouve dans un autre package avant de l'utiliser entraînera également cette erreur.
  • Importation de package incorrecte.

Lorsque le compilateur détecte l'une des erreurs ci-dessus dans votre code, il arrête la compilation et génère l'erreur Impossible de trouver le symbole. 

Examples of error: cannot find symbol

Examinons en détail les exemples de code montrant les différentes causes de l'erreur de symbole introuvable et comment résoudre l'erreur.

# 1. Erreurs typographiques

Des variables, des méthodes, des classes ou des noms de packages mal orthographiés et des cas erronés conduisent à la ne peut pas trouver le symbole erreur. Considérez le code ci-dessous :

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

Le résultat de la compilation du code ci-dessus est présenté ci-dessous :

Erreurs typographiques

Pour corriger les erreurs, assurez-vous que vous utilisez la bonne méthode et les bons noms de variables. Dans l'exemple, la variable nombre pair et le nom de la méthode ajouter des numéros ont été mal orthographiés et ils ont utilisé les mauvais cas. Pour corriger ces erreurs, utilisez la variable et le nom de méthode corrects nombre pair, , ajouter des numéros comme indiqué ci-dessous:

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

Sortie :

4
4
25
Correction de fautes de frappe

# 2. Variable non déclarée

Les variables non déclarées, l'utilisation de variables avant la déclaration et l'utilisation de variables, de méthodes et de classes en dehors de leur portée entraînent l'impossibilité de trouver le symbole, comme indiqué ci-dessous :

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
  }
}

Le résultat de la compilation de ce code est présenté ci-dessous :

Variable non déclarée

Pour corriger cette erreur, assurez-vous de déclarer toutes les variables que vous utilisez dans votre programme et de ne les utiliser qu'après les avoir déclarées. Dans notre cas, les variables y , num ont été utilisés avant d'être déclarés. Corrigez cette erreur en les utilisant après leur déclaration.

La variable x a été utilisé en dehors de la portée dans laquelle il a été déclaré. Pour corriger cela, utilisez-le dans le bloc if où il a été déclaré comme indiqué ci-dessous :

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

Sortie :

Hello World
4
2
Variable non déclarée corrigée

# 3. Variables, méthodes et classes hors champ

L'utilisation de variables, de méthodes et de classes en dehors de la portée dans laquelle elles ont été déclarées entraînera un symbole introuvable, comme indiqué dans le code ci-dessous :

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

La compilation de ce code conduit à l'erreur suivante :

Hors champ d'application

Pour corriger l'erreur, assurez-vous que vous utilisez le numéro de variable dans la portée pour laquelle il a été déclaré. Cela entre dans le cadre de la si bloc comme indiqué ci-dessous:

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
    }
  }
}

Sortie :

10
Portée corrigée

# 4. Créer une instance d'une classe sans utiliser le nouveau mot-clé

Java est un langage orienté objet et vous pouvez donc créer des objets également appelés instances de classe dans un programme Java. Cependant, si vous le faites sans utiliser le neufs mot-clé, vous rencontrerez un symbole introuvable comme indiqué ci-dessous :

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

La compilation du code génère une erreur comme indiqué ci-dessous :

Pas de nouveau mot-clé

Pour corriger l'erreur, utilisez le neufs mot-clé chaque fois que vous créez des objets. Pour créer une instance d'une classe en Java, vous devez utiliser le nouveau mot-clé. Pour créer une instance de la classe parfaite il faut donc utiliser nouvelle voiture() comme indiqué ci-dessous:

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

Sortie :

Make: Ford
Model: Fiesta
corrigé-pas-de-nouveau-mot-clé

# 5. Importation manquante

Essayer d'utiliser une classe trouvée dans un autre package sans l'importer entraîne l'erreur Impossible de trouver le symbole et non. Voir le code ci-dessous :

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

Le résultat de la compilation du code est présenté ci-dessous :

Importation manquante

La classe Scanner est utilisée pour obtenir une entrée utilisateur à partir du clavier dans un programme Java. Pour l'utiliser, vous devez d'abord l'importer dans le fichier que vous souhaitez utiliser. L'importation de la classe de scanner la rend disponible pour une utilisation comme indiqué. L'instruction d'importation est la première ligne du code ci-dessous :

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

Sortie :

Hello, enter any number
45
The number you entered is: 45
Importation manquante corrigée

# 6. Importation incorrecte

Outre l'échec de l'importation d'un package que vous souhaitez utiliser, l'importation du mauvais package peut également entraîner un symbole introuvable. Considérez le code ci-dessous :

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

La compilation du code génère les erreurs suivantes :

Importation incorrecte

Pour corriger les erreurs de symbole introuvables générées, assurez-vous d'importer le bon package. Dans le code qui a généré une erreur, la classe importée était Dates. Cependant, il n'y a pas de classe intégrée appelée Dates. Le nom correct est Date. Par conséquent, pour supprimer l'erreur, importez Date ne le comptant pas Dates comme indiqué ci-dessous:

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

Sortie :

Thu Aug 17 12:02:12 EAT 2023
Importation incorrecte corrigée

Impact of error: cannot find the symbol in Compilation

S'agissant d'une erreur de compilation, l'impact le plus immédiat de la ne peut pas trouver le symbole L'erreur est un échec du processus de compilation. Lorsque Java est compilé en bytecode, les erreurs détectées dans le code source entraînent l'échec du processus de compilation. Par conséquent, aucun bytecode ne sera généré pour être utilisé dans l'exécution du programme.

Lorsque de telles erreurs surviennent, la cause évidente de l'action est de commencer à déboguer votre code source pour trouver ce qui cause les erreurs et corriger les erreurs. Alors que le débogage peut avoir l'avantage de vous aider à mieux vous familiariser avec un langage, il peut entraîner des retards de développement. De plus, la qualité globale du code source est affectée en raison de bogues dans le code source.

Conclusion

Ils ne peuvent pas trouver les erreurs de symboles, une erreur très courante, et vous êtes obligé de les rencontrer lors de l'écriture de code Java. Heureusement, c'est aussi une erreur très facile à éviter. Impossible de trouver les résultats d'erreur de symbole en raison d'une mauvaise utilisation des identificateurs. Par conséquent, pour éviter l'erreur, assurez-vous de déclarer toutes vos variables, méthodes et classes avant de les utiliser.

De plus, assurez-vous de ne pas faire de fautes de frappe lorsque vous faites référence aux identifiants que vous utilisez dans votre programme et utilisez tous vos identifiants dans la portée que vous les avez déclarée. Enfin, si vous utilisez un package ou des classes externes dans votre programme, assurez-vous d'importer les bons packages dans votre programme avant de commencer à les utiliser.

Vous pouvez également explorer le meilleur Logiciel de surveillance Java pour les entreprises.

  • Collins Kariuki
    Auteur
    Collins Kariuki est développeur de logiciels et rédacteur technique pour Geekflare. Il a plus de quatre ans d'expérience dans le développement de logiciels, une formation en informatique et a également écrit pour Argot, Daily Nation et le Business Daily Newspaper.
  • Narendra Mohan Mittal
    Éditeur

    Narendra Mohan Mittal est stratège principal en stratégie de marque numérique et éditeur de contenu avec plus de 12 ans d'expérience polyvalente. Il est titulaire d'un M-Tech (médaillé d'or) et d'un B-Tech (médaillé d'or) en informatique et ingénierie.


    ... lire la suite
Merci à nos commanditaires
Plus de bonnes lectures sur le développement
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation de travail tout-en-un pour vous aider à gérer les projets, les tâches, le travail, les ventes, le CRM, les opérations, workflowset plus encore.
    Essayez Monday
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder