在java中创建变量或调用方法

在java中创建变量或调用方法,java,variables,methods,Java,Variables,Methods,我正在学习java编程。 当我浏览这些类示例时,我看到了下面的代码 Scanner input = new Scanner (System.in) 我知道它声明了一个Scanner变量输入,但我想知道为什么我应该声明这样的变量,而不是通过直接调用Scanner类中的方法来使用这个函数 为什么我应该声明这样的变量,而不是通过直接调用类Scanner中的方法来使用这个函数 只能像您建议的那样调用static方法。大多数值得一提的Scanner方法不是static 您应该将扫描仪声明为变量,因为扫描

我正在学习java编程。
当我浏览这些类示例时,我看到了下面的代码

Scanner input = new Scanner (System.in)
我知道它声明了一个Scanner变量输入,但我想知道为什么我应该声明这样的变量,而不是通过直接调用Scanner类中的方法来使用这个函数

为什么我应该声明这样的变量,而不是通过直接调用类Scanner中的方法来使用这个函数


只能像您建议的那样调用
static
方法。大多数值得一提的
Scanner
方法不是
static

您应该将
扫描仪
声明为变量,因为
扫描仪
类不是静态的

让我们把作业分解一下:

  • 首先,您有
    扫描仪输入
    。这表示名称为
    input
    的变量将被分配为
    扫描器
  • 然后,您有了
    newscanner
    ,它告诉Java您正在创建一个类型为
    Scanner
    的新
    对象
    ,以存储在字段
    input
  • 然后,调用scanner类的构造函数。更具体地说,您使用值调用它:
    System.in
    这是关键的第三步。由于您是新手,如果您不理解
    static
    修饰符,我将在尝试处理此问题之前查找该修饰符

    新扫描仪的构造函数中有一个参数:
    InputStream
    InputStream
    是例如键盘的接口。下面是您无法调用Scanner.next()的原因:如果您想要两个不同的输入流,该怎么办

    通过创建变量
    输入
    ,您将特定于System.in的
    扫描仪
    存储在该变量中。如果你有一个文件,你可能需要另一个扫描器来扫描它的输入流(虽然文件不是这样读取的,但是你明白了。)


    如果扫描器的功能是静态的,您将只能有一个扫描器。这意味着通过扫描器将用户限制为只有一个输入流。

    您需要进一步了解OOP。但本质上,关于能够直接调用一个类的方法,我们所问的是类的静态方法。它们不受任何特定实例的约束。静态方法不知道任何特定于实例的数据。在本例中,InputStream传递给构造函数

    由于我不知道您所指的是哪一个特定的Scanner类,我假设编写该类的人员认为,作为函数的数据成员访问InputStream非常有用。因此它就是这样设计的

    一般来说,在OOP中,这就是事物的设计方式。使用数据实例化对象,并对对象调用函数。静态方法的使用在一定程度上打破了OOP架构

    我希望这能澄清一些问题。

    看看这句话- 扫描仪输入=新扫描仪(System.in)

    我们可以把它分成两部分-
    (1)创建一个名为
    input
    的引用,用于保存赋值左侧的
    Scanner
    类型的任何变量。
    (2)类型为
    Scanner
    的对象在赋值的右侧实例化。最后,
    Scanner
    类型的实例/对象被分配新创建的变量

    现在来回答你的问题-

    为什么我应该声明这样的变量,而不是通过 直接调用类扫描程序中的方法


    因为在
    Scanner
    类中,没有这样的方法返回一个Scanner类型变量,该变量被分配给新创建的变量
    input
    。更多关于在类内调用函数而不创建类的对象,方法应该是“静态的”。

    我对第一步的措辞感到不舒服,因为它没有创建扫描程序。啊,哎呀。我的错误,修正了。