Sila terangkan perkara berikut tentang ralat "simbol tidak ditemui", "tidak dapat menyelesaikan simbol" atau "simbol tidak ditemui" (dalam Java):
Soalan ini bertujuan untuk menyediakan Soal Jawab yang komprehensif tentang ralat kompilasi biasa di Jawa ini.
Jika anda terlupa
new
anda juga akan mendapat ralat ini:Perbandingan
Oleh kerana panggilan tanpa kata kunci
new
关键字的调用将尝试查找不带参数的名为String
akan cuba mencari kaedah (asli) bernamaString
yang tidak mengambil parameter - dan tandatangan kaedah itu mungkin tidak ditentukan. p>0. Adakah terdapat perbezaan antara ralat ini?
Tidak benar. "Simbol tidak ditemui", "Tidak dapat menyelesaikan simbol" dan "Simbol tidak ditemui" semuanya bermaksud perkara yang sama. (Penyusun Java yang berbeza ditulis oleh orang yang berbeza, dan orang yang berbeza menggunakan perkataan yang berbeza untuk mengatakan perkara yang sama.)
1. Apakah maksud ralat "simbol tidak ditemui"?
Pertama sekali, ini adalahralat penyusunan1. Ini bermaknaterdapat masalah dalam kod sumber Java anda,atauterdapat masalah dengan cara anda menyusunnya.
Kod sumber Java anda mengandungi perkara berikut:
class
、while
dll.true
、false
、42
、'X'
和“嗨妈妈!”
.+
、=
、{
Reader
、i
、toString
、processEquibalancedElephants
Mungkin nama anda dieja dengan betul; Java tidak boleh dan tidak cuba untuk mengimbangi kesilapan ejaan atau kesilapan tipografi.
- Mungkin anda menggunakan garis bawah dengan salah; iaitu
- Mungkin anda cuba menggunakan sesuatu yang diisytiharkan "di tempat lain"; iaitu dalam konteks yang berbeza daripada yang anda secara tersirat memberitahu pengkompil untuk melihat. (Kelas berbeza? Skop berbeza? Pakej berbeza? Pangkalan kod berbeza?)
Untuk pengecam yang harus merujuk pembolehubah:StringBiulder
而不是StringBuilder
Mungkin anda salah faham; Semua pengecam Java adalah sensitif huruf besar-besaran.stringBuilder
而不是StringBuilder
berbeza. (Jika anda berpegang kepada peraturan gaya Java, anda akan mengelakkan kesilapan ini...)mystring
和my_string
Mungkin anda terlupa untuk mengisytiharkan pembolehubah.
Mungkin pengisytiharan pembolehubah telah di luar skop apabila anda cuba menggunakannya. (lihat contoh di bawah)
Untuk pengecam yang sepatutnya merupakan kaedah atau nama medan:.
"rope".push()
Mungkin anda cuba menggunakan kaedah sebagai medan atau sebaliknya
"rope".length
或someArray.length()
.Mungkin anda tersilap memanipulasi tatasusunan dan bukannya elemen tatasusunan sebagai contoh
Untuk pengecam yang sepatutnya nama kelas:
Mungkin anda terlupa mengimport kelas.
Mungkin anda menggunakan import "asterisk" tetapi kelas tidak ditentukan dalam mana-mana pakej yang anda import.
Mungkin anda terlupa satu
new
seperti ini:Mungkin anda cuba mengimport atau sebaliknya menggunakan kelas yang telah diisytiharkan dalam pakej lalai iaitu di mana kelas tanpa pernyataan
package
berada.Petua: Buka bungkusan. Anda hanya perlu menggunakan pakej lalai untuk aplikasi mudah yang terdiri daripada satu kelas...atau sekurang-kurangnya satu fail sumber Java.
Untuk kes di mana jenis atau kejadian nampaknya tidak mempunyai ahli (seperti kaedah atau medan) yang anda harapkan ada:
java.awt.List
而不是java.util.List
.
java.io.*
,然后尝试使用Files
类...它位于java.nio代码>而不是
java.io
。或者,也许您打算编写File
...,它是java.io
Contoh berikut menggambarkan cara skop pembolehubah yang salah boleh membawa kepada ralat "simbol tidak ditemui":