java - 如果类是类型,它们可以保存什么类型的数据?
问题描述
根据 Coursera 上的一个讲座,类是类型,例如,如果我们有一个名为 Book 的类,我们可以编写一行代码-
Book book = new Book("Java",100);
这将在我们称为对象的堆中创建一些数据,并且“Book”类型的变量“book”指向该对象。现在我的问题是,变量“book”可以具有什么样的值?我尝试使用打印它
System.out.println(book);
它打印了这个-
eclipsetest.Book@24d46ca6
('eclipsetest' 是我的包的名称,'Book' 是类)那么这里到底发生了什么?
编辑:不是这个的副本,因为我知道如何使用对象打印数据而不会出现乱码,但我无法理解数据类型可以包含哪些类型的数据类。我还尝试进一步查找它,发现类是“引用”数据类型并持有对对象的“引用”。但是,我不明白他们是如何做到的,因为 Java 没有任何方法可以像 C 那样打印内存地址。
澄清:为了进一步澄清,假设我们写int a;
,现在,我们知道变量'a'可以保存整数值。那么如果我们Book b;
为一个类'Book'编写,变量'b'保存什么样的数据呢?
[已解决]:阅读答案后,我了解到变量 'b' 可以保存对用作 'b' 类型的任何类的对象的引用。而且由于 Java 使用垃圾收集,我们并不真正知道引用在底层是如何工作的。我们所知道的是它们“指向”某物。
解决方案
实际上,类是类型,类可以在其中包含其他类型的实例作为其定义的一部分。此类用户定义类型可以包含其他用户定义类型(类、枚举)或内置类型 ( int
, boolean
)。
鉴于您发布的示例构造函数,该特定类可能定义如下:
public class Book
{
private String title;
private int numberOfPages;
public Book(String title, int numberOfPages)
{
this.title = title;
this.numberOfPages = numberOfPages;
}
}
它包含用户定义的类型String
(作为标准库的一部分为您定义的类)和int
.
在您尝试获取已声明的对象的内容时,您正在尝试打印它。但是,您的打印语句正在将有关引用的信息 , 写入book
输出,而不是转到实际对象的位置(引用指向的内容)并打印有关该对象的信息 - 无法自动执行此操作爪哇。
相反,您将需要重写内置java.lang.toString()
方法,正如@bkbb 所暗示的那样,以便获取存储在对象中的实际信息。尝试打印时,您要么需要显式调用此方法
System.out.println(book.toString());
或使其作为字符串操作的一部分自动调用
System.out.println("My book is: " + book);
推荐阅读
- php - PHP中有什么方法可以在会话中存储$variable的$variable
- php - Doctrine Query Builder:如何构建包含“ON DUPLICATE KEY UPDATE”的查询
- android - 使用 Kotlin 协程将 Java 线程处理消息转换为队列
- r - 如何在 R 中 dbSendQuery() 的更新查询中将变量名称分配给“SET”参数
- bash - sed 模式部分作为其他 bash 函数的输入
- python - Vscode 无法使用“转到定义”功能,无法在 PROBLEMS 中打开文件
- c# - 右键单击单词建议(Hunspell)
- bash - 将 zip 文件批量重命名为原始名称,但删除部分名称
- java - 没有错误:但 XSLT 转换没有通过 Javax.xml.transform 发生
- css - 为什么无法在占位符上堆叠 CSS 跨浏览器规则?