非静态方法不能被调用为静态

时间:2013-05-24 16:57:22

标签: java

好吧......所以我做了很多试验和错误...而且我似乎无法将我的usFormat方法称为我的主要方法,而且我认为我几乎搞砸了整个事情大声笑。 。 你能帮忙的话,我会很高兴。只是......请在初级阶段。

 class Date {
     String date;
     String day;
     String month;
     String year;
     StringTokenizer st;
     Scanner sc = new Scanner (System.in);


     //instance vars go here
     public Date (String date){
         while (sc.hasNextLine()) {
             st = new StringTokenizer (sc.nextLine());
             this.month =  st.nextToken();
             this.day   =  st.nextToken();
             this.year  =  st.nextToken();
        }

        } //end constructor

        public String usFormat () {
            return month + " " + day + "," + year;
        } //end usFormat
        public String euFormat () {
            return null;
        } //end euFormat

        public static void main (String[] args){
            Date usFormat = new Date (date);

        }
    } 

8 个答案:

答案 0 :(得分:2)

由于您从static method调用方法,因此您还需要将该方法(usFormat()euFormat())设为静态。

public static String ...

静态基本上意味着您不需要该类的实例。所以..你不需要一个实例来运行main但是你需要一个实例来调用usFormat()(因为它不是静态的)。那不行。因此错误。

如果您不想将这些方法设置为静态,请考虑将代码移出主类并转移到另一个类中。您可以使用main中的new创建此类的实例(这也适用于给定的类,如果您也需要(new Date()).usFormat())。

答案 1 :(得分:1)

通过将变量声明为与方法相同的名称,不要在对象上调用方法。这就是你如何调用方法(并输出它)。

Date d = new Date("a string");  // You don't seem to be using the argument anyways.
String formattedDate = d.usFormat();
System.out.println(formattedDate);

此外,您甚至不使用Date构造函数的参数。只需删除String date参数即可,您可以在调用构造函数时删除"a string"

答案 2 :(得分:0)

您定义了一个名为Date的实例类,因此您只需执行以下操作:

    public static void main (String[] args){
        Date usFormat = new Date (date);
        System.out.println(date.usFormat());
    }

无需对Date类的任何方法进行静态处理。

答案 3 :(得分:0)

另一种方法是在main方法中创建Date实例,例如myDate = new Date("");然后执行myDate.usFormat();

答案 4 :(得分:0)

要从static method调用非方法,您必须执行以下操作之一:

1)实例化定义非静态方法的类。

Date usFormat = new Date (date);
System.out.println(date.usFormat());

2)制作非静态方法static

public static .... 

我建议你使用第一个选项,因为第二个选项需要更多的重新分解。

答案 5 :(得分:0)

非静态方法也称为实例方法,即它们需要类的实例。 实例或对象是您使用关键字new创建的。例如,类就像汽车,物体就像你驾驶的特定汽车。

因此,要调用该方法,您必须执行以下操作:

  public static void main (String[] args){
    Date usFormat = new Date (date);
    String formattedDate = usFormat.euFormat();
  }

答案 6 :(得分:0)

在您的代码中,静态/非静态方法没有任何问题。只有一些拼写错误:

 class Date {
 String date;
 String day;
 String month;
 String year;

 Scanner sc = new Scanner (System.in);


 //instance vars go here
 public Date (String date){
         StringTokenizer st= new StringTokenizer (date, " ");
         this.month =  st.nextToken();
         this.day   =  st.nextToken();
         this.year  =  st.nextToken();

    } //end constructor
    public String usFormat() {
        return month + " " + day + "," + year;
    } //end usFormat
    public String euFormat() {
        return null;
    } //end euFormat
    public static void main (String[] args){
      Date usFormat = new Date ("20 10 2013");    
    }
} 

但是,关于你的问题,对于调用静态方法,你不需要该类的实例。

答案 7 :(得分:-2)

将日期定义为静态。 static String date;你不能从静态方法主

中引用非静态