Java:反射构造的调用

来源:互联网 发布:e店宝官方下载3.0 mac 编辑:程序博客网 时间:2024/06/05 08:32

testdemo.java代码如下:

package cn.dujiang.demo;import java.lang.reflect.Constructor;/**public class TestDemo {    public static void main(String[] args) throws Exception {        Class<?> cls = Class.forName("cn.dujiang.demo.Food") ;        Object obj = cls.newInstance() ; //相当于用new来调用无参构造实例化        System.out.println(obj);    }}解释:由于此时Food类没有提供无参构造方法,所以以上的代码是错误的异常如下:Exception in thread "main" java.lang.InstantiationException: cn.dujiang.next.Food    at java.lang.Class.newInstance(Class.java:427)    at cn.dujiang.demo.TestDemo.main(TestDemo.java:19)Caused by: java.lang.NoSuchMethodException: cn.dujiang.next.Food.<init>()    at java.lang.Class.getConstructor0(Class.java:3082)    at java.lang.Class.newInstance(Class.java:412)    ... 1 more错误的含义:因为当前的Food类里面并没有无参构造方法,所以我们的程序无法进行对象实例化。在这种情况下,只能够明确调用又参构造方法在Class类里面提供有一个方法可以取得构造getContractor()  ==================== * @author Dujiang * *//** * 简单Java类的开发之中不管提供有多少个构造方法,请保留无参构造 * @author Dujiang * */public class TestDemo {    public static void main(String[] args) throws Exception {        Class<?> cls = Class.forName("cn.dujiang.next.Food") ;        //public Food(String title, double price ) ; 其找的是类型        Constructor<?> con = cls.getConstructor(String.class,double.class);        Object obj = con.newInstance("鱼香肉丝",8.8) ; //实例化对象        System.out.println(obj);    }}

Food.java 代码如下:

package cn.dujiang.next;public class Food {    private String title ;    private double price ;    public Food(String title, double price ){        this.title = title ;        this.price = price ;    }    @Override    public String toString(){        return "食物名称 :" +this.title+ ",价格 :"+this.price ;    }   }
0 0