שגיאת מהדר Java: התחלת ביטוי לא חוקית

1. סקירה כללית

"התחלת הביטוי הבלתי חוקית" היא שגיאה שכיחה שאנו עשויים להתמודד איתה בזמן הקומפילציה.

במדריך זה נראה דוגמאות הממחישות את הגורמים העיקריים לשגיאה זו וכיצד לתקן אותה.

2. חסרים פלטה מתולתלת

חסר סוגריים מסולסלים עלול להוביל לשגיאה "התחלת ביטוי לא חוקית". בואו נסתכל קודם על דוגמא:

חבילה com.baeldung; מחלקה ציבורית MissingCurlyBraces {public public printSum (int x, int y) {System.out.println ("תוצאת חישוב:" + calcSum (x, y)); public int calcSum (int x, int y) {החזר x + y; }}

אם נערך את המחלקה הנ"ל:

$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: שגיאה: התחלה לא חוקית של הביטוי public int calcSum (int x, int y) {^ MissingCurlyBraces.java:7: error: ';' צפוי int intel calcSum (int x, int y) {..... 

חסר את הסוגר המתולתל הסוגר של printSum () הוא הגורם הבסיסי לבעיה.

התיקון לבעיה הוא פשוט - הוספת הסוגר המתולתל הסוגר ל printSum () שיטה:

חבילה com.baeldung; מחלקה ציבורית MissingCurlyBraces {public public printSum (int x, int y) {System.out.println ("תוצאת חישוב:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }}

לפני שנלך קדימה לסעיף הבא, נסקור את שגיאת המהדר.

המהדר מדווח כי השורה השביעית גורמת לשגיאת "התחלת ביטוי לא חוקית". למעשה, אנו יודעים כי שורש הבעיה הוא בשורה השישית. מדוגמא זו אנו למדים זאת לפעמים שגיאות המהדר אינן מצביעות על השורה עם הסיבה הבסיסית, ונצטרך לתקן את התחביר בשורה הקודמת.

3. גישה לשינוי פנים בתוך הגישה

בג'אווה, אנו יכולים להכריז רק על משתנים מקומיים בתוך שיטה או קונסטרוקטור. איננו יכולים להשתמש בשום שינוי גישה עבור משתנים מקומיים בתוך שיטה מכיוון שנגישותם מוגדרת על ידי היקף השיטה.

אם נפר את הכלל ויהיה לנו משתני גישה בתוך שיטה, שגיאת "התחלה לא חוקית של ביטוי" תעלה.

בואו נראה את זה בפעולה:

חבילה com.baeldung; class Class AccessModifierInMethod {public public printSum (int x, int y) {sum int = x + y; System.out.println ("תוצאת חישוב:" + סכום); }}

אם ננסה לחבר את הקוד לעיל, נראה את שגיאת האוסף:

$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: שגיאה: התחלת ביטוי לא חוקית int int private = x + y; ^ 1 שגיאה

הסרת פְּרָטִי שינוי גישה פותר את הבעיה בקלות:

חבילה com.baeldung; מחלקה ציבורית AccessModifierInMethod {public public printSum (int x, int y) {int sum = x + y; System.out.println ("תוצאת חישוב:" + סכום); }}

4. שיטות מקוננות

חלק משפות התכנות, כגון פייתון, תומכות בשיטות מקוננות. אבל, Java אינה תומכת בשיטה בשיטה אחרת.

אנו נתקל בשגיאת המהדר "התחלה לא חוקית לא חוקית" אם ניצור שיטות מקוננות:

חבילה com.baeldung; מחלקה ציבורית NestedMethod {public public printSum (int x, int y) {System.out.println ("תוצאת חישוב:" + calcSum (x, y)); public int calcSum (int x, int y) {החזר x + y; }}} 

בואו נרכיב את קובץ המקור הנ"ל ונראה על מה מדווח מהדר Java:

$ javac NestedMethod.java NestedMethod.java:6: שגיאה: התחלת ביטוי לא חוקית public int calcSum (int x, int y) {^ NestedMethod.java:6: שגיאה: ';' צפוי ציבורי int calcSum (int x, int y) {^ NestedMethod.java:6: שגיאה: צפוי int intelful calcSum (int x, int y) {^ NestedMethod.java:6: שגיאה: לא הצהרה public int calcSum (int x, int y) {^ NestedMethod.java:6: error: ';' צפוי int calcSum ציבורי (int x, int y) {^ 5 שגיאות

מהדר Java מדווח על חמש שגיאות אוסף. במקרים מסוימים, שגיאה אחת עלולה לגרום לשגיאות נוספות מרובות בזמן הקומפילציה.

זיהוי הגורם הבסיסי חיוני כדי שנוכל לפתור את הבעיה. בדוגמה זו, שגיאת "התחלת הביטוי הלא חוקית הראשונה" היא הסיבה הבסיסית.

אנו יכולים לפתור את הבעיה במהירות על ידי העברת ה- calcSum () שיטה מתוך printSum () שיטה:

חבילה com.baeldung; מחלקה ציבורית NestedMethod {public public printSum (int x, int y) {System.out.println ("תוצאת חישוב:" + calcSum (x, y)); } public int calcSum (int x, int y) {return x + y; }} 

5. לְהַשְׁחִיר אוֹ חוּט ללא ציטוטים

אנחנו יודעים את זה חוּט מילוליות צריכות להיות עטופות במרכאות כפולות, בעוד לְהַשְׁחִיר יש לצטט ערכים באמצעות ציטוטים בודדים.

אם נשכח לצרף את הציטוטים הנכונים, מהדר Java יתייחס אליהם כשמות משתנים.

אנו עשויים לראות את השגיאה "לא מוצא סמל" אם לא מכריזים על "המשתנה".

למרות זאת, אם נשכח לצטט כפול א חוּט זה לא שם משתנה של Java תקף, מהדר Java ידווח על השגיאה "התחלה לא חוקית של ביטוי".

בואו נסתכל על זה באמצעות דוגמה:

חבילה com.baeldung; מחלקה ציבורית ForgetQuoting {public int calcSumOnly (int x, int y, String operation) {if (operation.equals (+)) {return x + y; } זרוק UnsupportedOperationException חדש ("הפעולה אינה נתמכת:" + הפעולה); }} 

שכחנו לצטט את חוּט+ בתוך השיחה אל שווים שיטה, ו + הוא כמובן לא שם משתנה תקף של Java.

עכשיו, בואו ננסה לחבר אותו:

$ javac ForgetQuoting.java ForgetQuoting.java:5: שגיאה: התחלת ביטוי לא חוקית אם (operation.equals (+)) {^ 1 שגיאה 

הפתרון לבעיה הוא פשוט - עטיפה חוּט מילוליות במרכאות כפולות:

חבילה com.baeldung; מחלקה ציבורית ForgetQuoting {public int calcSumOnly (int x, int y, String operation) {if (operation.equals ("+")) {return x + y; } זרוק UnsupportedOperationException חדש ("הפעולה אינה נתמכת:" + הפעולה); }} 

6. מסקנה

במאמר קצר זה דיברנו על חמישה תרחישים שונים שיעלו את שגיאת "התחלת הביטוי הבלתי חוקית".

לרוב, בעת פיתוח יישומי Java, נשתמש ב- IDE המזהיר אותנו כשזוהים שגיאות. תכונות IDE נחמדות אלה יכולות להגיע דרך ארוכה להגן עלינו מפני התמודדות עם שגיאה זו.

עם זאת, אנו עשויים עדיין להיתקל בשגיאה מעת לעת. לכן, הבנה טובה של השגיאה תעזור לנו לאתר ולתקן את השגיאה במהירות.