Я пытаюсь снова забрать Java, используя книгу Data Structures & Алгоритмы на Java, в стр. 191, книга реализует список ссылок. Сначала код создает класс ссылок, класс списка ссылок и клиентский класс linkapp.Область видимости локальной переменной Java
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();
}
}
Но я не понимаю, почему объект ссылки создается локально в методе insertFirst внутри класса linklist может быть доступен DisplayList метода. Локальные переменные исчезнут, когда метод завершится, потому что они всего лишь промежуточный результат. Итак, как метод displaylist все еще имел доступ к этим объектам ссылок?
Не могли бы вы подробнее уточнить? Как я смешал переменную, ее значение или объект и его ссылку? – GorillaInR
@GorillaInR: Ну, вы говорите, что локальные переменные «исчезают», но вы удивлены тем, что объект * ссылки *, созданный в 'insertFirst', будет доступен позже. Весьма просто, ссылка на этот объект была сохранена в переменной экземпляра. Просто потому, что локальная переменная выходит за пределы области видимости, не означает, что что-либо происходит с * объектом *, к которому относится его значение. –
более конкретно означает, что поскольку сначала это переменная экземпляра, а последний вставленный объект ссылки сохраняется первым, а второй последний вставленный объект ссылки сохраняется в следующем поле/ссылке первого, а третий последний вставленный объект ссылки сохраняется в первая ссылка следующей ссылки и т. д.? Таким образом, эти объекты ссылок доступны, потому что они хранятся в первых слоях следующих полей, а не потому, что newlink все еще существует? – GorillaInR