调用set方法而不调用构造函数

时间:2014-05-02 03:38:25

标签: java data-structures constructor linked-list

我正在尝试创建一个链接列表。这是我的代码。

public class Node{
    private String element;
    private Node next;
    public Node(String element,Node next){
        this.element=element;
        this.next=next;
    }
    public Node(String element){
        this(element,null);
    }
    public void setElement(String newElem){
        element=newElem;
    }
    public void setNext(Node newNext){
        next=newNext;
    }
    public String getElement(){
        return element;
    }
    public Node getNext(){
        return next;
    }
}


public class SLinkedList{
    protected Node head;
    protected long size;
    public SLinkedList(){
        head=null;
        size=0; 
    }
    public void addElem(String e){
        v=new Node(e,head);
        v.setElement(e);
        v.setNext(head);
        head=v;
        size++;
        System.out.println(v.getElement());
    }
    public static void main (String args[]){
        SLinkedList l=new SLinkedList();
        l.addElem("Element");
        //System.out.println(l.getElement());
    }

}  

我的问题是我何时设置

 public void addElem(String e){
            v=new Node(e,head);
            v.setElement(e);
            v.setNext(head);
            head=v; 

它会出错。但是如果我将addItem更改为

public void addElem(String e){
        Node v=new Node(e,head);
        head=v;
        size++;
        System.out.println(v.getElement());
    }  

这很好。我需要通过构造函数调用吗?设置方法的重点是什么?
还有一种方法可以打印出其他元素,其中包含System.out.println(v.getElement());内的addElem()

2 个答案:

答案 0 :(得分:1)

  1. 您的问题是您没有声明第一个代码中v的含义,而在第二个代码中您明确声明了它。

    v=new Node(e,head);
    

    由于您之前未定义v,因此JVM不知道v是什么

    Node v=new Node(e,head);
    

    这告诉JVM v的类型为Node

  2. 构造函数的关键在于您可以一次性设置所有变量,而不是使用多个setter方法。您可以随时使用单独的setter方法,只要它们是公开的

  3. 您设置代码的方式,您将始终致电getElement()打印该值。

答案 1 :(得分:1)

 public void addElem(String e){
        v=new Node(e,head);
        v.setElement(e);
        v.setNext(head);
        head=v; 

在上面的代码中,v是未定义的..那么它如何编译。