Java方法的语法

我是编程初学者。 我正在学习方法,我想知道这两者之间的区别。 为什么我不能用同样的方式使用自制的方法text.length(); 正在使用?

text.length(); text.selfMadeMethod(); instead of selfMadeMethod(text); 

编辑:这似乎错过了我的例子上面,我很抱歉。 我将发布我正在进行的练习,以便更清楚地显示我尝试做的事情。

 import java.util.Scanner; public class ReversingText { public static String reverse(String text) { int x = text.length() -1; String reverse = ""; while (x >= 0) { reverse += text.charAt(x); x--; } return reverse; } public static void main(String[] args) { Scanner reader = new Scanner(System.in); System.out.print("Type in your text: "); String text = reader.nextLine(); System.out.println("In reverse order: " + reverse(text)); System.out.println("In reverse order: " + text.reverse()); } } 

最后的印刷声明只是我的尝试,演习并没有要求我这样做。 如果这是一个愚蠢的问题或不清楚,我再次抱歉,谢谢。

为什么我不能用同样的方式使用自制的方法text.length(); 正在使用?

因为你需要一个对象来调用一个方法。

但是你没有创建你的类ReversingText的对象。

一个对象是通过调用new运算符后面跟一个类名(更精确地说是类的构造函数)来创建的,

 new ReversingText(); 

但是你写的方法有static关键字,这意味着它可以直接通过类名访问:

 ReversingText.reverse("some string"); 

您不需要在代码中编写该代码,因为您处于可以省略类名称的同一个类中。

如果你想使用自己的方法像text.length()你必须做3件事情:

  1. 从方法签名中删除static关键字。
  2. 创建一个ReversingText的实例并将其存储在主变量中:
    ReversingText reversingText = new ReversingText();

  3. 在这个变量上调用你的方法:
    reversingText.reverse("some string");

因为Java String具有String.length() (并且没有reverse(String)方法),并且它是一个final类(也就是说,不能对它进行子类化以添加自定义方法)。 这是值得一提的,但不是直接给你的问题,已经有一个StringBuilder.reverse()方法。

这是关于java的语义。

 public class SomeClass{ public void someMethod(){ } } 

上面的代码基本上意味着SomeClass有一个方法someMethod ,任何实例可以使用以下方式:

 SomeClass s = new SomeClass(); s.someMethod(); 

someMethod被称为SomeClass的实例方法。 这意味着someMethod是类SomeClass的任何实例的一部分。

另一方面

 public void anotherMethod(SomeClass s){ } 

意味着另一个方法接受一个类SomeClass的实例作为参数,可以像这样调用:

 anotherMethod(new SomeClass()); 

请注意“实例方法”和“参数”之间的区别。

类从外部是不可改变的。 这意味着您可以将方法添加到类中的唯一位置直接在相应类的定义中。

唉,你不能重新打开Java的类。

text是一个字符串,您只能将消息发送到在String类中定义的String 。 唉,你不能用你自己的函数来扩展它。 这是Java的一个不幸的限制。 像Ruby等其他语言允许类重新打开。

解决此限制的常见方法是创建带有静态reverse功能的StringUtils类,然后按如下所示使用它

 StringUtils.reverse(text) 

当通过在类/实例名称之后放置方法来调用方法时,这表明您正在调用属于该类的方法。 一些例子:

  • text.length()使用分配给text的值在String类( text是实例text.length()调用length()方法。
  • Math.random()Math类中调用静态方法random()

方法所属的类必须在方法本身的名称之前指定。 如果没有指定任何类,则假定它属于与它所调用的类相同的类。

这就是为什么在你的例子中,它是第一种方式,而不是第二种。 在当前类的reverse(String)方法上调用reverse(text)方法,将text作为参数传递给它。 text.reverse()对类Stringreverse()方法进行调用,该方法不存在。

你正在问一个非常着名的语言功能,即皮条客我的图书馆。 一些像Scala,Kotlin,C#等语言已经有了这个语法。 但不幸的是,Java还没有。