Java 仅通过显示对象名调用的类方法
我有下面的代码Java 仅通过显示对象名调用的类方法,java,object,methods,Java,Object,Methods,我有下面的代码 public class DriverTester { public static void main(...){ // test empty constructor Person p1 = new Person(); System.out.println("p1: " + p1); } } public class Person { private String name; // Empty constructor pub
public class DriverTester {
public static void main(...){
// test empty constructor
Person p1 = new Person();
System.out.println("p1: " + p1);
}
}
public class Person {
private String name;
// Empty constructor
public Person () {
}
// getter avoided for simplicity
public String toString() {
return "Mr.or Ms. "+this.name;
}
}
它编译、成功运行并显示“Mr或Mrs null”。因此,这将是调用toString
方法的结果
我不理解print line方法的语法。对象名p1
如何运行给定的方法。它如何知道要运行哪个方法?语法不应该是
System.out.println("p1: " + p1.getName());
或
感谢您在连接字符串时所做的任何澄清,例如在此行中:
System.out.println("p1: " + p1);
Java将调用toString()
方法将任何对象转换为字符串
,以进行连接。Java确保此方法存在于所有对象上,因为它是在类上定义的,每个类都隐式继承自该类
另外,如果连接了null
,那么Java将把它转换成字符串“null”
其中,包括“字符串转换”:
- 如果引用为null,则将其转换为字符串“null”(四个ASCII字符n、u、l、l)
- 否则,转换就好像是通过调用引用对象的toString方法(不带参数)来执行的;但是 如果调用toString方法的结果为null,则 改为使用字符串“null”
PrintStream
由System.out.println使用
如果对象本身不是null
,则反过来使用对象的方法,否则返回文本“null”
2837 public static String valueOf(Object obj) {
2838 return (obj == null) ? "null" : obj.toString();
2839 }
所有对象都是具有toString()
方法的Object
类的子对象。println()
方法接受一个对象。因此它知道可以对参数调用toString()。字符串连接也是如此。每当在字符串
上下文中使用对象时,就像在println
中一样,就会调用它的toString()
方法。您在System.out.println(“p1:+p1.toString())
中是正确的。答案不错,但您可能希望添加toString()
在java.lang.Object
中定义,确保java类型系统中的每个类(AFAIK)至少有一个基本的实现。现在完全有意义了-如果用户上下文中需要一个字符串,并且没有调用特定的方法,那么toString就可以运行了。非常感谢,这是完全有意义的。谢谢你分享知识。
649 public void print(Object obj) {
650 write(String.valueOf(obj));
651 }
2837 public static String valueOf(Object obj) {
2838 return (obj == null) ? "null" : obj.toString();
2839 }