java 中覆 写tostring_如何在Java中正确覆盖toString()?
如何在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()?相关推荐
- java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?
java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...
- Java 之 覆写, 重载, 隐藏, 遮蔽, 遮掩
文章目录 覆写(override) 存在于子类与父类间 重载(overload) 存在于类内部 隐藏(hide) 存在于子类和父类间 遮蔽 (shadow) 存在于 类内部 遮掩(obscure) 存 ...
- java整数的因式分解_如何在Java中找到整数的质数-因式分解
java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...
- java如何实取随机数_java - 如何在Kotlin中获取随机数?
java - 如何在Kotlin中获取随机数? 可以在2个参数之间返回随机整数的通用方法,如ruby,可以使用rand(0..n). 有什么建议吗? 16个解决方案 208 votes 我的建议是In ...
- Java poi 列移动_如何在java xssf中移動列poi
如何將現有列數據和格式化到Apache POI中的下一列並將下一列移到右側.如何在java xssf中移動列poi 我試過了. 讓說我的代碼是這樣... XSSFCell oldCell = work ...
- [改善Java代码]覆写equals方法必须覆写hashCode方法
覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...
- java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧
java中转json字符串 在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON. ...
- java swing 列表框_如何在Swing中使用列表框?
下面的示例展示了如何在Java Swing应用程序中使用标准列表框. 使用以下API - JList - 创建标准列表. JList.setSelectedIndex(index); - 选择项目. ...
- java中求组快速排序函数,如何在Java中实现快速排序?
成为专业认证的快速排序是一种分而治之的算法.在分治算法的设计范式中,我们先递归地将问题分解成子问题,然后再求解子问题,最后将求解结果进行组合得到最终结果.在本文中,我们将重点讨论Java中的快速排序本 ...
最新文章
- mysql中以下正确的sql是_总结MySQL中SQL语法的使用
- Cetos 7 系统安装备注事项
- nuxt.js 配置后端的请求地址
- vivo手机系统升级后没有服务器,为什么安卓手机升级到了12GB还没有iPhone 4GB运行快呢?...
- 图像超分辨率增强ESRGAN运行教程,有数据
- 字符串资源的内部格式
- create-react-app脚手架中配置webpack的方法
- 超全超详细Rime中州韵输入法配置指南
- 个人健康管理系统1.0(微信小程序+java(ssm框架)+layui+爬虫+mysql)(新手学习之路,带源码,仅供学习)
- Android OpenGL ES 2.0(六)--- 纹理过滤
- 基于Nginx搭建RTMP-HLS视频直播服务器(推流+拉流)
- 和风天气开发平台使用
- 论如何举办一个承载400人的比赛(XUPT新生赛承办小记)
- 关于电机编码器的知识汇总,都在这里了!
- ST MCSDK 初探
- 【网页制作】CSS基本选择器讲解(附讲解视频)
- Linux源码编译-编译哪些设备树
- Ubuntu18.04 网卡问题解决(?)
- 大二综合项目:数据库Mysql,Navicat
- 使用vimdiff做git的diff与merge工具
热门文章
- 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类
- numpy基础(part9)--矩阵
- HTML基础(part3)--常用标签之HTML标签
- 测试服务器最大链接数_JMeter压力测试集合点教程
- python程序 爱意_程序员式优雅表白,教你用python代码画爱心
- 关于 Node.js 应用里使用 winston 进行日志记录的最佳实践
- SAP ABAP Platform 1909最新版的 docker 镜像
- Cannot find package module @sap/cds/common
- Angular路由里的canActivate用法
- HTML css嵌套的一个例子