Java 无法从静态上下文引用非静态方法next()

Java 无法从静态上下文引用非静态方法next(),java,static,scope,non-static,Java,Static,Scope,Non Static,我试图将mm/dd/yyyy格式的日期解析为单独的字段,但在尝试编译时,我遇到以下错误: 无法从静态上下文引用非静态方法next() 是什么导致了错误 import java.util.Scanner; public class Problem39 { public static void main(String [ ] args) { boolean isLeapYear =false; int maxDay=0; String stringDat

我试图将
mm/dd/yyyy
格式的日期解析为单独的字段,但在尝试编译时,我遇到以下错误:

无法从静态上下文引用非静态方法next()

是什么导致了错误

import java.util.Scanner;

public class Problem39
{

    public static void main(String [ ] args)
    {

    boolean isLeapYear =false;
    int maxDay=0;
    String stringDate;

    System.out.println("Enter the date in mm/dd/yyyy format. ");  //user input
    Scanner keyboard = new Scanner(System.in);                    //read input
    String date=Scanner.next();                                //store input
    String temp=date.split("/");  //parse date
    int month=IntegerParseInt(temp[1]);
    int day=IntegerParseInt(temp[0]);
    int year=IntegerParseInt(temp[2]);
更改:

String date = Scanner.next();  
致:

是实例方法,因此必须在类Scanner的实例上调用它

此外,改变:

String temp = date.split("/"); 
致:


该方法返回一个字符串数组。

它应该是
keyboard.next()
而不是
Scanner.next()
您的意思是

String date = keyboard.next();
而不是

String date = Scanner.next();
更改代码:

String date=Scanner.next();
致:

它不是
integerparsent

也换成这个

String date = keyboard.next();

这可能是因为
next()
是一个
Scanner
实例方法,您没有在Scanner实例上调用它。解析也不正确。@Petro,为什么OP的混乱值得否决?这不就是为什么会存在这样的问题吗?为了澄清这些常见的困惑,还将
IntegerParseInt
更改为
Integer.parseInt
@kaveman,只是静态/实例方法之间的差异是非常基本的java知识。关于stackoverflow还有三个问题“为什么不能从静态上下文引用非静态方法”已经回答了。这是唯一一个真正解释答案的答案!现在它正在抱怨下一行字符串temp=date.split(“/”)上的不兼容类型//欢迎你,伊恩。你不应该直截了当地说(写)谢谢,但要把答案(答案下面的Δ)投上去,然后接受最好的答案(用√). 这给了回答者声誉,避免了冗长的对话(“谢谢”/“不客气”/…)。
String date=Scanner.next();
String date = keyboard.next();
String date = keyboard.next();