Java getConstructor()返回未实现的构造函数

Java getConstructor()返回未实现的构造函数,java,reflection,constructor,Java,Reflection,Constructor,我正在学习Java中的一些反射特性,在使用此类测试getConstructor()函数时遇到了一个奇怪的问题 公共类整数序列{ 私有整数[]元素; 私有整数大小; 私有整数最大值=100; 公共整数序列(){ 元素=新整数[最大大小]; 尺寸=0; System.out.println(“大家好”); } } 函数返回一个有效的构造函数,但是“Hello Guys”消息永远不会打印出来 此外,如果我删除IntegerSequence的构造函数,它也会返回一个有效的构造函数,并且不会抛出任何异常

我正在学习Java中的一些反射特性,在使用此类测试
getConstructor()
函数时遇到了一个奇怪的问题

公共类整数序列{
私有整数[]元素;
私有整数大小;
私有整数最大值=100;
公共整数序列(){
元素=新整数[最大大小];
尺寸=0;
System.out.println(“大家好”);
}
}
函数返回一个有效的构造函数,但是“Hello Guys”消息永远不会打印出来

此外,如果我删除
IntegerSequence
的构造函数,它也会返回一个有效的构造函数,并且不会抛出任何异常,即使
IntegerSequence
类中不再有任何异常

我读到
getConstructor()
只返回类中编码的构造函数,而不是Java自动生成的构造函数,所以我有点不知所措

以下是使用函数及其输出的代码:

public void invokeDefaultConstructor(Class c){

    Constructor build = null;
    try {
      build = c.getConstructor();
    } catch (NoSuchMethodException e) {
      System.out.println(e);
      e.printStackTrace();
    }
    System.out.println(build.toString());
    System.out.println(build.getName());
  }
控制台输出:

public generics.IntegerSequence()
generics.IntegerSequence

你知道什么会导致这种行为吗?

函数返回一个有效的构造函数,但是“Hello Guys”消息从未打印出来

这是意料之中的,因为你从未去过任何地方。您只能从类中获取构造函数

我读到getConstructor()只返回类中编码的构造函数,而不是Java自动生成的构造函数

我不知道你在哪里读到的。当然不是这样说的

函数返回一个有效的构造函数,但是“Hello Guys”消息从未打印出来

这是意料之中的,因为你从未去过任何地方。您只能从类中获取构造函数

我读到getConstructor()只返回类中编码的构造函数,而不是Java自动生成的构造函数


我不知道你在哪里读到的。当然没有这么说。

除了已经指出的,可能值得补充的是,
getConstructor()
可能确实无法返回默认构造函数。例如,默认构造函数的可见性和它们所在的类的可见性相同。所以,如果类不是
public
默认构造函数也不是public,这意味着
getConstructor()
将无法返回它。或者当默认构造函数在内部类中时,因为这将要求它接受外部类的参数,但
getConstructor()
指定缺少任何参数。好的,谢谢@jb nizet。所以我想当你试图获取一个不存在的公共构造函数时,我并没有真正理解什么时候会抛出一个
NoSuchMethodException
。javadoc再次明确指出:如果找不到匹配的方法,那么除了已经指出的以外,
getConstructor()
可能确实无法返回默认构造函数。例如,默认构造函数的可见性和它们所在的类的可见性相同。所以,如果类不是
public
默认构造函数也不是public,这意味着
getConstructor()
将无法返回它。或者当默认构造函数在内部类中时,因为这将要求它接受外部类的参数,但
getConstructor()
指定缺少任何参数。好的,谢谢@jb nizet。所以我想当你试图获取一个不存在的公共构造函数时,我并没有真正理解什么时候会抛出一个
NoSuchMethodException
。javadoc再次明确指出:如果找不到匹配的方法。“我读到getConstructor()只返回类中编码的构造函数,而不是Java自动生成的构造函数”您能指出其来源吗,因为它可能需要更正/澄清。我可能误解了所说的内容,对不起…”我读到了getConstructor()只返回类中编码的构造函数,而不是Java自动生成的构造函数“你能指出源代码吗,因为它可能需要更正/澄清。我可能误解了所说的内容,对不起。。。