Java中的Hello世界:理解python中的概念

我现在正在努力学习Java,这是一个hello world程序,它已经开始让我感到困惑.我习惯了python,我发现this教程(电子书)对于拥有python背景的程序员来说简单而简洁.

来自Java的Hello世界程序:

public class Hello {

public static void main (String[] args) {

     System.out.println("Hello World!");
}
}

正如书中所说,python中的等效代码是:

class Hello(object):
  @staticmethod
  def main(args):
     print "Hello World!"

我完全理解python代码.但是,我遇到了Java代码的问题,在进一步开发之前我想要清楚,这样我才能掌握大脑中的语言知识.

这本书说(从书中复制):

…we have one parameter. The name of the parameter is args however,
because everything in Java must have a type we also have to tell the
compiler that the value of args is an array of strings. For the moment
You can just think of an array as being the same thing as a list in
Python. The practical benefitt of declaring that the method main must
accept one parameter and the parameter must be a an array of strings
is that if you call main somewhere else in your code and and pass it
an array of integers or even a single string, the compiler will flag
it as an error.

这对我没有任何意义.为什么我不能传递任何东西,因为我的功能不需要任何东西?如果我只是传递(String args)会发生什么.

由于我是Java的新手,请耐心等待.

最佳答案
如你所知,Python使用“duck typing”:什么类型的东西并不重要,只有它能做什么.因此,您永远不需要为变量声明类型.

在Java中,情况并非如此:每个变量都有一个声明的类型,编译器会强制执行该类型.例如,在int声明的变量中尝试存储String引用将产生编译时错误.鸭子打字的支持者声称这降低了灵活性,但强类型爱好者指出编译时错误比运行时错误更容易修复.

但是你的方法论证也是如此.由于您的方法需要String []类型的参数,因此必须提供String []类型的参数.没有别的办法.

幸运的是,由于它是主要的方法,Java解释器负责传递一个参数:具体来说,是一个用于执行程序的命令行参数的数组.如果您想忽略它,请随意.你的程序运行得很好而不用注意参数,但是如果没有传入则它是无效的.

(顺便说一句,如果这是除了main方法之外的任何方法,你可以自由地用你想要的任何参数类型声明它,包括根本没有参数.但是因为Java解释器将传入一个数组命令行参数,必须准备这个特殊的方法来接受它们.)

转载注明原文:Java中的Hello世界:理解python中的概念 - 代码日志