toString方法,其返回值类型为String类型,用于返回表示对象值的字符串,返回类名和它的引用地址(散列码 hashCode)toString方法是Object类中的一个实例方法,所有的java类都是Object的子类,因此所有的java对象都具有toString方法返回表示对象值得字符串

绝大多数(但不是全部)的toString方法都遵循的格式:类的名字,随后是一对方括号括起来的域值。

格式: 类名[域值]

例: public String toString() {

return "Cat[name=" + name

+ ",age=" + age

+ ",color=" + color

+ "]";

}

但是,最好通过调用getClass().getName()获得类名的字符串,而不要将类名硬加到toString方法中。

例:public String toString() {

return getClass().getName()

+ "[name=" + name

+ ",age=" + age

+ ",color=" + color

+ "]";

}

toString方法也可以供子类调用,如果超类使用了getClass().getName(),那么子类只要super.toString()就可以了。在设计子类的时候,再将子类域的描述添加进去。public class LiCat extends Cat{

//...省略成员变量、方法等

public String toString() {

return super.toString()

+ "[eat=" + eat

+  "]";

}

}

随处可见toString方法的主要原因是:只要对象与一个字符串通过操作符“+”连接起来,java编译就会自动地调用toString方法,以便获得这个对象的字符串描述在调用cat1.toString的地方可以用 “” + cat1 代替。

“” + cat1 这条语句将 一个空串 与 cat1的字符串表示 相连接,这里的cat1就相当于cat1.toString。与toString不同的是,如果x是基本类型(int,float,char,boolean),这条语句照样能够执行。

如果cat1是任意一个对象,并且调用System.out.println(cat1);

println方法就会直接将cat1看作cat1.toString调用,并打印输出得到的字符串。//此处的 cat1 是个对象

String message = "" + cat1;

System.out.println(message); //相当于System.out.println("" + cat1);也相当于下一条代码

System.out.println(cat1); //也相当于下一条代码

System.out.println(cat1.toString());

//基本数据类型

int q = 1;

System.out.println("a = " + q); //相当于下一条代码

System.out.println(q);

返回类名和它的引用地址

Object类定义了toString方法,用来打印输出对象所属的类名和散列码(引用地址) Object aa = new Object();

System.out.println(aa.toString());

//输出:java.lang.Object@15db9742

java.lang.Object@15db9742 是你new的对象转成字符串的值,返回的是getClass().getName() + ‘@’ + Integer.toHexString(hashCode())

也就是,默认的类的toString()方法会输出:这个类的类名+@+对象哈希码的无符号十六进制值数组的toString

数组也继承了Object类的toString方法,数组类型将按照旧的格式打印

例: int[] a = {2,3,5,7,11,13};

String s1 = "" + a;

System.out.println(s1);

//输出:[I@15db9742

