Consumer(Producer p) {
producer = p;
}
在上下文中:
class Consumer extends Thread {
Producer producer;
Consumer(Producer p) {
producer = p;
}
}
据我所知,它似乎是一个没有签名的方法,或者是一个构造函数,因为它共享类名,但它并没有在我的IDE中显示出来。有人可以解释它是什么以及它做了什么?
非常感谢任何帮助。
答案 0 :(得分:4)
您正在查看Consumer类的构造函数。我能看到的唯一问题是它没有给出访问级别(公共,私有等等),所以它看起来默认为包受保护,这意味着只有同一个包中的类才能看到它。
答案 1 :(得分:3)
Consumer(Producer p) { ... }
是Consumer
类的构造函数。
您通常会将构造函数视为public
,例如:
public Consumer(Producer p) { ... }
但是,当未指定public
(或任何访问修饰符,例如protected
或private
)时(对于任何方法或成员,包括构造函数),构造函数仅为可用于声明类的包。
在access control上查看Oracle的教程。
答案 2 :(得分:1)
是的,那是一个构造函数。它可能看起来像<没有签名的方法'在语法上(更具体地说,构造函数不能有返回类型,但可能有访问修饰符,当然还有参数),但它确实与方法完全不同在几个方面。
构造函数的目的是创建类的实例(对象)。对于一些相对奇特的异常(克隆和反序列化),每个Java对象都是通过调用构造函数来创建的。每个类至少有一个构造函数,但如果没有声明超类具有没有参数的构造函数,则编译器会隐式添加一个无参数构造函数,除了调用超类构造函数之外什么都不做。类似地,任何构造函数所做的第一件事就是调用超类构造函数。同样,如果超类中存在无参数构造函数,则这可能是隐式的。
至于为什么构造函数不会出现在你的ide中:它可能是一个配置选项。要说更多,我们必须知道是哪个IDE。
答案 3 :(得分:0)
如前所述,这是一个受包受保护的构造函数,即它只能从类本身的方法或同一个包中的其他类调用。我不确定它对更常用的protected
或private
构造函数有什么好处,它们阻止类直接实例化并且通常用于实现Singleton模式。 / p>