【问题标题】:When instantiating a method that returns a variable...?实例化返回变量的方法时...?
【发布时间】:2014-05-28 07:29:30
【问题描述】:

基本上,我想确保我做对了。我在另一个类中调用这些方法。这些方法指定返回一个变量,所以在实例化它们时,我应该将 null 放在括号中吗?我只是想确保我做对了。

public class IntSLList {
protected static IntSLLNode head, tail;
public  void createInst(){
    new IntSLList().isEmpty();
    new IntSLList().addToHead(null);
    new IntSLList().addToTail(null,null);
    new IntSLList().deleteFromTail();
    new IntSLList().printAll();
    new IntSLList().isInList(null);
    new IntSLList().delete(null);

}



public IntSLList() {
    //code
}
public static boolean isEmpty() {
    //code    }
public static void addToHead(String AN) {
    //code
}
public static void addToTail(String AN, Double AB) {
    //code
}
public static String deleteFromHead() { // delete the head and return its info; 
    //code
}
public static String deleteFromTail() { // delete the tail and return its info;
    //code

}
public static void printAll() {
    //code    
}
public static boolean isInList(String AN) {
   //code
}
public static void delete(String AN){ 
//code
}}

提前谢谢大家!

【问题讨论】:

  • createInst() 应该做什么?
  • 您确定希望您的字段和方法是静态的吗?此外,head 和 tail 的默认值为 null。
  • 我不明白你想要达到什么目的。你在这里有一个构造函数。其余的都是方法。它们是静态方法,因此应该在类上调用它们:例如IntSLList.isEmpty()。你作为参数传递的就是你想要作为参数传递的东西。如果你想传递null,你传递null。如果你想传递别的东西,你就传递别的东西。
  • 您不“实例化”方法,而是调用它们。为什么要将 null 作为参数传递,除非它需要一个(任何类型的)对象作为参数,而你没有要传递的东西?
  • @UberPwnd:这不是一个静态方法的好理由。 Java 程序总是从运行 main 方法开始,该方法是静态的。根据您的推理,每个类的每个方法都是静态的,因为它是从静态的 main 调用的。您确实需要阅读有关对象、方法和构造函数的 Java 教程。

标签: java variables methods instantiation


【解决方案1】:

您根本不需要实例化方法,当您的列表被实例化时,它们已经“准备好使用”了。

您要做的是从方法中删除 static 关键字:这意味着方法是为整个类定义的“全局”,而不仅仅是一个特定列表。

更新:这是我想应该的列表类

import java.util.ArrayList;

public class IntSLList {
  protected int head,tail;
  //I'll use this as examplelist, so I can omit the list implementation
  private ArrayList<Integer> dataList;

  public IntSLList(){
    //Do initalization
    dataList = new ArrayList<>();
  }

  public void addToHead(int node){
    dataList.add(0, node);
  }

  public void addToTail(int node){
    dataList.add(node);
  }

  public boolean isEmpty(){
    return dataList.isEmpty();
  }

  // ... snip other list methods here ...

}

您可以像这样使用/访问它:

public class ListMain {

public static void main(String[] args){
  IntSLList myList = new IntSLList();

  myList.addToHead(1);
  myList.addToTail(2);
  System.out.println("myList.isEmpty() = " + myList.isEmpty());
}

}

【讨论】:

  • 我不能在它们不是我的其他类的非静态时调用它们,因为它是静态的......如果我试图从 public static void main(String[ ] args) 它不会运行。否则我会让我的第一堂课变成非静态的,它会在一开始让我省去很多麻烦......
  • headtail 这两个字段当然也需要是非静态的。您的静态 main() 可以保持这种状态,如果您在 main 中使用上述代码,它应该可以按预期工作
  • @tannereil 我知道你来自哪里,但是我在单独的主类中遇到了问题,我将这些方法称为非静态方法,我必须使用解决方法。调用这些时,我必须将它们设置为静态才能访问它们。 ://
  • 我更新了我的答案,以制作一个更复杂的示例,供您复制/适应您的代码
  • 我想通了!!! :D 愚蠢的我没有在我的银行类中这样做: IntSLList list= new IntSLList();然后用 list.method(); 调用我的函数;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
相关资源
最近更新 更多