Java >> Tutoriel Java >  >> Java

Début d'expression illégal en Java

Le démarrage illégal d'une expression est une erreur java lors de la compilation avec le compilateur "javac". Lorsque le compilateur détecte qu'une instruction ne respecte pas les règles de syntaxe du langage de programmation Java, un message d'erreur de début d'expression illégal s'affiche. Ces erreurs peuvent survenir pour de nombreuses raisons. Dans la plupart des cas, ils sont simples à résoudre tant que vous pouvez localiser la ligne de code contenant l'erreur. Cela peut être aussi simple que causé par l'omission d'un crochet fermant ou ouvrant ou un point-virgule manquant à la fin d'une ligne.

Début d'expression illégal en Java

Le compilateur java compile le code de haut en bas, de gauche à droite. Une question courante est pourquoi n'affiche-t-il pas l'erreur comme "fin illégale d'une expression" quand on omet un point-virgule à la fin d'une ligne ? Le compilateur ne connaît pas la fin. Lorsqu'il vérifie l'instruction suivante et que l'instruction précédente n'a pas été terminée, il détecte un début d'expression illégal.

Exemple :

public class equals{

     public static void main(String []args)
     
     {
         if( 5 => 2)
         {
             System.out.println("Hello World");
             
         }
     }
        
}

Sortie :

$javac equals.java
equals.java:6: error: illegal start of expression
         if( 5 => 2)                ^
1 error

Dans l'exemple ci-dessus, un début illégal d'expression est lancé puisque nous avons commencé avec (=>) plutôt que d'écrire l'expression sous la forme (5>=2). Il peut être difficile pour vous de le remarquer, d'où la nécessité d'améliorer vos compétences quotidiennes en programmation. Cela dit, examinons quelques scénarios dans lesquels vous pouvez rencontrer cette erreur et la résoudre.

Utilisation de modificateurs d'accès avec des variables locales

Un modificateur d'accès définit la portée des constructeurs de méthodes ou des classes et des autres membres. Contrairement aux variables globales qui peuvent être utilisées n'importe où dans la classe, les variables locales ne peuvent être utilisées que dans un bloc. Ils ont une portée limitée et ne peuvent donc être utilisés nulle part dans la classe. L'affectation d'un modificateur d'accès modifie la portée d'une variable lors de la déclaration.
Exemple :Définition d'une variable globale comme "étudiant public ; ' signifie que la variable est publique et peut être utilisée n'importe où dans une classe. Dans une instance où il s'agissait d'une variable locale, un début illégal d'expression sera affiché.

public class numbers{

     public static void main(String []args)
     
     {
        public int number = 1;
     }     

}

Sortie :

$javac numbers.java
numbers.java:6: error: illegal start of expression
        public int number = 1;
        ^
1 error

Dans l'exemple ci-dessus, int number est une variable locale et ne peut être utilisée que dans la méthode primaire. Lui assigner un modificateur d'accès public essaie de changer sa portée, et donc nous obtenons une erreur de compilation si un début illégal d'une expression.

Pour résoudre ce problème, vous devrez prendre la déclaration de variable en dehors de la méthode primaire, en en faisant une variable globale, ou supprimer le modificateur d'accès public.

Méthode à l'intérieur d'une autre méthode

Java ne permet pas la définition d'une méthode à l'intérieur d'une autre méthode. Cela lance un début d'expression illégal.

public class number{

     public static void main(String []args)
     {
               int num = 5;
	 public void Method2()
	 { 
	          System.out.println("it is a method inside a method.");
	       }
	    }
}

Sortie :

$javac number.java
number.java:7: error: illegal start of expression
	 public void Method2()
	 ^
number.java:7: error: illegal start of expression
	 public void Method2()
	        ^
number.java:7: error: ';' expected
	 public void Method2()
	                    ^
3 errors

Dans le code ci-dessus, Method2 est à l'intérieur de la méthode principale. Cependant, comme les règles de syntaxe de programmation Java ne le permettent pas, il lance un début d'expression illégal.

Pour résoudre ce problème, nous nous assurons que vous n'utilisez pas une méthode à l'intérieur d'une autre méthode en Java. La meilleure pratique serait de déclarer une autre méthode en dehors de la méthode principale et de l'appeler dans la main selon vos besoins.

La classe à l'intérieur d'une méthode ne doit pas avoir de modificateur

Java n'autorise pas une méthode à l'intérieur d'une méthode, mais assez drôle, il permettra d'écrire une classe dans une méthode. Ce sera une classe locale qui ne sera utilisée qu'à l'intérieur de cette méthode. L'affectation d'un modificateur d'accès tente de modifier la portée de la classe interne pour qu'elle soit accessible en dehors de la méthode, ce qui entraîne un début d'expression illégal.

