Ralat Penyusun Java: permulaan ungkapan yang tidak sah

1. Gambaran keseluruhan

"Permulaan ungkapan haram" adalah kesalahan biasa yang mungkin kita hadapi pada waktu penyusunan.

Dalam tutorial ini, kita akan melihat contoh yang menggambarkan penyebab utama ralat ini dan cara memperbaikinya.

2. Pendakap Kerinting Hilang

Pendakap keriting yang hilang boleh menyebabkan kesalahan "permulaan ungkapan tidak sah". Mari kita lihat contohnya terlebih dahulu:

package com.baeldung; public class MissingCurlyBraces { public void printSum(int x, int y) { System.out.println("Calculation Result:" + calcSum(x, y)); public int calcSum(int x, int y) { return x + y; } }

Sekiranya kita menyusun kelas di atas:

$ javac MissingCurlyBraces.java MissingCurlyBraces.java:7: error: illegal start of expression public int calcSum(int x, int y) { ^ MissingCurlyBraces.java:7: error: ';' expected public int calcSum(int x, int y) { ..... 

Kehilangan pendakap kerinting printSum () adalah punca masalah.

Penyelesaian untuk masalahnya mudah - menambahkan pendakap kerinting penutup ke kaedah printSum () :

package com.baeldung; public class MissingCurlyBraces { public void printSum(int x, int y) { System.out.println("Calculation Result:" + calcSum(x, y)); } public int calcSum(int x, int y) { return x + y; } }

Sebelum kita melangkah ke bahagian seterusnya, mari kita tinjau ralat penyusun.

Penyusun melaporkan bahawa baris ke-7 menyebabkan kesalahan "permulaan ungkapan haram". Sebenarnya, kita tahu bahawa punca masalah adalah pada baris ke-6. Dari contoh ini, kita mengetahui bahawa kadang-kadang kesalahan penyusun tidak menunjuk pada garis dengan punca , dan kita perlu memperbaiki sintaks pada baris sebelumnya.

3. Kaedah Dalam Pengubah Akses

Di Jawa, kita hanya dapat mendeklarasikan pemboleh ubah tempatan di dalam suatu kaedah atau konstruktor . Kami tidak dapat menggunakan pengubah akses apa pun untuk pemboleh ubah tempatan di dalam suatu kaedah kerana aksesibilitasnya ditentukan oleh skop kaedah.

Sekiranya kita melanggar peraturan dan mempunyai pengubah akses di dalam suatu kaedah, kesalahan "permulaan ungkapan tidak sah" akan dibangkitkan.

Mari lihat ini dalam tindakan:

package com.baeldung; public class AccessModifierInMethod { public void printSum(int x, int y) { private int sum = x + y; System.out.println("Calculation Result:" + sum); } }

Sekiranya kita cuba menyusun kod di atas, kita akan melihat ralat penyusunan:

$ javac AccessModifierInMethod.java AccessModifierInMethod.java:5: error: illegal start of expression private int sum = x + y; ^ 1 error

Mengeluarkan pengubah akses peribadi dengan mudah menyelesaikan masalah:

package com.baeldung; public class AccessModifierInMethod { public void printSum(int x, int y) { int sum = x + y; System.out.println("Calculation Result:" + sum); } }

4. Kaedah Bersarang

Beberapa bahasa pengaturcaraan, seperti Python, menyokong kaedah bersarang. Tetapi, Java tidak menyokong kaedah dalam kaedah lain.

Kami akan menghadapi ralat penyusun "permulaan ungkapan tidak sah" jika kami membuat kaedah bersarang:

package com.baeldung; public class NestedMethod { public void printSum(int x, int y) { System.out.println("Calculation Result:" + calcSum(x, y)); public int calcSum ( int x, int y) { return x + y; } } } 

Mari kita susun fail sumber di atas dan lihat apa yang dilaporkan oleh penyusun Java:

$ javac NestedMethod.java NestedMethod.java:6: error: illegal start of expression public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: ';' expected public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error:  expected public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: not a statement public int calcSum ( int x, int y) { ^ NestedMethod.java:6: error: ';' expected public int calcSum ( int x, int y) { ^ 5 errors

Penyusun Java melaporkan lima kesalahan kompilasi. Dalam beberapa kes, satu kesalahan boleh menyebabkan banyak lagi kesalahan semasa masa penyusunan.

Mengenal pasti punca penting bagi kita untuk menyelesaikan masalah. Dalam contoh ini, ralat "permulaan ungkapan tidak sah" yang pertama adalah punca.

Kami dapat menyelesaikan masalah dengan cepat dengan memindahkan kaedah calcSum () dari kaedah printSum () :

package com.baeldung; public class NestedMethod { public void printSum(int x, int y) { System.out.println("Calculation Result:" + calcSum(x, y)); } public int calcSum ( int x, int y) { return x + y; } } 

5. char atau String Tanpa Petikan

Kita tahu bahawa literal String harus dibungkus dalam tanda petik ganda, sementara nilai char harus disebutkan menggunakan tanda petik tunggal.

Sekiranya kita lupa memasukkannya dalam tanda kutip yang betul, penyusun Java akan menganggapnya sebagai nama berubah-ubah .

Kita mungkin melihat ralat "tidak dapat mencari simbol" jika "pemboleh ubah" tidak dinyatakan.

Namun, jika kita lupa mengutip dua kali String yang bukan nama pemboleh ubah Java yang sah, penyusun Java akan melaporkan kesalahan "permulaan ungkapan haram" .

Mari kita lihat melalui contoh:

package com.baeldung; public class ForgetQuoting { public int calcSumOnly(int x, int y, String operation) { if (operation.equals(+)) { return x + y; } throw new UnsupportedOperationException("operation is not supported:" + operation); } } 

Kami lupa mengutip String + di dalam kaedah panggilan ke kaedah yang sama , dan + jelas bukan nama pemboleh ubah Java yang sah.

Sekarang, mari cuba menyusunnya:

$ javac ForgetQuoting.java ForgetQuoting.java:5: error: illegal start of expression if (operation.equals(+)) { ^ 1 error 

Penyelesaian untuk masalahnya adalah mudah - membungkus literal String dalam petikan ganda:

package com.baeldung; public class ForgetQuoting { public int calcSumOnly(int x, int y, String operation) { if (operation.equals("+")) { return x + y; } throw new UnsupportedOperationException("operation is not supported:" + operation); } } 

6. Kesimpulannya

Dalam artikel pendek ini, kami membincangkan lima senario yang berbeza yang akan menimbulkan kesalahan "permulaan ungkapan haram".

Sebagian besar waktu, ketika mengembangkan aplikasi Java, kami akan menggunakan IDE yang memperingatkan kami sebagai kesalahan yang terdeteksi. Ciri-ciri IDE yang bagus itu dapat membantu melindungi kita daripada menghadapi ralat ini.

Walau bagaimanapun, kami mungkin masih menghadapi kesilapan dari semasa ke semasa. Oleh itu, pemahaman ralat yang baik akan membantu kita mencari dan memperbaiki kesalahan dengan cepat.