[英]Linked list cannot be resolved
所以首先我是這方面的新手,所以如果我犯了一些正式的錯誤,請不要太辛苦。
所以我想學習一些關於 Java 中鏈表的知識。 我現在在 main 方法中創建了一個鏈接列表,它稱為“liste”和一個稱為“addToList”的方法,它應該向我的列表中添加一個字符串。
import java.util.LinkedList;
public class LinkedLists{
public static void main(String[] args) {
LinkedList<String> liste = new LinkedList<String>();
addToList("Mario");
}
public static void addToList(String pElement) {
liste.add(pElement);
}
}
當我在 main 方法中添加一個元素並將其打印出來時,它工作正常,但是當我這樣做時,我得到了這個錯誤:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
liste cannot be resolved
at LinkedLists.addToList(LinkedLists.java:11)
at LinkedLists.main(LinkedLists.java:7)
您正在使用的變量liste
在功能addToList
。 但是該變量是在main
函數中定義的,在addToList
不可用。
讓我們來看看錯誤消息
線程“main”中的異常 java.lang.Error: 未解決的編譯問題:
所以編譯不起作用,因為
liste 無法解析
編譯器不知道符號liste
。 它無法解析其含義。
在 LinkedLists.addToList(LinkedLists.java:11)
最上面的條目向您顯示編譯器在何處遇到此問題。 在本例中,它是文件LinkedLIsts.java
中第 11 行的addToList
函數。
如果您想與addToList
共享liste
,您可以將其作為參數傳遞:
public class LinkedLists{
public static void main(String[] args) {
LinkedList<String> liste = new LinkedList<String>();
addToList(liste, "Mario");
}
public static void addToList(LinkedList<String> liste. String pElement) {
liste.add(pElement);
}
}
或者你把它從main
移到LinkedLists
的范圍內:
public class LinkedLists{
static LinkedList<String> liste = new LinkedList<String>();
public static void main(String[] args) {
addToList("Mario");
}
public static void addToList(String pElement) {
liste.add(pElement);
}
}
問題是liste
變量的可見性。
在方法內部定義變量時,它僅在方法內部可見。
要使變量在整個類中可見,必須將其定義為屬性。
編輯我
但是你能解釋一下你到底做了什么嗎? 我不明白為什么有兩個列表
直接從main()
調用方法或屬性時,為什么會出現與靜態方法和調用相關的問題?
由於聲明表明public
static void main(String args[])
是一個static
方法(順便說一下,它是 java 程序的執行起點)。
靜態方法和屬性對於類的所有實例都是通用的,即使沒有該類的實例化對象也存在。
非靜態屬性和方法對於每個實例化對象都是本地的(不同對象的屬性可以采用不同的值),因此它們依賴於已實例化的對象。
當像main()
這樣的靜態方法運行時,不能保證非靜態屬性會存在,即使它們存在於一個或多個對象中,也無法針對特定實例,因此您不能調用非靜態方法或在靜態方法中使用非靜態屬性。
但是程序以一個靜態方法開始: main()
。 所以你要做的是在 main() 中創建運行程序所需的實例,並在這些創建的對象上調用必要的非靜態方法和屬性。 您可以將main()
視為對象可以執行其操作的地方。
在這個例子中,類 LinkedList s包含開始執行的 main 方法,以及實現 LinkedList s對象邏輯的方法和屬性(當這個類從包含main()
的不同類中使用時,這變得更加清晰main()
方法)。
因此,在靜態方法main()
,我們創建的LinkedList的類的實例,上,我們可以調用非靜態方法。 當一個對象被實例化時(使用new LinkedLists()
),這個新對象有它自己的liste
屬性副本,可以通過調用這個對象上的非靜態方法來操作。
在這種情況下,我們只用一個LindedList對象s的工作,但是,可能我們可以有類的多個實例,每一個與它自己的靠山liste
屬性,並根據我們的需要在一個或其他操作。
public class LinkedLists{
private LinkedList<String> liste = new LinkedList<String>();
public static void main(String[] args) {
LinkedLists linkedListsInstance= new LinkedLists();
linkedListsInstance.addToList("Mario");
linkedListsInstance.printList();
}
public void addToList(String pElement) {
liste.add(pElement);
}
public void printList(){
System.out.println(liste);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.