黑马程序员技术交流社区

标题: 怎么用内省给属性设置默认值啊 [打印本页]

作者: 柳雷    时间: 2012-7-23 19:41
标题: 怎么用内省给属性设置默认值啊
已知一个类中属性有的类型
要求对已知类型属性设置默认值,该怎么做啊?
作者: 刘海源    时间: 2012-7-23 22:05
如果你不初始化的话,那么内存会自己给成员变量初始化值的
String类型的为null int类型的为0,
如果你想要给类初始化的话,那么你就加上static静态这个关键字,这随着类
的加载而加载,那么就不需要对象去调用了,直接有类名调用奥

作者: 崔云飞    时间: 2012-7-23 22:13
如果是给类的属性设置默认值的话,应该在构造函数中初始化,构造函数的作用就是初始化
作者: 李菁    时间: 2012-7-23 22:33
public class bbb {  //设定一个JavaBean        private int x ;
        public bbb(int x)
        {
                this.x=x ;
        }
        public int getX()
        {
                return x ;
        }
        public void  setX(int x)
        {
                this.x=x ;
        }
}

import java.io.File;
import java.lang.reflect.*;
import java.beans.PropertyDescriptor;
public class Test {
        public static void main(String[] args)  throws Exception
        {
                bbb t=new bbb(3) ;     //创建一个JavaBean对象
                String propertyName="x";     //我们对x属性进行内省操作,定义个String类 保存属性名字
                PropertyDescriptor pt1=new PropertyDescriptor(propertyName,bbb.class) ;  //创建一个 属性描述符类  PropertyDescriptor类 参数是 属性名字和 JavaBean类的字节码                Method m1=pt1.getReadMethod() ;  //获得设置方法的映射类其实跟反射差不多,通过属性描述符返回 Method对象 ,这个对象是  getX()方法的映射对象                Object obj=m1.invoke(t);    //调用t对象的getX方法,并返回结果 ,结果自动装箱                System.out.println(obj);      //打印结果    
                PropertyDescriptor pt2=new PropertyDescriptor(propertyName,bbb.class); //创建属性描述类                Method m2=pt2.getWriteMethod() ;//获得设置方法  对应的映射对象
                m2.invoke(t, 7);  //执行 t对象的setX方法  
                System.out.println(t.getX());  //打印结果        }
}
结果为3,7




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