【问题标题】:Basic Java homeworkJava 基础作业
【发布时间】:2012-03-12 22:24:24
【问题描述】:

我知道这很简单,但我真的不明白这个问题......

假设方法 xMethod 的签名如下。 解释调用 xMethod 的两种不同方式:

public static void xMethod(double[] a)

我想调用一个你刚刚做的方法:

xMethod(myarray);

问两种不同的方式意味着什么?也许我只是在研究这个问题太多了。

【问题讨论】:

  • XClass.class.getMethod("xMethod", a.getClass()).invoke(null, a);?更严重的是:XClass.xMethod(a);xObject.xMethod(a);
  • 试着想想调用方法的地方
  • 由于这是一个初学者的家庭作业问题,我认为你的教授是完全错误的。因为,只有一种正确的调用方式。
  • 给出上下文。例如,可以使用MyClass.xMethod(myarray)MyClass instance = new MyClass(); instance.xMethod(myarray) 调用此方法。
  • 请反馈您老师的期望。在“答案”部分,您会看到男性专业人士对您的家庭作业有点迷失。甚至 Jon Skeet 也没有回答。

标签: java


【解决方案1】:

为了好玩,给你的教授看这个:

XClass.class.getMethod("xMethod", a.getClass()).invoke(null, a);

然后告诉他们两个答案是

XClass.xMethod(a);
//and
xObject.xMethod(a); //this is bad practice

【讨论】:

  • 我认为这是最有效的答案。
  • @HovercraftFullOfEels 谢谢:D
【解决方案2】:

如果这是第一次使用java类,我猜他正在寻找这两种情况:

//the one you have, using a precreated array
double[] myArray = {1.1, 2.2, 3.3}
xMethod(myarray);

//and putting it all together
xMethod(new double[]{1.1, 2.2, 3.3});

基本上说明您可以创建一个数组来传递,或者只是在调用中创建一个。

只是猜测

【讨论】:

  • 我也是这么想的……对于我们所学的内容,其他答案似乎有点复杂。谢谢
  • 语法是 xMethod(new double[] {1.1, 2.2, 3.3});
  • 谢谢你,我永远记不起简单数组的语法了!
  • 这实际上是调用该方法的一种方式,因为您调用它的方式相同,但参数不同。我建议看看下面的回复。 stackoverflow.com/a/9675729/1513735
  • @Heskja 我很想同意你的观点,我把这个答案放进去是因为 OP 听起来像是我们在做一个简单的 Java 类,并且不会像另一个那样接近任何东西答案,我们都希望 OP 会让我们知道他们的教授正在寻找什么,但他们似乎没有。
【解决方案3】:

您可以通过在类上调用它来调用它,或者通过该类的实例来调用它。

Foo.xMethod(a);

或:

Foo foo = new Foo();
foo.xMethod(a);

首选第一种方法,但第二种方法将编译并运行。但请注意,允许使用第二种方法通常被认为是语言中的设计缺陷。

【讨论】:

  • 通过类的实例调用它是不正确的,即使它不会破坏任何东西。
  • 我觉得编译的时候是一样的。不过,我必须仔细检查。 @Amareswar 这不是语法错误,只是不好的做法。
  • @Amareswar:令人惊讶的是它实际上是有效的。实际使用它只是一种不好的做法。但值得了解一下,以防您遇到其他人使用它的代码,以免您完全被它弄糊涂。
  • @MarkByers 你是对的。 IDE 设置了默认意图来突出此类问题。
【解决方案4】:

静态方法不绑定到类的构造。 上面的方法既可以通过构造类来调用,也可以直接使用命名空间来调用:

Classname myclass = new Classname();
myclass.xMethod(myarray);

或者你可以这样做:

Classname.xMethod(myarray);

如您所见,您不必为了使用该方法而构建类。另一方面,静态方法不能访问类的非静态成员。 我想这就是问题的含义,有两种不同的方式......

【讨论】:

    【解决方案5】:

    只有一种有效的方法可以做到这一点:

    YourClass.xMethod(myDoubleArray);
    

    但是,您可以编写不完全正确的 Java:

    YourClass instance = new YourClass();
    instance.xMethod(myDoubleArray);
    

    这会起作用,但被认为是错误的。 Java 编译器甚至会抱怨它。因为不需要通过创建类的实例来调用静态方法。静态意味着该方法是独立于实例的。通过实例调用它毫无意义且令人困惑。

    稍后,您会看到还有第二种正确的方法,即“反射”。但这是一个高级主题,所以我假设您不应该已经知道这一点。

    【讨论】:

    • 这实际上并不正确,但这是一个坏主意,因为它引入了一个虚假的依赖关系——看起来instance 是必需的并且意味着什么,但实际上它不是也没有。见stackoverflow.com/questions/7884004/…
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2013-10-22
    • 2021-12-25
    • 2011-06-01
    • 2014-06-19
    • 2018-01-21
    相关资源
    最近更新 更多