`

Constructor<?> cons[]=demo.getConstructors();在JDK1.7报错

阅读更多

Constructor<?> cons[]=demo.getConstructors();在JDK1.7报错,在JDK1.6可以运行

百度了一下,发现这篇文章,java反射中构造函数的问题

http://bbs.csdn.net/topics/390183924

 

package Reflect;
 
import java.lang.reflect.Constructor;
 
class Person{
     
    public Person() {
         
    }
    public Person(String name){
        this.name=name;
    }
    public Person(int age){
        this.age=age;
    }
    public Person(String name, int age) {
        this.age=age;
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    @Override
    public String toString(){
        return "["+this.name+"  "+this.age+"]";
    }
    private String name;
    private int age;
}
 
class Hello{
    public static void main(String[] args) {
        Class<?> demo=null;
        try{
            demo=Class.forName("Reflect.Person");
        }catch (Exception e) {
            e.printStackTrace();
        }
        Person per1=null;
        Person per2=null;
        Person per3=null;
        Person per4=null;
        //取得全部的构造函数
        Constructor<?> cons[]=demo.getConstructors();
        try{
            per1=(Person)cons[0].newInstance();
            per2=(Person)cons[1].newInstance("Rollen");
            per3=(Person)cons[2].newInstance(20);
            per4=(Person)cons[3].newInstance("Rollen",20);
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println(per1);
        System.out.println(per2);
        System.out.println(per3);
        System.out.println(per4);
    }
}

 

这段程序在JDK1.7运行出错,

null

null

null

null

java.lang.IllegalArgumentException: wrong number of arguments

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:525)

at Reflect.hello.main(hello.java:49)

 

 

JDK1.6可以运行.

上述帖子给出方法

可以修改为

class Hello{
public static void main(String[] args) {
        Class<?> demo = null;
        try {
            demo = Class.forName("Reflect.Person");
            Constructor cons0 = demo.getConstructor();
            Constructor cons1 = demo.getConstructor(String.class);
            Constructor cons2 = demo.getConstructor(int.class);
            Constructor cons3 = demo.getConstructor(String.class,int.class);
             
            Person per1 = (Person) cons0.newInstance();
            Person per2 = (Person) cons1.newInstance("Rollen");
            Person per3 = (Person) cons2.newInstance(20);
            Person per4 = (Person) cons3.newInstance("Rollen", 20);
             
            System.out.println(per1);
            System.out.println(per2);
            System.out.println(per3);
            System.out.println(per4);
        }
        catch (Exception e) {
            e.printStackTrace();
        }       
    }
}
 

 

问题解决.

分享到:
评论

相关推荐

    Java软件开发实战 Java基础与案例开发详解 15-1 反射 共13页.pdf

    Object obj = constructor.newInstance("Hello"); ``` #### 15.4 使用反射调用方法和操作成员变量 反射不仅可以用于创建对象,还可以用于调用方法和修改成员变量: 1. **调用方法**: - 使用`getMethod`或`...

    Reflect.doc

    &gt;[] parameterTypes = constructor.getParameterTypes(); System.out.print("构造方法是:"); for (Class&lt;?&gt; parameterType : parameterTypes) { System.out.print(parameterType.getSimpleName() + " "); } } `...

    Java软件开发实战 Java基础与案例开发详解 15-2 使用Java反射机制 共16页.pdf

    &gt;[] paramTypes = constructor.getParameterTypes(); System.out.println("Constructor: " + Modifier.toString(constructor.getModifiers()) + " " + clazz.getName() + "(" + Arrays.toString(paramTypes) + ")")...

    java反射机制学习(二):通过反射获取构造方法并实例化对象

    Object instance = constructor.newInstance("张三", 25); ``` 这里,`getConstructor(Class&lt;?&gt;... parameterTypes)`方法接收一个类型数组,对应于构造方法的参数类型。 反射机制在很多场景下都很有用,如插件框架...

    Java Reflection(JAVA反射)详解

    Java反射是Java编程语言的核心特性之一,它允许程序员在运行时检查和操作类、接口、字段和方法等对象。这使得Java程序具有高度的灵活性和动态性,可以在不事先知晓具体类信息的情况下处理对象。 首先,要使用Java...

    反射Reflection小应用

    &gt; cons = clazz.getConstructor(paramTypes);` - `Object obj = cons.newInstance(args);` 3. 访问和修改字段:`Field`类用于访问类的字段。可以使用`get()`和`set()`方法读取和设置字段值,包括私有字段: - `...

    Java反射机制

    &gt; constructor = c.getConstructor(Class&lt;?&gt;... parameterTypes);` - 获取所有声明的构造器(包括私有的):`Constructor&lt;?&gt;[] declaredConstructors = c.getDeclaredConstructors();` - 获取指定的声明构造器:`...

    在Java中使用反射API的一个实例

    在Java编程语言中,反射API(Reflection API)是一种强大的工具,允许程序在运行时检查和操作其他类的信息,包括类的结构、字段、方法以及构造器。反射API使得程序员可以在未知类名或方法名的情况下,动态地创建对象...

    java中的反射reflect

    Object instance1 = constructor.newInstance(); Object instance2 = constructor.newInstance(); ``` 在`ParamClass.java`中,可能会定义一个类,其中包含一些参数化的构造器或方法。通过反射,我们可以动态传递...

    java反射笔记

    &gt; getConstructor(Class&lt;?&gt;... parameterTypes)`:获取带有指定参数类型的公共构造函数。 - `Constructor&lt;?&gt; getDeclaredConstructor(Class&lt;?&gt;... parameterTypes)`:获取带有指定参数类型的构造函数,包括私有构造...

    java基础学习内容

    Object obj = constructor.newInstance(args); ``` #### 2.3 获取方法并调用 ```java String methodName = "study"; Class&lt;?&gt;[] paramTypes = {String.class}; Method method = clazz.getMethod(methodName, ...

    反射的核心代码

    `,然后`Object obj = constructor.newInstance(参数...);`。 6. **枚举常量**:通过`getEnumConstants()`方法获取枚举类型的常量数组。 7. **接口和实现类**:通过`getInterfaces()`获取接口列表,`...

    Java 8个反射实例

    - `getConstructor(Class&lt;?&gt;... parameterTypes)`:获取公共构造器。 - `getDeclaredConstructor(Class&lt;?&gt;... parameterTypes)`:获取所有构造器。 - `newInstance(Object... initArgs)`:通过构造器创建对象。 ...

    java反射机制,适合初步接触反射机制的人

    - 使用构造器创建对象:`Object obj = constructor.newInstance(args);` 3. **调用方法** - 获取方法:`Method method = clazz.getMethod(methodName, paramTypes);` - 调用方法:`method.invoke(obj, args);` ...

    Java Reflection (JAVA反射)详解

    Java 反射(Java Reflection)是Java编程语言中的一种高级特性,它允许程序在运行时动态地获取类的信息(如类名、字段、方法等)并进行操作,从而增加了程序的灵活性和动态性。以下是对Java反射机制的详细解释: 1. ...

    Java反射简单例子

    Object instance = constructor.newInstance(); ``` ### 4. 访问字段 使用`getFields()`或`getField()`方法获取类的公共字段,`getDeclaredFields()`获取所有字段(包括私有和受保护的)。然后,可以使用`set()`和...

    反射:java知识中的重点

    Class&lt;Demo&gt; demoClass = Demo.class; ``` 2. **使用`Class.forName(String className)`**: ```java Class&lt;?&gt; demoClass = Class.forName("Reflect.Demo"); ``` 3. **使用对象的`getClass()`方法**: ```java ...

    java反射原理及作用

    &gt; cons = newoneClass.getConstructor(argsClass); return cons.newInstance(args); } ``` 这段代码展示了如何使用反射创建一个新的对象实例。通过 `Class.forName()` 获取类信息,然后根据构造函数的参数类型获取...

    Java反射 事例

    `获取构造器,然后`constructor.newInstance(参数...);`来创建新的对象。 6. 探索类信息:反射还允许我们获取类的元数据,如类名、父类、接口、注解等。 这个“Java反射事例”可能会包含以下代码片段: - 一个...

Global site tag (gtag.js) - Google Analytics