public class University {
  
    	    public static final void main(String args[]){        
	     public class department { }
	    }
	}

Dans l'exemple ci-dessus, la classe "Université" est définie dans la méthode principale dans la classe appelée "département". Par conséquent, l'utilisation du modificateur d'accès public génère l'erreur.

$javac University.java
University.java:4: error: illegal start of expression
	     public class department { }
	     ^
1 error

Un copée de classe interne n'existe qu'à l'intérieur d'une méthode. Pour résoudre ce problème, assurez-vous que les classes internes ne contiennent pas de modificateur d'accès. Vous pouvez également définir une classe dans une classe mais en dehors d'une méthode.

Méthodes imbriquées

L'imbrication est le processus par lequel une construction de programmation l'inclut dans une autre. Java n'autorise pas l'utilisation d'une méthode à l'intérieur d'une autre méthode et lance un début d'expression illégal. Ces limitations, cependant, n'existent pas dans certains langages de programmation tels que Python.

public class University
{
	public void print ()
	{
		String student = "Method Inside Method";
		public void print String (String st)
		{
			System.out.print(s);
		}
	}
}

Sortie :

$javac University.java
University.java:6: error: illegal start of expression
		public void print String (String st)
		^
University.java:6: error: illegal start of expression
		public void print String (String st)
		       ^
University.java:6: error: ';' expected
		public void print String (String st)
		                 ^
University.java:6: error: ')' expected
		public void print String (String st)
		                                ^
University.java:6: error: illegal start of expression
		public void print String (String st)
		                                   ^
University.java:6: error: ';' expected
		public void print String (String st)
		                                    ^
University.java:11: error: class, interface, or enum expected
}
^
7 errors

Chaîne sans guillemet double ou Caractère sans guillemet simple

Un caractère est un type de données primitif et une chaîne est une classe. Les variables de chaîne et les variables de caractère doivent être entre guillemets doubles et guillemets simples, respectivement. Initialisation d'une variable de chaîne ou de chaîne de caractères sans ses résultats dans l'erreur de compilation. S'il vous manque les guillemets, le compilateur Java les considère comme des noms.

Caractère sans guillemet simple

public class character {
  public static void main(String[] args) {
    char symbol = /;
    
      System.out.println(symbol);
  }
}

Sortie :

$javac character.java
character.java:3: error: illegal start of expression
    char symbol = /;
                  ^
character.java:3: error: illegal start of expression
    char symbol = /;
                   ^
2 errors

Chaîne sans guillemet double

public class sample {
  public static void main(String[] args) {
    String website = Codeunderscored ;
    
      System.out.println(website);
  }
}

Avec guillemets :

public class sample {
  public static void main(String[] args) {
    String website = "Codeunderscored" ;
    
      System.out.println(website);
  }
}

Sortie :

$javac sample.java
$java -Xmx128M -Xms16M sample
Codeunderscored

La définition de caractère contient un (')  Alors que la chaîne utilise (").

Accolades manquantes

Dans les règles de syntaxe Java de programmation, chaque bloc de code doit commencer par une accolade et se terminer par une accolade. Sinon, si vous manquez l'une des accolades, le compilateur n'identifiera pas le début du bloc ou la fin. Cela entraîne une erreur de compilation.

  public class sample {
  public static void main(String[] args) {
    String website = "Codeunderscored" ;
    
      System.out.println(website);
  }

Dans certains compilateurs, cette erreur s'affichera en tant qu'erreur :fin de fichier atteinte lors de l'analyse. Cela signifie que le compilateur est incapable de localiser la fin de l'instruction.

$javac sample.java
sample.java:7: error: reached end of file while parsing
}
 ^
1 error

Conclusion

Les erreurs de programmation sont toujours réversibles. Vous ne pouvez pas les supprimer complètement. Cependant, développer vos compétences en programmation réduira ces erreurs et améliorera vos compétences en débogage. Dans ce didacticiel, nous avons couvert le début illégal d'une expression et le résolvons en Java. Étant donné que Java ne signale pas la fin illégale d'une expression pour corriger le début illégal d'une expression, recherche toujours une erreur dans la ligne juste au-dessus de la ligne mentionnée dans le message d'erreur. Une seule erreur de syntaxe peut parfois provoquer plusieurs erreurs « Démarrage illégal de l'expression » dans certains cas. L'évaluation de la cause racine résout l'erreur immédiatement.


Balise Java