A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouxp3323 黑马帝   /  2012-3-17 21:21  /  2795 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义一个Person类,有name和age属性,它的构造方法
Person(String name,int age){
    this.name = name;
    this.age = age;
}
定义这些属性的get方法和toString方法,有什么区别呢,什么时候用toString方法比较合适啊,谁知道吗?

5 个回复

正序浏览
toString()方法
Object类具有一个toString()方法,你创建的每个类都会继承该方法。它返回对象的一个String表示,并且对于调试非常有帮助。然而对于默认的toString()方法往往不能满足需求,需要覆盖这个方法。
toString()方法将对象转换为字符串。看以下代码:
package sample;
class Villain {
       private String name;
       protected void set(String nm) {
       name = nm;
}
       public Villain(String name) {
                  this.name = name;
}
       // public String toString() {
                 return "I'm a Villain and my name is " + name;
}
}
public class Orc extends Villain {
        private int orcNumber;
        public Orc(String name, int orcNumber) {
                  super(name);
                  this.orcNumber = orcNumber;
}
        public void change(String name, int orcNumber) {
                  set(name);
                  this.orcNumber = orcNumber;
}
        // public String toString() {
                   return "Orc" + orcNumber + ":" + super.toString();
}
public static void main(String[] args) {
         Orc orc = new Orc("Limburger", 12);
         System.out.println(orc);
         orc.change("Bob", 19);
         System.out.println(orc);
}
}
结果:
sample.Orc@11b86e7
sample.Orc@11b86e7
如果去掉注释,即加入2个toString()方法后,得到结果:
Orc12:I'm a Villain and my name is Limburger

Orc19:I'm a Villain and my name is Bob
回复 使用道具 举报
toString是Object类的一个方法,java中任何对象都可以调用toString()方法,要继承覆写后可以打印出对象所有类型的属性。  get要有对象调用返回同类型的属性         
回复 使用道具 举报
get方法和toString方法 的功能都是读取操作。
由于java的封装性,我们在定义类时,属性私有化,方法公共的化理念,竟而对外提供了set,get方法。
通过 对象.getXXX方法 就能读取属性。
而tostring方法属于Object类中的,而所有的类都可以是object的子类,所以你在打印对象时,则会自动调用tostring方法。

示例代码:
  1.         public static void main(String[] args) {
  2.                 Person stu=new Person("lisi",23);
  3.                 System.out.println("name:"+stu.getName()); //读取name
  4.                 System.out.println("age:"+stu.getAge()); //读取age
  5.                 System.out.println(stu); //自动调用toString方法               
  6.         }
复制代码
输出结果:
name:lisi
age:23
Person@c17164

从上面的代码看出在打印对象时,调用了tostring方法,输出的结果是哈希值,并不是我们想要的值。这个时候我们就要覆写toString方法来读取我们想要的属性。
代码:
  1.         public String toString(){
  2.                 return "name:"+this.name+",age:"+this.age;
  3.         }
复制代码
结果:
name:lisi
age:23
name:lisi,age:23

这样我们想要的值就读取出来了。
假如有这样的需求:只需要读取name的值.

那我们就可以使用getName()方法读取,也可以打印对象调用toString方法读出,但是我们一旦调用toString方法后,结果输出的是name和age两个属性,对需求不符合。这个我们就要再次对toString方法进行修改,这样程序就失去了灵活性。所以调用getName()方法更简单更方便。
如果name和age都要读取,则可以调用toString方法更简单。
在实际开发中,建议使用getXX方法去读取每个属性的值。


回复 使用道具 举报
复写toString方法可以一次性获取person的所有属性值,复写get方法一次只能得到一个属性,且在输出语句System.out.println(person)中默认执行toString方法;
若想在其他代码中获取该对象的属性值用get(),若是想打印结果用toString()比较高效;
回复 使用道具 举报
toString   不复写的话就是  按照object 中的格式输出   继承么  

比如说你的  person  类想要 一次就输出   姓名  年龄  或者还有其他的   那你就可以  覆写  toString  让他一次性都表示出来  用以打印   
不然你就要   很多次的执行 get**() 方法了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马