如何在Java中正确覆盖toString()?

听起来有点愚蠢,但我需要帮助我的toString()方法,这是非常irking。 我尝试在网上查找,因为toString是搞砸了,“没有找到Kid构造函数#2”,即使它在那里,我甚至会做别的,它不工作。 好的,这是我的代码:

import java.util.*; class Kid { String name; double height; GregorianCalendar bDay; public Kid () { this.name = "HEAD"; this.height = 1; this.bDay = new GregorianCalendar(1111,1,1); } public Kid (String n, double h, String date) { // method that toString() can't find somehow StringTokenizer st = new StringTokenizer(date, "/", true); n = this.name; h = this.height; } public String toString() { return Kid(this.name, this.height, this.bDay); } } //end class

好吧所以我上面的toString(我知道,我的第三个参数是关闭的,应该是一个字符串)是关闭的。 如果我硬编码价值的第三件事情,它不合时宜,说它无法找到(上面)。 那么我怎样才能得到日期并分解呢?

下面是调用它的类

class Driver { public static void main (String[] args) { Kid kid1 = new Kid("Lexie", 2.6, "11/5/2009"); System.out.println(kid1.toString()); } //end main method } //end class

我试图研究多个构造函数,它真的没有帮助。 我试图研究toString()方法,并尝试使用之前创建的toString()方法逻辑,但是这是全新的,所以它从来没有工作。

帮帮我?

toString应该返回一个String 。

public String toString() { return "Name: '" + this.name + "', Height: '" + this.height + "', Birthday: '" + this.bDay + "'"; }

我建议你使用你的IDE的特性来生成toString方法。 不要手动编码。

例如,Eclipse可以这样做,只要右键单击源代码并选择Source > Generate toString

Java toString()方法

如果要将任何对象表示为一个字符串,则toString()方法就会存在。

toString()方法返回对象的字符串表示形式。

如果打印任何对象,java编译器会在内部调用对象上的toString()方法。 所以重写toString()方法,返回所需的输出,它可以是一个对象的状态等,取决于你的实现。

Java的toString()方法的优点

通过覆盖Object类的toString()方法,我们可以返回对象的值,所以我们不需要编写太多的代码。

不带toString()方法的输出

class Student{ int id; String name; String address; Student(int id, String name, String address){ this.id=id; this.name=name; this.address=address; } public static void main(String args[]){ Student s1=new Student(100,”Joe”,”success”); Student s2=new Student(50,”Jeff”,”fail”); System.out.println(s1);//compiler writes here s1.toString() System.out.println(s2);//compiler writes here s2.toString() } } Output:Student@2kaa9dc Student@4bbc148

你可以在上面的例子#1中看到。 打印s1和s2打印的对象的哈希码值,但我想打印这些对象的值。 由于java编译器内部调用了toString()方法,覆盖此方法将返回指定的值。 让我们用下面的例子来理解它:

Example#2 Output with overriding toString() method class Student{ int id; String name; String address; Student(int id, String name, String address){ this.id=id; this.name=name; this.address=address; } //overriding the toString() method public String toString(){ return id+" "+name+" "+address; } public static void main(String args[]){ Student s1=new Student(100,”Joe”,”success”); Student s2=new Student(50,”Jeff”,”fail”); System.out.println(s1);//compiler writes here s1.toString() System.out.println(s2);//compiler writes here s2.toString() } } Output:100 Joe success 50 Jeff fail

请注意,toString()大多与Java中的多态的概念有关。 在Eclipse中,尝试单击toString()并右键单击它。然后单击“打开声明”并查看超类toString()的来源。

你可以在toString()中创建新的对象。 使用

return "Name = " + this.name +" height= " + this.height;

代替

return Kid(this.name, this.height, this.bDay);

您可以根据需要更改返回字符串。 还有其他的方式来存储日期而不是calander。

你不能像一个普通的方法那样调用一个构造函数,你只能用new调用它来创建一个新的对象:

Kid newKid = new Kid(this.name, this.height, this.bDay);

但是从你的toString()方法构造一个新的对象并不是你想要做的。

以下代码是一个示例。 基于相同的问题,而不是使用基于IDE的转换,是否有一个更快的方式来实现,以便将来的变化发生时,我们不需要一遍又一遍地修改值?

@Override public String toString() { return "ContractDTO{" + "contractId='" + contractId + '\'' + ", contractTemplateId='" + contractTemplateId + '\'' + '}'; }

那么其实你需要返回这样的东西,因为toString必须返回一个字符串

public String toString() { return "Name :" + this.name + "whatever :" + this.whatever + ""; }

而你实际上在构造函数中做了一些错误的事情,你把用户设置的变量设置为名字,而你需要做相反的事情。 你不应该做什么

n = this.name

你应该做什么

this.name = n

希望这有助于感谢

我们甚至可以这样写:在类中创建一个新的String对象,然后在构造方法中指定它,然后在toString方法中返回

public class Student{ int id; String name; String address; String details; Student(int id, String name, String address){ this.id=id; this.name=name; this.address=address; this.details=id+" "+name+" "+address; } //overriding the toString() method public String toString(){ return details; } public static void main(String args[]){ Student s1=new Student(100,"Joe","success"); Student s2=new Student(50,"Jeff","fail"); System.out.println(s1);//compiler writes here s1.toString() System.out.println(s2);//compiler writes here s2.toString() } }

java 中覆 写tostring_如何在Java中正确覆盖toString()?相关推荐

  1. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  2. Java 之 覆写, 重载, 隐藏, 遮蔽, 遮掩

    文章目录 覆写(override) 存在于子类与父类间 重载(overload) 存在于类内部 隐藏(hide) 存在于子类和父类间 遮蔽 (shadow) 存在于 类内部 遮掩(obscure) 存 ...

  3. java整数的因式分解_如何在Java中找到整数的质数-因式分解

    java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...

  4. java如何实取随机数_java - 如何在Kotlin中获取随机数?

    java - 如何在Kotlin中获取随机数? 可以在2个参数之间返回随机整数的通用方法,如ruby,可以使用rand(0..n). 有什么建议吗? 16个解决方案 208 votes 我的建议是In ...

  5. Java poi 列移动_如何在java xssf中移動列poi

    如何將現有列數據和格式化到Apache POI中的下一列並將下一列移到右側.如何在java xssf中移動列poi 我試過了. 讓說我的代碼是這樣... XSSFCell oldCell = work ...

  6. [改善Java代码]覆写equals方法必须覆写hashCode方法

    覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...

  7. java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

    java中转json字符串 在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON. ...

  8. java swing 列表框_如何在Swing中使用列表框?

    下面的示例展示了如何在Java Swing应用程序中使用标准列表框. 使用以下API - JList - 创建标准列表. JList.setSelectedIndex(index); - 选择项目. ...

  9. java中求组快速排序函数,如何在Java中实现快速排序?

    成为专业认证的快速排序是一种分而治之的算法.在分治算法的设计范式中,我们先递归地将问题分解成子问题,然后再求解子问题,最后将求解结果进行组合得到最终结果.在本文中,我们将重点讨论Java中的快速排序本 ...

最新文章

  1. mysql中以下正确的sql是_总结MySQL中SQL语法的使用
  2. Cetos 7 系统安装备注事项
  3. nuxt.js 配置后端的请求地址
  4. vivo手机系统升级后没有服务器,为什么安卓手机升级到了12GB还没有iPhone 4GB运行快呢?...
  5. 图像超分辨率增强ESRGAN运行教程,有数据
  6. 字符串资源的内部格式
  7. create-react-app脚手架中配置webpack的方法
  8. 超全超详细Rime中州韵输入法配置指南
  9. 个人健康管理系统1.0(微信小程序+java(ssm框架)+layui+爬虫+mysql)(新手学习之路,带源码,仅供学习)
  10. Android OpenGL ES 2.0(六)--- 纹理过滤
  11. 基于Nginx搭建RTMP-HLS视频直播服务器(推流+拉流)
  12. 和风天气开发平台使用
  13. 论如何举办一个承载400人的比赛(XUPT新生赛承办小记)
  14. 关于电机编码器的知识汇总,都在这里了!
  15. ST MCSDK 初探
  16. 【网页制作】CSS基本选择器讲解(附讲解视频)
  17. Linux源码编译-编译哪些设备树
  18. Ubuntu18.04 网卡问题解决(?)
  19. 大二综合项目:数据库Mysql,Navicat
  20. 使用vimdiff做git的diff与merge工具

热门文章

  1. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类
  2. numpy基础(part9)--矩阵
  3. HTML基础(part3)--常用标签之HTML标签
  4. 测试服务器最大链接数_JMeter压力测试集合点教程
  5. python程序 爱意_程序员式优雅表白,教你用python代码画爱心
  6. 关于 Node.js 应用里使用 winston 进行日志记录的最佳实践
  7. SAP ABAP Platform 1909最新版的 docker 镜像
  8. Cannot find package module @sap/cds/common
  9. Angular路由里的canActivate用法
  10. HTML css嵌套的一个例子