字符串“ [I@15db9742 ”(前缀 [I 表明是一个整型数组 )。那么我们要怎么让它返回表示对象值得字符串呢?

我们可以使用Arrays.toString方法

例: int[] b = {2,3,5,7,11,13};

String s2 = Arrays.toString(b);

System.out.println(s2);

//输出:[2, 3, 5, 7, 11, 13]

要想打印多维数组(就是数组的数组),那么就需要使用Arrays.deepToString方法

例: int[][] c = {

{1,2,3},

{4,5,6},

{7,8,9}

};

String s3 = Arrays.deepToString(c);

System.out.println(s3);

//输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

下面是本次笔记中超类、子类、测试类的所有代码(注意:超类、子类、测试类不在同一个Class文件中)

超类:

tostring/Cat.javapackage tostring;public class Cat {

//定义成员变量(域),注意private(私有的),封装性

private String name;

private int age;

private String color;

//构造方法

public Cat() {

}

//构造方法的重载

public Cat(String name,int age,String color) {

this.name = name;

this.age = age;

this.color = color;

}

//set方法(修改器)

public void setName(String name) {

this.name = name;

}

public void setAge(int age) {

this.age = age;

}

public void setColor(String color) {

this.color = color;

}

//get方法(访问器)

public String getName() {

return this.name;

}

public int getAge() {

return this.age;

}

public String getColor() {

return this.color;

}

// 不建议使用

// public String toString() {

// return "Cat[name=" + name

// + ",age=" + age

// + ",color=" + color

// + "]";

// }

public String toString() {

return getClass().getName()

+ "[name=" + name

+ ",age=" + age

+ ",color=" + color

+ "]";

}

}

子类:(extends 用于继承的关键词)

tostring/LiCat.javapackage tostring;public class LiCat extends Cat{

//成员变量

private String eat;

//构造方法

public LiCat() {

super();

}

public LiCat(String name,int age,String color,String eat) {

super(name,age,color);

this.eat = eat;

}

//get、set方法

public String getEat() {

return eat;

} public void setEat(String eat) {

this.eat = eat;

}

//子类将父类的方法覆盖

public String toString() {

return super.toString()

+ "[eat=" + eat

+  "]";

}

}

测试类:

tostring/CatTest01.javapackage tostring;import java.util.Arrays;public class CatTest01 { public static void main(String[] args) {

LiCat cat1 = new LiCat("小白",11,"白色","鱼");

// Cat cat1 = new Cat();

// cat1.setName("小白");

// cat1.setAge(11);

// cat1.setColor("白色");

//返回表示对象值的字符串

//此处的 cat1 是个对象

String message = "" + cat1;

System.out.println(message); //相当于System.out.println("" + cat1);也相当于下一条代码

System.out.println(cat1); //也相当于下一条代码

System.out.println(cat1.toString());

//输出三行:a.LiCat[name=小白,age=11,color=白色][eat=鱼]

//基本数据类型

int q = 1;

System.out.println("a = " + q); //相当于下一条代码

System.out.println(q);

//输出a = 1和1

//返回类名和它的引用地址

Object aa = new Object();

System.out.println(aa.toString());

//输出:java.lang.Object@15db9742

//

int[] a = {2,3,5,7,11,13};

String s1 = "" + a;

System.out.println(s1);

//输出:[I@15db9742

//打印出一维数组

int[] b = {2,3,5,7,11,13};

String s2 = Arrays.toString(b);

System.out.println(s2);

//输出:[2, 3, 5, 7, 11, 13]

//输出多维数组

int[][] c = {

{1,2,3},

{4,5,6},

{7,8,9}

};

String s3 = Arrays.deepToString(c);

System.out.println(s3);

//输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

}

}

JAVA中有一个根类Object,Object是是所有类的父类;  如果在申明中没有使用extends来继承Object,系统会默认

public class a{

}

等价于:

public class a extends Object{

s

}

系统默认的引入java.lang这个包,所以在编译的时候不用在引入这个包 ,由于a是继承的Object这个类  那么a这个类拥有Object这个类的所有方法 Obejct中有一个toString的方法; package toString的方法;

public class TesttoString {

public static void main(String[] args) {

A a = new A();

//打印输出a  此时相当于输出a.toString();

System.out.println(a);

}

}

class A{

}

运行结果:

toString的方法.A@158f9d3

分析:toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的外汇返佣信息表达式。建议所有子类都重写此方法。Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + '@' + Integer.toHexString(hashCode())

下面对A类中的toString进行重写,使其返回一个字符串: package toString的方法;

public class TesttoString {

public static void main(String[] args) {

A a = new A();

//打印输出a  此时相当于输出a.toString();

System.out.println(a);

}

}

class A{

//在A类中重写一个toString方法

//在重写toString()方法的时候to不能使大写

public String toString(){

return"我是重写的toString()方法";

}

}

运算结果:

我是重写的toString()方法

分析:如果不想使用默认的toString方法我们可以在类中重写其方法,该对象的字符串表示形式。

Object类是JDK默认提供的一个类,所有类默认继承Object类。

Object类是所有类的父类,使用Object可以接受所有类的对象。

那么如何体现(证明),Object类是所有类的父类呢?

如果可以发生向上转型,则可以说明Object类是所有类的子类:

//默认继承(并没有写extends Object )

class Person{}

class Student{}

public class Test1 {

public static void main(String[] args) {

//将一个Person类的对象给Object(向上转型)

//即:Object obj = new Person();

fun(new Person());

fun(new Student());

}

public static void fun(Object obj){

System.out.println(obj);

}

}

此处系统输出(pringt/println)输出对象时,默认调用对象的toString()方法。2.取得对象信息toString();

  使用系统输出输出对象时,默认输出的是一个地址编码。

  而使用系统输出输出String常量时,输出的是字符串内容。

  本质原因在于Object类提供的toString()有没有被类所覆写。class Person {

private String name;

private int age;    public Person(String name, int age) {

this.age = age;

this.name = name;

}

}public class Test1 {

public static void main(String[] args) {

fun(new Person("fwb",20) );

fun("Hello");

}

public static void fun(Object obj) {

System.out.println(obj.toString()); // 默认输出对象调用的就是toString()方法}}

}

}

覆写toString()方法:

class Person {

private String name;

private int age;    public Person(String name, int age) {

this.age = age;

this.name = name;

}    public String toString() {

return "姓名为:" + this.name + "年龄为:" + this.age;

}

}public class Test1 {

public static void main(String[] args) {

fun(new Person("fwb",20) );

fun("Hello");

}

public static void fun(Object obj) {

System.out.println(obj.toString()); // 默认输出对象调用的就是toString()方法}}

}

}

————————————————

原文链接:https://blog.csdn.net/qq_45640831/article/details/102703375

java基础之toString的使用方法的更多相关文章

  1. Java基础关于Map(字典)的方法使用

    Java基础关于Map(字典)的方法使用 java中一般用map与hashmap来创建一个key-value对象 使用前提是要导入方法包: import java.util.HashMap: impo ...

  2. Java中区别.toString() ,(String),valueOf()方法

    在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object.toString(),(String)要转换的对象,St ...

  3. 【java基础 13】两种方法判断hashmap中是否形成环形链表

    导读:额,我介绍的这两种方法,有点蠢啊,小打小闹的那种,后来我查了查资料,别人都起了好高大上的名字,不过,本篇博客,我还是用何下下的风格来写.两种方法,一种是丢手绢法,另外一种,是迷路法. 这两种方法 ...

  4. Java基础系列--03_Java中的方法描述

    方法 (1)方法的定义:就是完成特定功能的代码块. 注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法. (2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2 ...

  5. Java基础集锦——利用Collections.sort方法对list排序

    要想对List进行排序,可以让实体对象实现Comparable接口,重写compareTo方法即可实现按某一属性排序,但是这种写法很单一,只能按照固定的一个属性排序,没变法变化.通过下面这种方法,可以 ...

  6. java基础---->String中的split方法的原理

    这里面主要介绍一下关于String类中的split方法的使用以及原理. split函数的说明 split函数java docs的说明: When there is a positive-width m ...

  7. Java基础知识点2:hashCode()方法

    hashCode()方法基本实现 hashCode方法是Java的Object类所定义的几个基本方法之一.我们可以深入到Object类的源码中去查看: public native int hashCo ...

  8. Java基础:HashMap中putAll方法的疑惑

    最近回顾了下HashMap的源码(JDK1.7),当读到putAll方法时,发现了之前写的TODO标记,当时由于时间匆忙没来得及深究,现在回顾到了就再仔细思考了下 @Override public v ...

  9. java===java基础学习(12)---方法的重写和重载

    覆盖 / 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也 ...

随机推荐

  1. Java集合体系结构(List、Set、Collection、Map的区别和联系)

    Java集合体系结构(List.Set.Collection.Map的区别和联系) 1.Collection 接口存储一组不唯一,无序的对象 2.List 接口存储一组不唯一,有序(插入顺序)的对象 ...

  2. swap的几点理解

    一.什么是swap space(交换分区)? 在Linux系统中,当物理内存满了才使用Swap空间.当系统需要更多的内存资源,并且物理内存已经满了,此时,内存中那些不活跃的pages被移动(move) ...

  3. jQuery实现网页放大镜功能 转载

    京东等电商网站中可以对商品进行放大观察,本文要实现的就是模仿这个放大镜功能,大致效果如下图所示: 简要说明实现思路: 1.原图窗口与放大窗口插入的是同一个图片,不过原图窗口的图片要适当缩小,放大窗口图 ...

  4. php qq第三方登陆

    0.下载QQ登录(QQ互)php版:下载地址:点击打开链接(本文编写时最新版本:V2.1 ) 1.在QQ互联网站注册一个appid,配置网站地址和回调地址. 例:http://yzdd.app1101 ...

  5. 78 Ranking SVM

    0 引言 Ranking-SVM是SVM的一个变种,通过将排序问题转化为二分类问题,并利用标签数据训练特征权重收敛得到特征模型,完成排序任务,是比较经典的机器学习排序算法. 1 中文版介绍 https ...

  6. hdu 4336 Card Collector(状压dp/Min-Max反演)

    传送门 解题思路 第一种方法是状压\(dp\),设\(f(S)\)为状态\(S\)到取完的期望步数,那么\(f(S)\)可以被自己转移到,还可以被\(f(S|(1<<i))\)转移到,\( ...

  7. AcWing 215. 破译密码 (莫比乌斯反演)打卡

    达达正在破解一段密码,他需要回答很多类似的问题: 对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d. 作为达达的同学,达达希望得到你的帮助. ...

  8. Java方式bean的注入以及自动配置

    Java配置 Java配置的本质上,就是使用一个Java类去代替xml配置,这种配置方式在目前最主流的Spring Boot中得到了广泛的使用.1.引入相关Spring相关依赖 2.创建Java配置类 ...

  9. win 10 把秘钥清掉之后查不到秘钥怎么办

    因工作需要系统要激活,跟这网上说的  使用 slmgr.vbs /upk  命令卸载密钥.但是在第2步的时候  slmgr /ipk  ****-****-****-****  无法安装.. 问题现在 ...

  10. Hive 窗口函数

    举例: row_number() over(partition by clue_id order by state_updated desc) 业务举例: select distinct a.clue ...