【问题标题】:Explanation of 'String args[]' and static in 'public static void main(String[] args)' [duplicate]'public static void main(String [] args)'中的'String args []'和static的解释[重复]
【发布时间】:2012-08-10 18:35:08
【问题描述】:

你怎么能很好地向一个初学者解释String args[]的含义和static在下面的摘录中的用法?

class FirstApp {
    public static void main(String[] args) {
        ...
    }
}

【问题讨论】:

  • 你想解释多少,他们是多少初学者?当我第一次开始使用 Java 时,我的教授只是说“就是这样”,直到我们开始创建自己的函数。之后,他解释了 String args[] 的用途。
  • 应该是String[] args,而不是String args[],否则你的初学者将永远对数组语法感到困惑。
  • @Eng.Fouad 这个问题没有解决static。此外,这与使用 args 作为输入参数无关。
  • @JoelWestberg:两者都可以接受,尽管约定将其放在类型周围,而不是变量周围。再说一次,可变参数可以作为 main 的签名...
  • @Makoto,我知道。但从教授 Java 入门课程的经验来看,最小意外原则应该将 [] 作为类型的一部分,而不是变量的名称。

标签: java main


【解决方案1】:

为了保持初学者的态度,你可以解释一下,所有的命令行都被自动分割成一个字符串数组(String[])。

对于static,你必须解释一下,它不像另一个字段:它在 JVM 中是独一无二的,即使你有上千个类实例

所以main 是静态的,因为它是在jar 中找到它(链接在自己的类中)的唯一方法。

看完编码之后,你的工作就开始了。

【讨论】:

  • 没错,...但它是给初学者的。你使用主类的多个加载器吗?我不猜测 Pattern 或实用程序。
【解决方案2】:
public static void main(string [] args)

public - 它的访问说明符意味着我们可以从任何地方访问它; static -access 修饰符意味着我们可以直接使用类名调用此方法,而无需创建它的对象; void- 它的返回类型; main- 方法名 string [] args - 它只接受字符串类型的参数...并将其存储在字符串数组中

【讨论】:

    【解决方案3】:

    我会分手

    public static void main(String args[])
    

    部分:

    public

    这意味着您可以从您当前所在的类之外调用此方法。这是必要的,因为此方法正在由不在您当前类中的 Java 运行时系统调用。


    static

    当 JVM 调用 main 方法时,被调用的类不存在对象,因此它必须有静态方法才能允许从类调用。


    void

    Java 是独立于平台的语言,如果它会返回一些值,那么该值对于不同的平台可能意味着不同的东西。还有其他方法可以在多线程系统上退出程序。 Detailed explaination.


    main

    这只是方法的名称。这个名称是固定的,因为它被 JVM 称为应用程序的入口点。


    String args[]

    这些是您的 Java 应用程序在运行时接受的 String 类型的参数。

    【讨论】:

      【解决方案4】:

      我只是想我会参与这个。不过其他人回答得很好。

      完整的 main 方法声明应该是:

       public static void main(final String[] args) throws Exception {
      
       }
      

      args 被声明为 final,因为从技术上讲它们不应该被改变。它们是用户给定的控制台参数。

      您通常应该指定 main 抛出异常,以便可以轻松地将堆栈跟踪回显到控制台,而无需执行 e.printStackTrace() 等操作。

      至于数组语法。我更喜欢这种方式。我想这有点像法语和英语之间的区别。 在英语中它是“a black car”,在法语中是“a car black”。 哪个是重要的名词,汽车还是黑色?

      我不喜欢这种东西:

      String blah[] = {};
      

      这里重要的是它是一个String数组,所以应该是

      String[] blah = {};
      

      blah 只是一个名字。我个人认为在Java中有时可以以这种方式声明数组是一个错误。

      【讨论】:

      • 嗯.. 表单的声明:String blah[] = {}; 包含在 Java 的更高版本中,以帮助具有 C 和 C++ 背景的程序员。
      • 很有趣,但是对于像我这样的编码新手来说,这会让人感到困惑:(String[] args) vs. (String args[])。如果它应该是 String[] 然后符合那个。
      • 这是 Java 遭受的少数“风格”问题之一。经典是您放置花括号的地方,它是办公室中无休止争论的来源。我喜欢“Egyptian Notation”,但我的一些同事不喜欢,我非常讨厌它们。坚持下去,Java 在年轻一代中已经过时了,但他们认为 JSON 是 XML 的替代品,所以我会接受他们所说的。
      【解决方案5】:

      我会把初学者指向Wiki article on the Main function,然后用这个来补充它。

      • Java 只开始运行具有特定public static void main(String[] args) 签名的程序,人们可以将签名想象成他们自己的名字——这就是Java 如何区分别人的main() 和真正的@ 的方法987654324@.

      • String[] argsStrings的集合,用空格隔开,可以在终端输入程序。很多时候,初学者不会使用这个变量,但它总是在那里以防万一。

      【讨论】:

      • “多于不”是什么意思??
      • @Abcd:可能有初学者想要传入命令行参数的情况,但老实说,这种情况并非每次都会发生一个人运行一个应用程序。
      • 根本不用的时候有什么用。为什么放在上面
      • 仅限***********
      • @Abcd 它可能在 BlueJ 等 IDE 中工作,但它不适用于每个 Java 编译器或 IDE,因为根据 Java 规范,没有它就不能工作。
      【解决方案6】:
      • public :它是一个访问说明符,表示它将被公开访问。
      • static : 是访问修饰符,意思是当java程序被加载时,它会自动在内存中创建空间。
      • void :它是一个返回类型,即它不返回任何值。
      • main() : 方法或函数名。
      • string args[] :它是一个命令行参数,它是字符串格式的变量集合。

      【讨论】:

        【解决方案7】:

        静态的正常用法是直接访问函数而不创建任何对象。与在 java main 中相同,我们无法为该类创建任何对象来调用 main 方法。它将自动执行。如果我们想手动执行,我们可以在类内部使用 main() 并从类外部使用 ClassName.main 来调用。

        【讨论】:

          【解决方案8】:

          如果我要向某人解释这一点,我会说我们稍后再说,你需要知道运行程序的方法是使用:

          public static void main(String[] args) {
                  ...
              }
          

          假设他/她知道数组是什么,我会说 args 是一个参数数组,你可以展示一些很酷的例子。

          然后,在您了解了一些关于 Java/JVM 之类的东西之后,您最终会接触到静态和公共的修饰符。

          那你可以花点时间谈谈这些恕我直言的含义。

          您可以提及其他“很酷”的东西,例如 varargs,您可以在更高版本的 Java 中使用它。

          public static void main(String ...args) {
                  //...
              }
          

          【讨论】:

            猜你喜欢
            • 2016-05-22
            • 2014-10-07
            • 2019-03-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-03
            • 1970-01-01
            • 2018-11-12
            相关资源
            最近更新 更多