黑马程序员技术交流社区

标题: 构造方法的反射问题 [打印本页]

作者: 李菁    时间: 2012-9-13 00:55
标题: 构造方法的反射问题
import java.io.*;


public class Test {
        public static void main(String[] args)throws Exception {
                try {  
                        //得到类中的默认无参构造方法,怎么会出错呢?
                        Person p=Person.class.getDeclaredConstructor().newInstance();
                        p.printName();
                }catch (Exception e){
                        e.printStackTrace();
                }
        }
        class Person {
                public void printName(){
                        System.out.println("lijing");
                }
        }
}
作者: 武庆东    时间: 2012-9-13 01:21
本帖最后由 武庆东 于 2012-9-13 01:56 编辑

可改为
public class Test {
    public static void main(String[] args)throws Exception {
            try {  
                   //得到类中的默认无参构造方法,怎么会出错呢?原题中Person是内部类,不能直接创建对象
                    Person p=Person.class.getDeclaredConstructor().newInstance();
                    Method me=Person.class.getMethod("printName");
                     me.invoke(p);
            }catch (Exception e){
                    e.printStackTrace();
            }
    }
}
class Person {
    public void printName(){
            System.out.println("lijing");
    }
}
getConstructor
public Constructor<T> getConstructor(Class<?>... parameterTypes)
                              throws NoSuchMethodException,
                                     SecurityException返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法
getDeclaredConstructor
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
                                      throws NoSuchMethodException,
                                             SecurityException返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法

作者: 黑马-王言龙    时间: 2012-9-13 07:25
本帖最后由 黑马-王言龙 于 2012-9-13 07:28 编辑

class Demo {
        public static void main(String[] args) {
                try {  
            //得到类中的默认无参构造方法,怎么会出错呢?
            /*答:静态无法访问非静态,给Person加static即可
            不加静态它会提示找不到Person类*/
           
        Person p = Person.class.getDeclaredConstructor().newInstance();
           
           p.printName();
            }catch (Exception e){
                    e.printStackTrace();
            }
        }
        static class Person {
            public void printName(){
                    System.out.println("lijing");
            }
        }
}
作者: 李菁    时间: 2012-9-13 15:01
明白了,问题已经解决了,谢谢大家!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2