问:嗨,我对编程语言有一点经验,我曾经用cmd上的c ++和c开发了一些不错的小游戏,现在我正在学习java,它与c ++作为OOP语言没有太大的区别,所以这对我来说很好,但我确实有1个问题。我试图使用编译器javac在计算机上运行某些代码,直到我在main方法中将“ String [] args”作为参数写入后,该代码才起作用。我知道什么是数组,我知道如何使用它以及用于什么。但是我不明白为什么即使没有真正使用过main方法也绝对有必要传入一个参数,这是我在c ++或c中不需要做的事情,我想解释一下为什么我不能只这样写main:“ public static void main(){//一些代码...}”
答:我不熟悉任何C变体,因此我真的不知道您将如何在C ++中做同样的事情。我也不是Java专业人士,但是这次我将尝试更好地解释它。我所说的可能完全是错误的,这就是我对此的理解和思考的方式:)
因此,首先主要的方法是您的类的公共静态方法。我确定您知道这是什么意思,因为您之前曾经使用过OOP。每当您运行任何Java程序时,都会首先执行此静态main方法。
那么您可能会问的论点呢?让我们想象一下,我们有一个main方法,该方法接受参数作为字符串数组。调用此main方法时,您需要向其传递某些内容,否则它将无法运行。
情况1:我们使用一个argume main方法运行程序,将得到一个长度为1的数组。
情况2:我们在没有参数的情况下运行程序,并且main方法将获得一个空数组。
Java必须传递一些东西,因为在运行我们程序的命令中可能包含一些参数。绝对不要自己调用main方法,而Java会。它有时不能什么都不通过,有时不能通过。这会导致错误。
好的,因此现在应该很清楚,只要我们运行程序,Java运行时(或实际调用的程序)就会从main方法开始执行程序。Java运行时(我将其称为运行时)无法知道我们是否有接受参数的main方法,因此即使此时您不传递任何参数,Java仍将传递一个空数组,因为是默认行为。
因此,当我们有一个没有参数的main方法时会发生什么。我实际上不确定它是否还会编译,但让我们假设它会编译。
因此,我们在不带参数的情况下运行程序,但是Java仍会创建一个空数组,该数组将传递给main方法。这是因为它期望我们的main方法可以接受参数。这当然会崩溃,因为我们不允许传递任何参数。