Java 从main隐式调用类中的方法

Java 从main隐式调用类中的方法,java,class,methods,main,Java,Class,Methods,Main,我是Java新手,我正在尝试解决教授给我的一个练习。 他上过这门课 public class MioPunto { public int x; public int y; public String toString() { return ("[" + x + "," + y + "]"); } } 我应该用main方法编写另一个类。在main中,我必须在不显式调用“toString”方法的情况下打印坐标。 我不知不觉就这样解决了 public class TestMioPunto

我是Java新手,我正在尝试解决教授给我的一个练习。 他上过这门课

public class MioPunto {
public int x;
public int y;
public String toString() {
    return ("[" + x + "," + y + "]");
  }
}
我应该用main方法编写另一个类。在main中,我必须在不显式调用“toString”方法的情况下打印坐标。 我不知不觉就这样解决了

public class TestMioPunto{
public static void main(String[] args){
    MioPunto inizio = new MioPunto();
    MioPunto fine = new MioPunto();
    inizio.x=10;
    inizio.y=10;
    fine.x=20;
    fine.y=30;
    System.out.println("Inizio: " + inizio + "\n" + "Fine: " + fine);
  }
}
输出是
我不明白Java是如何自动调用toString方法的(括号和逗号),你能解释一下吗?

当你在
字符串和对象上使用
+
时,Java调用
toString

那么你的

System.out.println("Inizio: " + inizio + "\n" + "Fine: " + fine);

System.out.println("Inizio: " + inizio.toString() + "\n" + "Fine: " + fine.toString());
除了如果
io
fine
null
,第一个不会给您错误(您将在字符串中看到
null
),但第二个会给您错误

从JLS的以下部分:

如果只有一个操作数表达式为String类型,则在运行时对另一个操作数执行字符串转换(§5.1.11),以生成字符串

它指的是,它说(在讨论将原语转换为字符串之后):

现在只需考虑参考值:

  • 如果引用为null,则将其转换为字符串“null”(四个ASCII字符n、u、l、l)

  • 否则,转换就好像是通过调用引用对象的toString方法(不带参数)来执行的;但是如果调用toString方法的结果为null,则使用字符串“null”


当您对
字符串和对象使用
+
时,Java调用
toString

那么你的

System.out.println("Inizio: " + inizio + "\n" + "Fine: " + fine);

System.out.println("Inizio: " + inizio.toString() + "\n" + "Fine: " + fine.toString());
除了如果
io
fine
null
,第一个不会给您错误(您将在字符串中看到
null
),但第二个会给您错误

从JLS的以下部分:

如果只有一个操作数表达式为String类型,则在运行时对另一个操作数执行字符串转换(§5.1.11),以生成字符串

它指的是,它说(在讨论将原语转换为字符串之后):

现在只需考虑参考值:

  • 如果引用为null,则将其转换为字符串“null”(四个ASCII字符n、u、l、l)

  • 否则,转换就好像是通过调用引用对象的toString方法(不带参数)来执行的;但是如果调用toString方法的结果为null,则使用字符串“null”


由于
java.lang.Object
MioPunto
的隐式基类(因为它是所有java对象的基类),因此方法
MioPunto.toString()
是方法的重写

由于所有对象都有
toString()
的实现,Java编译器可以在使用
+
运算符执行的字符串连接链中的任何对象上自由添加对
toString()
的调用:

字符串串联运算符
+
(§15.18.1),当给定
字符串
操作数和引用时,它将通过调用被引用对象的
toString
方法(使用
“null”)将引用转换为
字符串
如果引用或
toString
的结果是
null
引用),则将生成新创建的
字符串
,即两个字符串的串联


由于
java.lang.Object
MioPunto
的隐式基类(因为它是所有java对象的基类),因此方法
MioPunto.toString()
是方法的重写

由于所有对象都有
toString()
的实现,Java编译器可以在使用
+
运算符执行的字符串连接链中的任何对象上自由添加对
toString()
的调用:

字符串串联运算符
+
(§15.18.1),当给定
字符串
操作数和引用时,它将通过调用被引用对象的
toString
方法(使用
“null”)将引用转换为
字符串
如果引用或
toString
的结果是
null
引用),则将生成新创建的
字符串
,即两个字符串的串联


我应该意识到这是一个复制品!有非常,非常少的非重复的Java初学者问题…我应该意识到它是重复的!有非常非常少的不重复的Java初学者问题。。。