为什么可以实例化String而不可能为Number(Long,Double,Integer ...)?

时间:2013-12-25 12:41:29

标签: java string instantiation long-integer

嗨,为什么可以实例化String而不是Numbers。我为此做了一个例子

public static void main(String[] args) throws InstantiationException,
        IllegalAccessException {
    String a = "s";
    String newInstance = a.getClass().newInstance();
    System.out.println(newInstance);
    Double b = 0d;
    Double newInstance2 = b.getClass().newInstance();
    System.out.println(newInstance2);
}

2 个答案:

答案 0 :(得分:12)

调用newInstace调用默认构造函数。 Double没有。

如果要使用反射进行实例化,则必须使用Class.#getConstructor通过传递适当的参数类型来获取类的一个构造函数,然后通过传递适当的参数类型来调用其方法Constructor#newInstance参数。

答案 1 :(得分:4)

java.lang.String有一个空构造函数(调用new String()与调用new String("")相同)。
另一方面,数字没有no-arg构造函数(无论如何new Double()的值是什么?没有等价于“空数”),因此无法调用方式,即使不是通过反思。