《Oracle Java SE编程指南》16-02:toStri

2020-04-22  本文已影响0人  AT阿宝哥
课程封面-JavaSE-AT阿宝哥

内容导航


前言

我们在调试时,怎么打印出一个对象的状态呢?


1、toString()方法

Object 类的 toString 方法返回一个该对象的字符串表示,或者说将任何一个对象转换成字符串返回,这对于调试非常有用。建议所有子类都重写此方法。方法定义如下:


public String toString() {

        return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

通过观察,该字符串由类名、at 标记符@和此对象哈希码的无符号十六进制表示组成。

示例代码:


package com.company.project.demo0201;

public class Client {

    public static void main(String[] args) {
        // 创建Object对象
        Object object = new Object();

        // Object类的toString()方法
        System.out.println(object.getClass().getName());
        System.out.println(object.hashCode());
        System.out.println(Integer.toHexString(object.hashCode()));
        System.out.println(object.toString());
        
        // 默认是不需要显式的写.toString()方法的,推荐写法。
        System.out.println(object);

    }

}

运行结果:


java.lang.Object
2018699554
7852e922
java.lang.Object@7852e922
java.lang.Object@7852e922

打印时,默认不需要显式的写.toString()方法,推荐该写法。


2、不重写toString()方法

如果没有重写toString()方法,将调用Object类的toString()方法。

示例代码-Message类:



package com.company.project.demo0202;

//类:消息。
public class Message {
    // 发件人
    private String from;
    // 收件人
    private String to;
    // 发送时间
    private String sendTime;
    // 接受时间
    private String receiveTime;

    public Message() {

    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getSendTime() {
        return sendTime;
    }

    public void setSendTime(String sendTime) {
        this.sendTime = sendTime;
    }

    public String getReceiveTime() {
        return receiveTime;
    }

    public void setReceiveTime(String receiveTime) {
        this.receiveTime = receiveTime;
    }

}


示例代码-Client 类:



package com.company.project.demo0202;

public class Client {

    public static void main(String[] args) {

        Message message = new Message();

        message.setFrom("AT阿宝哥");
        message.setTo("朋友");

        System.out.println(message);

    }

}


运行结果:


com.company.project.demo0202.Message@7852e922


3、重写toString()方法

如果重写了toString()方法,将调用自己的toString()方法。

示例代码-Message 类:



package com.company.project.demo0203;

//类:消息。
public class Message {
    // 发件人
    private String from;
    // 收件人
    private String to;
    // 发送时间
    private String sendTime;
    // 接受时间
    private String receiveTime;

    public Message() {

    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getSendTime() {
        return sendTime;
    }

    public void setSendTime(String sendTime) {
        this.sendTime = sendTime;
    }

    public String getReceiveTime() {
        return receiveTime;
    }

    public void setReceiveTime(String receiveTime) {
        this.receiveTime = receiveTime;
    }

    @Override
    public String toString() {
        return "Message [from=" + from + ", to=" + to + ", sendTime=" + sendTime + ", receiveTime=" + receiveTime + "]";
    }

}

示例代码-Client 类:



package com.company.project.demo0203;

public class Client {

    public static void main(String[] args) {

        Message message = new Message();

        message.setFrom("AT阿宝哥");
        message.setTo("朋友");

        System.out.println(message);
    }

}


运行结果:


Message [from=AT阿宝哥, to=朋友, sendTime=null, receiveTime=null]

在重写时,建议使用Eclipse的快捷键自动生成toString()代码。如有特殊需要,可手动重写。


持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!


扫描二维码,关注AT阿宝哥
上一篇下一篇

猜你喜欢

热点阅读