一、所有的持久化类都要求有无参的构造器持久化类:直接通过JDBC操作数据库的类,将数据增删改到数据库也是一种持久化;比如一个持久化类:public class XxxDAO{ public XxxDAO(){} }这个XxxDAO类必须要有一个无参数构造函数public XxxDAO(){}。二、因为Hibernate必须使用java的反射机制来为你创建对象因为Hibernate只能给你定外规则,叫你必须有这么一个无参构造,因为你其它的有参构造Hibernate根据不可能预知,而Hb可以通过以下的方式来建立这个XxxDAO类的实例。try {
Class c = String.class; Constructor[] cs = c.getConstructors(); Object obj = cs[0].newInstance(null); System.out.println(obj.getClass().getName());
JAVA基础知识
不然,它怎么创建对象呢?
}这个XxxDAO类必须要有一个无参数构造函数public XxxDAO(){}。二、因为Hibernate必须使用java的反射机制来为你创建对象因为Hibernate只能给你定外规则,叫你必须有这么一个无参构造,因为你其它的有参构造Hibernate根据不可能预知,而Hb可以通过以下的方式来建立这个XxxDAO类的实例。try {
Class c = String.class;
Constructor[] cs = c.getConstructors();
Object obj = cs[0].newInstance(null);
System.out.println(obj.getClass().getName());
} catch (Exception e) {
e.printStackTrace();
}以上代码运行后会输出String,这就是原理
public static void main(String[] args) {
try {
Class c = Class.forName("java.lang.String");//因为Hibernate只知道类的包路径和类名,比如java.lang.String
Constructor[] cs = c.getConstructors();//得到类java.lang.String的无参构造器,因为也许你有很多有参的,但是Hibernate不知道。
Object obj = cs[0].newInstance(null);//用无参构造器(也就是构造函数)构造一下java.lang.String的实例
System.out.println(obj.getClass().getName());//查看一下构造出来的实例是什么类(类名)
} catch (Exception e) {
e.printStackTrace();
}
}其实也许Hibernate也可以定义规则,叫你在配置文件告诉它你的有参构造器的结构,但是至少目前没有用这样的规则。所以就其原因,这还是一个规则问题。你照着用就是了。
Class对象可以获取类(class)中的方法以及属性,也可以用它来创建此类的对象
不知道这样理解对不对