Java局部对象变量的作用域

标签 java scope

我正在尝试使用《Java 中的数据结构和算法》一书再次学习 Java,在第 191 页中,该书实现了链接列表。代码首先构建了一个链接类、一个链接列表类和一个客户端类linkapp。

public class Link {
    public int data;
    public link next;

    public Link (int newdata){
        data=newdata;
    }   
}
public class Linklist {
    public Link first;

    public void insertFirst(int data){
        Link  newlink=new Link  (data);
        newlink.next=first;
        first=newlink;
    }

    public boolean isEmpty(){   return (first==null); }

    public void displaylist(){
        if (!isEmpty()){
            Link current=first;
            while(current!=null){
                System.out.print(current.data);
                current=current.next;}
        }
    }
}
public class LinklistApp {
    public static void main(String[] args) {
        Linkedlist linkList = new Linkedlist();
        linkList.insertFirst(3);
        linkList.insertFirst(4);
        linkList.insertFirst(5);
        linkList.displaylist();
    }
}

但是我不明白为什么在linklist类中的insertFirst方法中本地创建的链接对象可以通过displaylist方法访问。当方法退出时,局部变量将消失,因为它们只是中间结果。那么 displaylist 方法如何仍然可以访问这些链接对象呢?

最佳答案

insertFirst 中的 newlink 变量的值被复制到此处的 instance 变量中:

first=newlink;

然后在 displayLink 中,first 的值被复制回局部变量:

link current=first;

区分变量及其值以及引用和对象很重要。所有这些link变量的值仅供引用。

(顺便说一句,这个例子是直接从书本中取出来的吗?如果是这样,我担心使用非常规名称,例如 link 而不是 Link一个类,并使用 newlink 而不是 newLink 作为变量。)

关于Java局部对象变量的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292043/

相关文章:

java - 在字符串数组中查找大写字母并将其提取出来

java - 对于 java 版本 1.8,我应该使用哪个版本的 tomcat/java docker?

javascript - 如何从 React .Map 函数内部更改状态

PHP:当前函数是否在对象内部运行?

C++ "was not declared in this scope"编译错误

Java 和 JavaScript WebSocket

java - 从 java.util.Date 转换为 java.sql.Date

java - 如何删除 JScrollPane 内 JTable 顶部的 A?

java - block 中 Java 变量的作用域是什么?

JavaScript 变量作用域/提升问题