Java “是什么意思?”#&引用;在MyType中#myMethod()和与“";的差异&引用;与MyType.myMethod()中的相同

Java “是什么意思?”#&引用;在MyType中#myMethod()和与“";的差异&引用;与MyType.myMethod()中的相同,java,syntax,vocabulary,Java,Syntax,Vocabulary,好吧,一切都在标题中 我知道这两种形式都是指方法,但我不明白 > 添加到另一种形式。 < p> .版本是java编程语言中使用的形式符号,更具体地,考虑以下代码: class Animal { void fly() { } } 使用方法fly()我们需要执行以下操作: Animal animal = new Animal(); animal.fly(); 然而,我们真正想在文档中注明的是调用实例方法fly(),因此我们将Animal#fly(),一个看似替代的方法是Ani

好吧,一切都在标题中


我知道这两种形式都是指方法,但我不明白<代码> > <代码>添加到另一种形式。

< p> <代码> .<代码>版本是java编程语言中使用的形式符号,更具体地,考虑以下代码:

class Animal {
    void fly() { 
    }
}
使用方法
fly()
我们需要执行以下操作:

Animal animal = new Animal();
animal.fly();
然而,我们真正想在文档中注明的是调用实例方法
fly()
,因此我们将
Animal#fly()
,一个看似替代的方法是
Animal.fly()
,但这将表示Java代码中
Animal
类的静态方法

因此,
Animal#fly()
被用于所有其他形式,总结而言,替代方案是:

  • Animal.fly()
    ,但这可能意味着一个静态方法
  • animal.fly()
    ,但是没有名为
    animal
    的类
作为旁注,值得注意的是,由于Java 8,我们实际上可以直接在Java代码中通过使用:

Runnable animalFly = Animal::fly;
这里我们还引用了
Animal#fly()
方法,但是javadoc比Java8早了很长一段时间。

MyType#myMethod()
javadoc
的语法,因此您的文档可以链接到不同方法的文档

例如,Object.equals()的javadoc包含链接到Object.hashCode()方法的文本,因为它们是相关的

/**
 * ...
 *
 * @see Object#hashCode()
 */
  public boolean equals(Object obj)
其中as MyType.myMethod()是调用该方法的Java代码中实际语法usd的syntx。

哈希字符(#)不是Java语言的一部分

它在javadoc中有特殊用途。美国

包。类#成员是 引用——包、类、接口、构造函数、方法或 字段名--除了成员名前面的字符 应该是散列字符(#)

如上所述,散列字符(#)而不是点(.)分隔 成员。这使Javadoc工具能够解析 模糊性,因为点也分隔类,嵌套类, 包和子包。但是,Javadoc工具通常是 如果你知道没有,你会正确地解析一个点 模棱两可,尽管它会打印一条警告


该符号不仅适用于方法,还适用于任何类型成员。它有助于消除完全限定类型名称的歧义。

如果内存可用,则前者是Javadoc表单。我试着用它来表示“在
MyType
中定义的方法”,而点更多地用于实际的方法调用,但我不确定“真实”的含义是什么。我觉得你的答案不够清楚。你是说
#
只在文档中使用吗?你是说它是用来表示实例方法的吗?为什么要提到方法参考?谢谢。总之:为了在一般文档中进行区分,Animal#fly()和Animal.fly()分别表示一个实例和一个静态调用。而且,其他海报也提到:Javadoc还使用#来消除成员名称与其限定符之间的歧义,但没有静态或实例含义。那么,静态方法呢?如果
fly()
是类
Animal
的静态方法,那么我们仍然在javadoc中表示它
Animal\fly()
?谢谢。似乎这个答案与JavaDocAPI有关。正如skiwi所提到的,在一般性讨论中区分静态成员和实例成员怎么样?@mins我想你们可以做到,但我看不出有什么意义。您不能同时拥有具有相同签名的
静态方法和非静态方法,因此以这种方式区分它们并不是什么大问题。