当我们创建任何用户定义类的对象并打印该对象时,我们将获得该对象的十六进制地址。见下文,
Book B = new Book ("Include Help"); System.out.println(B);
输出结果
@2a139a55
在这里,当我们打印Book类的B对象时,我们将获得Object的十六进制代码而不是Object的值。
但是,当我们对Java预定义类(例如String)执行相同的操作时。它不会打印地址,但会打印该对象的值。
String S= new String ("Include Help"); System.out.println(S);
输出结果
Include Help
那么,在用户定义的类的情况下情况如何?看看后台发生了什么有趣吗?
这是因为Java编译器会toString()
在每个类中搜索将对象转换为字符串的方法。如果使用此方法,则在类中找不到它,它将打印对象的HexaCode地址。但是在预定义的Java类(如String)中,预定义了toString方法。
如果我们想要在用户定义的类中实现相同的功能,则必须在类中显式声明toString方法,这在示例中已完成。
让我们来看一个例子,
在类中未定义toString方法的类
package logicProgramming; //代表一本书的类 class Book { private String Name; private String Code; private String Author; public Book(String Name,String Code,String Author) { this.Name=Name; this.Code=Code; this.Author=Author; } } public class ExImportant { public static void main(String[] args) { Book B=new Book("Let Us C","HT301","Harsh Tomar"); //如果我们使用System.out.println(B),它将打印 //对象B的十六进制代码地址 //但是如果我们要打印对象的值 //我们必须在用户定义的类中使用toString方法 //让我们了解......- System.out.println(B); //查看输出,它将打印B的地址 } }
输出结果
[email protected]
注意: logicProgramming是程序包的名称,Book是类的名称
现在,让我们修改此代码以获取Object的值,以便执行此操作,我们必须toString()
在类中定义一个方法
package logicProgramming; //代表这本书的类 class Book { private String Name; private String Code; private String Author; public Book2(String Name,String Code,String Author) { this.Name=Name; this.Code=Code; this.Author=Author; } //toString方法 public String toString() {return ("Name :"+this.Name+"\nCode :"+this.Code+"\nAuthor :"+this.Author);} } public class ExImportant2 { public static void main(String[] args) { Book B=new Book("Let Us C","HT301","Harsh Tomar"); //如果我们使用System.out.println(B) //它将打印对象B的十六进制代码地址 //但是如果我们要打印对象的值 //我们必须在用户定义的类中使用toString方法 //让我们了解......- System.out.println(B); //查看将打印Obeject B信息的输出 } }
输出结果
Name :Let Us C Code :HT301 Author :Harsh Tomar