Java - 什么是明显没有签名的方法

时间:2011-01-19 16:09:25

标签: java methods constructor

换句话说,有人可以向我解释这个目的:

Consumer(Producer p) {
    producer = p;
}

在上下文中:

class Consumer extends Thread {
    Producer producer;

    Consumer(Producer p) {
        producer = p;
    }
}

据我所知,它似乎是一个没有签名的方法,或者是一个构造函数,因为它共享类名,但它并没有在我的IDE中显示出来。有人可以解释它是什么以及它做了什么?

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:4)

您正在查看Consumer类的构造函数。我能看到的唯一问题是它没有给出访问级别(公共,私有等等),所以它看起来默认为包受保护,这意味着只有同一个包中的类才能看到它。

答案 1 :(得分:3)

Consumer(Producer p) { ... }Consumer类的构造函数。

您通常会将构造函数视为public,例如:

public Consumer(Producer p) { ... }

但是,当未指定public(或任何访问修饰符,例如protectedprivate)时(对于任何方法或成员,包括构造函数),构造函数仅为可用于声明类的包。

access control上查看Oracle的教程。

答案 2 :(得分:1)

是的,那是一个构造函数。它可能看起来像<没有签名的方法'在语法上(更具体地说,构造函数不能有返回类型,但可能有访问修饰符,当然还有参数),但它确实与方法完全不同在几个方面。

构造函数的目的是创建类的实例(对象)。对于一些相对奇特的异常(克隆和反序列化),每个Java对象都是通过调用构造函数来创建的。每个类至少有一个构造函数,但如果没有声明超类具有没有参数的构造函数,则编译器会隐式添加一个无参数构造函数,除了调用超类构造函数之外什么都不做。类似地,任何构造函数所做的第一件事就是调用超类构造函数。同样,如果超类中存在无参数构造函数,则这可能是隐式的。

至于为什么构造函数不会出现在你的ide中:它可能是一个配置选项。要说更多,我们必须知道是哪个IDE。

答案 3 :(得分:0)

如前所述,这是一个受包受保护的构造函数,即它只能从类本身的方法或同一个包中的其他类调用。我不确定它对更常用的protectedprivate构造函数有什么好处,它们阻止类直接实例化并且通常用于实现Singleton模式。 / p>