咱们来详细说说在Java这玩意儿里面括号括起来的那个方法到底是怎么回事儿, 还有为啥这么重要的道理。
在 Java 开发中,() 是我们最常用的方法之一。无论是调试程序、输出日志,还是快速查看对象内容,() 方法都起到了至关重要的作用。本篇博客将带你全面了解 () 的作用、默认实现的局限性以及如何更高效地使用它。
1. 什么是 () 方法?
() 是 Java 的 类中的一个方法,它的作用是返回对象的字符串表示形式。由于所有类都默认继承了 ,因此每个类都可以直接调用 ()。
通常情况下, 括号里面所包含的特定对象或者内容, 其被呈现出来所采用的样式和排列方式是这样的:
getClass().getName() + '@' + Integer.toHexString(hashCode())举个例子:
class Example {private String name;
private int age;
}
Example obj = new Example();
System.out.println(obj);
用户提交的最终呈现形式或许会是这种情形。
Example@4e25154f这就是缺省状况下的()输出成果, 它只是将类的名称与内部的哈希值直接展示了出来, 所能够提供的具体信息内容实在是太少了一点儿了, 完全没法让人做到一目了然。
2. 大家通常都会去使用那个默认的括号实现方法, 但是到底存在哪些问题是值得讨论和关注的呢?
目前, 在默认的实现方案当中, 主要存在着以下几个方面的不足之处:
因为看不到对象内部那些字段的具体数值, 所以显得资料匮乏。这种做法不够直观, 程序只会把类名称和哈希码给显示出来, 让人在调试的时候很难迅速搞清楚对象现在的状况是怎样的。
这种呈现方式可读性很差, 特别是面对结构复杂的类时, 系统默认提供的那个括号加上内容的方式几乎起不到任何帮助作用, 这种情况在使用于日志文件或进行调试操作的时候表现得尤为明显。
所以在进行实际的代码开发工作的过程中, 我们一般是采取重写()这个具体方法的相关措施来实施操作的, 最终的目的就是为了让它具备一种能力, 这种能力体现在它可以返回出那些更有意义、更能够解释当前状况的具体内容。
3. 让那些对象的内容,变得清清楚楚, 让人一看就明白, 实现一目了然的效果。
我们重写该方法是出于这样的目的, 就是让它去显示出对象里面的详细信息, 并且把重点是放在那些字段的值上面, 下面我们来用一个最简单的例子进行说明:
class Example {private String name;
private int age;
public Example(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Example{name='" + name + "', age=" + age + "}";
}
}
Example obj = new Example("Alice", 25);
System.out.println(obj);
运行结果:
Example{name='Alice', age=25}这样做的话, 所显示出的结果非常清晰明确, 它将这个对象里面的每一个字段信息全都展现了出来, 从而使得后续的调试工作以及分析工作都变得更加方便和轻松。
4. 通过使用相关工具, 让系统在后台自动完成(括号内方法)生成这一操作的。
虽然编写手写的空括号即方法, 这件事从技术难度上来看并没有显得多么复杂, 但是, 在面对一个类内部拥有着数量众多字段的这样的情境下, 那么执行这样的手写工作而言, 就确实会显得相当繁琐与耗时了。
所以, 当前系统中提供了由@Data注解这一特性, 其功能便是可以直接自动生成那些对应的手写方法内容, 从而在整体上对于开发环节的效率提升能够起到极大作用。
示例:
import lombok.Data;@Data
class Example {
private String name;
private int age;
}
Example obj = new Example();
obj.setName("Alice");
obj.setAge(25);
System.out.println(obj);
运行结果:
Example(name=Alice, age=25)它的好处在什么地方呢?
排除敏感字段:
@Dataclass User {
private String username;
private String password;
@ToString.Exclude
private String password;
}
User user = new User();
user.setUsername("admin");
user.setPassword("12345");
System.out.println(user);
运行结果:
User(username=admin)5. 人们会问, 为什么直观这个东西重要得让人不得不去重视它呢?
在进行开发工作的时候, 那种直观性所能够呈现出来的直接可感知的特性, 可以为我们提供诸如以下这样的一些好处:
这样做是非常方便来进行调试的, 因为我们可以通过打印对象的方式来, 快速地了解到它的现在所处的状态, 而不用一个一个地去访问每一个字段。在进行日志输出的时候, 这样是比较便于记录对象的详细信息的, 这就有助于帮助咱们来排查存在的问题。
还可以进一步增强代码的可读性,也就是把对象的可解释性给提高了, 这样可以让其他的开发者更容易去理解现有的代码内容。这是第六点, 也是总结的部分。
在平常开发的过程里头, 要把()这个办法给用合理了, 特别是在那些需要频繁调试或者是要输出日志的场合之中, 这样做的话能够很显著并且很明显地去提升开发的效率和那个代码的质量。你去试试看, 让你的()变得更高效、更省心一些。