有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java什么是没有签名的方法

换句话说,有人能给我解释一下这个目的吗:

Consumer(Producer p) {
    producer = p;
}

在以下方面:

class Consumer extends Thread {
    Producer producer;

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

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

任何帮助都将不胜感激


共 (4) 个答案

  1. # 1 楼答案

    您正在查看Consumer类的构造函数。我能看到的唯一问题是,它没有被赋予访问级别(公共、私人等),所以它看起来会默认为package protected,这意味着只有同一个包中的类才能看到它

  2. # 2 楼答案

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

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

    public Consumer(Producer p) { ... }
    

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

    看看Oracle关于access control的教程

  3. # 3 楼答案

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

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

    至于为什么构造函数没有出现在ide中:这可能是一个配置选项。更重要的是,我们必须知道这是哪个IDE

  4. # 4 楼答案

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