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

时间:2013-01-12 06:39:16

标签: java variables methods

我正在学习java编程 当我浏览课程示例时,我看到下面的代码

Scanner input = new Scanner (System.in)

我知道它声明了一个Scanner变量输入,但是我想知道为什么我应该声明这样的变量但是不能通过直接调用Scanner类中的方法来使用这个函数?

4 个答案:

答案 0 :(得分:4)

您应该将Scanner声明为变量,因为Scanner类不是静态的。

让我们分解作业:

  1. 首先,您有Scanner input。这表示名称input的变量将被分配为Scanner
  2. 然后,您有new Scanner,告诉Java您正在创建一个Object类型Scanner,以存储在字段input中。
  3. 然后,您正在调用扫描类的构造函数。更具体地说,您使用值System.in调用它。
  4. 这是关键的第三步。由于您是新手,如果您不理解static修饰符,我会在尝试处理之前查看它。

    您的新扫描程序在其构造函数中有一个参数:InputStreamInputStream是例如键盘的接口。以下是您无法拨打Scanner.next()的原因:如果您想要两个不同的输入流怎么办?

    通过创建变量input,您可以在该变量中存储特定于System.in 的Scanner 。如果你有一个文件,你可能想要另一个Scanner用于它的InputStream(尽管文件并没有真正读取过这种方式,你明白了。)

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

答案 1 :(得分:2)

  

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

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

答案 2 :(得分:1)

看看声明 -     扫描仪输入=新扫描仪(System.in);

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

现在回答你的问题 -

  

为什么我应该声明这样的变量,但不要使用此函数   直接在类Scanner中调用方法?

因为在Scanner类中没有这样的方法可以返回一个扫描仪类型变量,并使用新创建的变量input进行分配。更多的是调用类中的函数而不创建类的对象,该方法应该是`static。

答案 3 :(得分:0)

您需要阅读更多关于OOP的信息。但基本上你要求的是能够直接调用类的方法,被称为类的静态方法。它们不受任何特定实例的约束。静态方法不了解任何实例特定数据。在这种情况下,InputStream传入构造函数。

由于我不知道你指的是什么特定的Scanner类,我认为编写该类的人认为访问InputStream作为函数的数据成员是有用的。因此它就是这样设计的。

一般来说,在OOP中,这就是设计的方式。对象通过数据进行实例化,并在对象上调用函数。静态方法的使用可以说在某种程度上打破了OOP架构。

我希望能在某种程度上澄清一切。