发新话题
移动帖子 加入精华 加入置顶 加入收藏 关注此帖

弱弱的问一句,无参构造器是如何工作的,为什么关于JavaBean的简约规定中有无参构造器这一条





弱弱的问一句,无参构造器是如何工作的,为什么关于JavaBean的简约规定中有无参构造器这一条

如题,突然想到这个问题,却发现自己并不是很清楚,特别是在对JavaBean规定中一定要有无参构造器这条规定,我在<<java学习笔记>>中看到作者这样说:JavaBean利用反射机制自动收集用户信息,是不是因为动态的为对象属性赋值的时候需要调用无参构造器呢,是不是无参构造器此时的工作方式就是相当于
public Test(int i, Sting j) {
    this.i =i;
    this.j =j;
}
呢,请高手指教,
Everyone is No 1~``



编辑 回复 快速回复 TOP


Re:弱弱的问一句,无参构造器是如何工作的,为什么关于JavaBean的简约规定中有无参构造器这一条

javabean
<jsp:useBean id = "test" class = "com.zhankgai.Test" scope = "page"/>
写上这一句,其实就是实例化了Test对象。而他调用的正是无参数构造,所以无参数构造也在javabean的简约规定中,如果覆盖了无参构造就会报错(也就是没有无参构造),因为它找不到创造对象的构造方法。
也可以这样写:
<%@ page import = "com.zhangkai.Test"%>
<%
Test test = new Test();
%>
应该是一样的。
<jsp:useBean>写起来简单,并且setProperty赋值的时候也很方法。用 * 就ok了。
我这么理解的。
.不.要.轻.信.你.听.到.的.每.件.事..不.要.花.光.你.的.所.有..不.要.想.睡.多.久.就.睡.多.久.]无.论.何.时.说.“对.不.起”请.看.着.对.方.的.眼.睛。] 永.远.不要.忽.视.别.人.的.梦.想.。]. .永.远.不.要.以.貌.取.人..。慢.慢.地.说,但.要.迅.速.地.想。..总.有.一.种.平.凡.,让.我.们.泪.流.满.面..
编辑 回复 快速回复 TOP

Re:弱弱的问一句,无参构造器是如何工作的,为什么关于JavaBean的简约规定中有无参构造器这一条

任何类必须初始化,特别是对于javaBean,我们只能通过new MyBean()来初始化一个实例。
在Spring等IOC里面,可以自定义初始化的方法,不过对于更普遍的类,需要一个没有参数的构造器,以方便代码自动进行初始化实例。

快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:弱弱的问一句,无参构造器是如何工作的,为什么关于JavaBean的简约规定中有无参构造器这一条

支持楼上两位的,我也认为是这样的
我看过一个JAVA WEB 视频的,李兴华的
和2楼的讲的差不多
编辑 回复 快速回复 TOP

Re:弱弱的问一句,无参构造器是如何工作的,为什么关于JavaBean的简约规定中有无参构造器这一条

就初始化用!
给你个我写的东西``虽然很烂`但是可以了解反射原理
bean 传一个bean的类型 例:User.class
str 以一个字符传方式传递值 name=xiaomaha,password=123456
name,password 对应bean中的属性.属性必须有set和get方法!
动态调用setXXXX()方法

  public static Object createObject(Class bean, String str) throws Exception, Exception {
    Method[] m = bean.getMethods();
    Object obj = bean.newInstance();
    String[] ss = str.split(",");
    for (int j = 0; j < ss.length; j++) {
      String[] sts = ss[j].split("=");
      for (int i = 0; i < m.length; i++) {
        if (m[i].getName().startsWith("set")) {
          if (m[i].getName().substring(3, m[i].getName().length()).equalsIgnoreCase(sts[0])) {
            Class[] cl = m[i].getParameterTypes();
            for (int k = 0; k < cl.length; k++) {
              if (cl[k].getName().equals("int") || cl[k].getName().equals("java.lang.Integer")) {
                m[i].invoke(obj, new Integer(sts[1]));
              }
              if (cl[k].getName().equals("java.lang.String")) {
                m[i].invoke(obj, sts[1]);
              }
              if (cl[k].getName().equals("java.util.Date")) {
                m[i].invoke(obj, getTheTime(sts[1]));
              }
              if (cl[k].getName().equals("java.sql.Date")) {
                m[i].invoke(obj, getTheTime(sts[1]));
              }
            }
          }
        }
      }
    }
    return obj;
  }
编辑 回复 快速回复 TOP
发新话题