黑马程序员-张老师基础加强3-内省

内省:javaBean

JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。

一、setId()的属性名?id

二、isLast()的属性名?last

三、setCPU的属性名是什么??CPU

四、getUPS的属性名是什么??UPS

PropertyDescriptor.

常用方法

Method getReadMethod()

获得应该用于读取属性值的方法。 对应get()方法.

Method getWriteMethod()

获得应该用于写入属性值的方法。 对应set()方法.

构造函数 :PropertyDescriptor(String
propertyName, Class<?> beanClass)

参数:要查找的属性名,和其所属的类

练习:获取一个类中的Age的值

类 PropertyDescriptor:PropertyDescriptor 描述 Java Bean
通过一对存储器方法导出的一个属性。 


public static void main(String[] args) throws  Exception {
//使用反射的方式获取 。
//1.0 获取Class文件
//2.0 获取method(getAge):注意属性名的大小写转换
//使用反射的方式获取
Class clazz =Class.forName("cn.itcast.InspectorDemo");
InspectorDemo Inspector = (InspectorDemo)clazz.newInstance();
Method method = clazz.getMethod("getAge");
int age = (Integer)method.invoke(Inspector);
System.out.println(age);
//设置
Method method1 = clazz.getMethod("setName", String.class);
method1.invoke(Inspector, "zhangsan");
//获取设置后的值
Method method3 = clazz.getMethod("getName");
String name = (String)method3.invoke(Inspector);
System.out.println(name);
//2 使用javaBean获取 使用PropertyDescriptor类
String propertyName= "age";
//注意否早方法里面属性名是以小写字母开头。
PropertyDescriptor pd = new PropertyDescriptor(propertyName,cn.itcast.InspectorDemo.class);
Method methodgetAge = pd.getReadMethod();//read相当于get()方法。writer()相当于set()
InspectorDemo Inspector1 = new InspectorDemo();
Object retval = methodgetAge.invoke(Inspector1);
System.out.println(retval);
//通过javabean设置
Method methodsetAge =pd.getWriteMethod();
methodsetAge.invoke(Inspector1, 30);
}}
class InspectorDemo{
private int age=20;
private String name="lsisi";
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}}

注意:使用反射和内省获取成员的区别是:反射需要知道方法的名字和参数,而内省不需要。

Beanutils工具包

Beanttils.getProperty(Object bean,String name)

Beanttils.getProperty(Object bean,String name,String value)

这连个方法接收都是字符串,因为在javaWeb中通过;浏览器传输带数据都是字符串形式

beanutils方法的应用

BeanUtils.setProperty(rf1, "x",
"9");//数字用字符串形式表示。

BeanUtils.setProperty(rf1,
"birthday.time","111");//可以设置人的头的眼睛的颜色,逐级设置。

map对象和beanutils之间的相互转换。

java1.7 Map map = {map,key,value};

BeanUtils.setProperty(map, key, value)

时间: 2024-12-30 19:00:45

黑马程序员-张老师基础加强3-内省的相关文章

黑马程序员—张老师基础加强7-动态代理

代理: 要为已经存在的多个具有相同接口的目标类的各个方法增加一些系统功能. 例如:异常处理,日志和计算方法的运行时间,事物管理等,怎么做 如 在运行前后增加计算时间的方法.show(){ sop(); } 编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码. 动态代理: 要为系统中的各种接口的类增加代理功能,那需要太多代理类. jvm可以在运行期间动态生成出类的字节码,这种动态生成的类往往被调用作代理类, 即动态代理类. jvm生成动态类

黑马程序员-张老师基础5-泛型

泛型: 泛型只是提供给编译器.在编译完之后,生产字节码文件时就擦除类型信息,<>泛型就不在了 泛型的术语: 整个Arraylist<E>:称为泛型类型. Arraylist<E>中的E称为类型变量或类型参数 整个Arraylisst<Integer>称为:参数化的类型 Arraylist<Integer>中的Integer称为类型参数的实例. Arraylist<Integer>中的<>是typeof Arraylist称

黑马程序员-张老师基础加强4-注解

注解: 注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事.标记可以加在包,类,字段,方法,方法的参数以及局部变量上. 注解: @interface A{ } 应用了注解的类: @ class B{ } 对应用了注解的类记性反射操作 class C{ B.class.isAnnotionPresent(A.class); A a = B.

黑马程序员-张老师加强6-类加载器

类加载器: 基本概念: 一般来说:java文件(源程序)经过编译器被转换成java字节码.类加载器负责读取字节码文件,并转换成java.lang.class的一个实例对象.每个这样的实例代表一个java类.通过实例的newInstance方法,就可以创建出该类一个对象. Java.lang.ClassLoader类的介绍: ClassLoader类的基本职责就是根据指定的类的名称,找到或生产对应的字节码,然后从这些字节码中定义出一个java类.即,java.lang.Class的一个实例. 常用

黑马程序员——java多线程基础知识1

多线程 进程是一个正在执行的程序. cpu在同时执行这些程序,其实是跳跃式的,做快速的切换,时间很短.一个进程可能存在多条路径.迅雷的多路径.每一个进行执行都有一个执行顺序,该顺序是一个执行路径,或这叫一个控制单元.每一个进程至少有一个线程,线程就是进程中的一个独立的控制单元,线程控制进程的执行.jvm启动的时候会有一个进程就叫做java,exe,该进程中至少有一个线程在控制Java程序的执行 ,而且该线程的执行代码在 主函数中.该线程称为主线程.虚拟机至少也有两个线程,一个主线程执行,另一个负

黑马程序员-c语言基础:各种数据类型的输出占位符

c语言中的输出操作相对java来说是比较麻烦的,每种数据类型的输出都有各自的占位符: 下面是各种数据类型的输出占位符: short/int : %d int a = 1; printf("这个整数是:%d", a); long: %ld; (long 是int得修饰,不能算是一种单独的数据类型,只是比int多了四个字节的存储空间) long long: %lld char : %c float/double : %f  float默认是6位小数输出:可以在%f中控制:例如:%.2f:输

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值: 指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比