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 ;
}
}