Java >> Java tutorial >  >> Java

Ulovlig start af udtryk i Java

Den ulovlige start af et udtryk er en java-fejl under kompileringstiden med "javac"-kompileren. Når compileren registrerer, at en sætning ikke følger syntaksreglerne for java-programmeringssproget, vises en fejlmeddelelse om ulovlig start af udtryk. Disse fejl kan opstå på grund af så mange årsager. I de fleste tilfælde er de ligetil at løse, så længe du kan finde kodelinjen med fejlen. Det kan være så simpelt som forårsaget af en udeladt lukke- eller åbningsbeslag eller et manglende semikolon i slutningen af ​​en linje.

Ulovlig start af udtryk i Java

Java-kompileren kompilerer koden fra top til bund, venstre mod højre. Et almindeligt spørgsmål er, hvorfor viser den ikke fejlen som "ulovlig slutning af et udtryk", når man udelader et semikolon i slutningen af ​​en linje? Compileren kender ikke slutningen. Når den kontrollerer følgende sætning, og den tidligere erklæring ikke blev afsluttet, ser den en ulovlig start på udtryk.

Eksempel:

public class equals{

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

Output:

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

I ovenstående eksempel er en ulovlig start af et udtryk kastet, da vi startede med (=>) i stedet for at skrive udtrykket som (5>=2). Det kan være svært for dig at bemærke dette, og derfor er det nødvendigt at forbedre dine daglige programmeringsfærdigheder. Med det sagt, lad os se på nogle scenarier, hvor du kan støde på denne fejl og løse den.

Brug af adgangsmodifikatorer med lokale variabler

En adgangsmodifikator angiver omfanget af metodekonstruktører eller klasser og andre medlemmer. I modsætning til globale variabler, der kan bruges overalt i klassen, kan lokale variabler kun bruges inden for en blok. De har et begrænset omfang og kan derfor ikke bruges nogen steder i klassen. Tildeling af en adgangsmodifikator ændrer omfanget af en variabel under erklæringen.
Eksempel:Definition af en global variabel som 'offentlig elev; ' betyder, at variablen er offentlig og kan bruges hvor som helst i en klasse. I et tilfælde, hvor dette var en lokal variabel, vil en ulovlig start af et udtryk blive vist.

public class numbers{

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

}

Output:

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

I ovenstående eksempel, int nummer er en lokal variabel og kan kun bruges inden for den primære metode. At tildele den en offentlig adgangsmodifikator forsøger at ændre dens omfang, og derfor får vi en kompileringsfejl, hvis en ulovlig start på et udtryk.

For at løse dette skal du tage variabeldeklarationen uden for den primære metode, hvilket gør den til en global variabel, eller fjerne den offentlige adgangsmodifikator.

Metode inde i en anden metode

Java tillader ikke definitionen af ​​en metode i en anden metode. Dette giver en ulovlig start på udtryk.

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

Output:

$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

I ovenstående kode, Method2 er inde i hovedmetoden. Men da java-syntaksreglerne for programmering ikke tillader dette, giver det en ulovlig start på udtryk.

For at løse dette sikrer vi, at du ikke bruger en metode i en anden metode i Java. Den bedste praksis ville være at erklære en anden metode uden for hovedmetoden og kalde den i hovedsagen efter dine krav.

Klasse i en metode må ikke have en modifikator

Java tillader ikke en metode inde i en metode, men sjovt nok vil det gøre det muligt for en at skrive en klasse i en metode. Dette vil være en lokal klasse, der kun vil blive brugt i den metode. Tildeling af en adgangsmodifikator forsøger at ændre omfanget af den indre klasse til at være tilgængelig uden for metoden, hvilket resulterer i en ulovlig start på udtryk.

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

I ovenstående eksempel er klassen 'Universitet' defineret inden for hovedmetoden er inden for klassen kaldet 'afdeling'. Derfor genereres fejlen ved brug af offentlig adgangsmodifikator.

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

En indre klasse klarer sig kun inden for en metode. For at løse dette skal du sørge for, at indre klasser ikke indeholder en adgangsmodifikator. Du kan også definere en klasse inden for en klasse, men uden for en metode.

Indlejrede metoder

Nesting er processen med en programmeringskonstruktion, der inkluderer den i en anden. Java tillader ikke brug af en metode i en anden metode og giver en ulovlig start på udtryk. Disse begrænsninger er der dog ikke i nogle programmeringssprog såsom python.

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

Output:

$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

Streng uden dobbelt anførselstegn eller tegn uden enkelt anførselstegn

Et tegn er en primitiv datatype, og en streng er en klasse. Strengvariabler og tegnvariabler skal være inden for henholdsvis dobbelte anførselstegn og enkelte anførselstegn. Initialisering af en streng eller char-strengvariabel uden hans resultater i kompileringstidsfejlen. Hvis du mangler citater, betragter java-kompileren dem som navne.

Tegn uden enkelt anførselstegn

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

Output:

$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

Streng uden dobbelte anførselstegn

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

Med dobbelte anførselstegn:

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

Output:

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

Char-definitionen indeholder et (‘)  Hvorimod streng bruger (“).

Manglende krøllede seler

I Java-syntaksreglerne for programmering skal hver kodeblok starte med en krøllet klammeparentes og slutte med en krøllet klammeparentes. Ellers, hvis du savner nogen af ​​bøjlerne, vil compileren ikke identificere starten på blokken eller slutningen. Dette resulterer i en kompileringsfejl.

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

I nogle compilere vil denne fejl blive vist som fejl:nåede slutningen af ​​filen under parsing. Dette betyder, at compileren ikke er i stand til at finde slutningen af ​​sætningen.

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

Konklusion

Programmeringsfejl er altid inverterbare. Du kan ikke gøre op med dem helt. Udvikling af dine færdigheder i programmering vil dog reducere disse fejl og gøre dine fejlfindingsfærdigheder bedre. I denne vejledning har vi dækket den ulovlige start af et udtryk og løst det i Java. Da Java ikke rapporterer den ulovlige slutning af et udtryk for at rette den ulovlige start af et udtryk, leder altid efter en fejl i linjen lige over linjen nævnt i fejlmeddelelsen. En enkelt syntaksfejl kan nogle gange forårsage flere "Ulovlig start af udtryk"-fejl i nogle tilfælde. Evaluering af grundårsagen løser fejlen med det samme.


Java tag