Java 从main隐式调用类中的方法
我是Java新手,我正在尝试解决教授给我的一个练习。 他上过这门课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
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初学者问题。。。