Java Compiler Error: memulai ekspresi secara ilegal

1. Ikhtisar

"Permulaan ekspresi ilegal" adalah kesalahan umum yang mungkin kita hadapi pada waktu kompilasi.

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

2. Kawat Gigi Keriting yang Hilang

Tanda kurung kurawal yang hilang dapat menyebabkan kesalahan "permulaan ekspresi ilegal". 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; } }

Jika kita mengkompilasi 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) { ..... 

Hilangnya kurung kurawal tutup printSum () adalah akar penyebab masalah.

Perbaikan untuk masalah ini sederhana - menambahkan kurung kurawal tutup ke metode 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 maju ke bagian selanjutnya, mari kita tinjau kesalahan kompilator.

Kompilator melaporkan bahwa baris ke-7 menyebabkan kesalahan "permulaan ekspresi ilegal". Faktanya, kita tahu bahwa akar penyebab masalahnya ada di baris ke-6. Dari contoh ini, kita belajar bahwa terkadang kesalahan kompilator tidak mengarah ke baris dengan penyebab utama , dan kita perlu memperbaiki sintaks di baris sebelumnya.

3. Mengakses Metode Di Dalam Pengubah

Di Java, kita hanya bisa mendeklarasikan variabel lokal di dalam metode atau konstruktor . Kami tidak dapat menggunakan pengubah akses apa pun untuk variabel lokal di dalam metode karena aksesibilitasnya ditentukan oleh cakupan metode.

Jika kita melanggar aturan dan memiliki pengubah akses di dalam sebuah metode, kesalahan "permulaan ekspresi ilegal" akan dimunculkan.

Mari kita lihat ini beraksi:

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

Jika kita mencoba mengkompilasi kode di atas, kita akan melihat kesalahan kompilasi:

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

Menghapus pengubah akses pribadi 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. Metode Bersarang

Beberapa bahasa pemrograman, seperti Python, mendukung metode bersarang. Namun, Java tidak mendukung metode di dalam metode lain.

Kita akan menghadapi kesalahan kompiler "permulaan ekspresi ilegal" jika kita membuat metode 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 kompilasi file sumber di atas dan lihat apa yang dilaporkan oleh compiler 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

Kompilator Java melaporkan lima kesalahan kompilasi. Dalam beberapa kasus, satu kesalahan dapat menyebabkan beberapa kesalahan lebih lanjut selama waktu kompilasi.

Mengidentifikasi akar penyebab sangat penting bagi kami untuk dapat menyelesaikan masalah. Dalam contoh ini, kesalahan "permulaan ekspresi ilegal" pertama adalah akar penyebabnya.

Kami dapat dengan cepat menyelesaikan masalah dengan memindahkan metode calcSum () dari metode 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 Kutipan

Kita tahu bahwa string literal harus dibungkus dengan tanda kutip ganda, sedangkan nilai char harus dikutip menggunakan tanda kutip tunggal.

Jika kita lupa untuk menyertakan ini dalam tanda kutip yang tepat, compiler Java akan memperlakukannya sebagai nama variabel .

Kita mungkin melihat kesalahan "tidak dapat menemukan simbol" jika "variabel" tidak dideklarasikan.

Namun, jika kita lupa untuk mengutip ganda String yang bukan nama variabel Java yang valid, compiler Java akan melaporkan kesalahan "mulai ekspresi tidak sah" .

Let's have a look at it through an example:

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

We forgot to quote the String+ inside the call to the equals method, and + is obviously not a valid Java variable name.

Now, let's try compiling it:

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

The solution to the problem is simple — wrapping String literals in double-quotes:

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. Conclusion

In this short article, we talked about five different scenarios that will raise the “illegal start of expression” error.

Most of the time, when developing Java applications, we'll use an IDE that warns us as errors are detected. Those nice IDE features can go a long way towards protecting us from facing this error.

Namun, kami mungkin masih menjumpai kesalahan tersebut dari waktu ke waktu. Oleh karena itu, pemahaman yang baik tentang kesalahan akan membantu kami menemukan dan memperbaiki kesalahan dengan cepat.