黑马程序员-复习笔记之JavaBean详解
来源:互联网 发布:易语言dnf辅助源码站 编辑:程序博客网 时间:2024/05/22 20:38
------- android培训、java培训、期待与您交流! ----------
package com.itheima;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class JavaBeanReview {
/**
* JavaBean是一种特殊的java类,主要用于传递参数信息的,这种java类中的方法主要用于访问私有的字段,且方法
* 名符合某种规则
* JavaBean的属性是根据setter和getter方法来确定的,而不是根据其中的成员变量,即有set属性方法和get属性方法
* ,就可以称之为 JavaBean
*
* 如果方法名为setId,中文意思是设置id,至于把他存放到那个变量上,不用管,如果方法名为getId(),中文意思就是设置id
* 至于把它存放在哪个变量上,也不用管,去掉set前缀,剩余的部分即使属性名,如果剩余部分的第二个字母是小写的,则
* 吧剩余的首字母改成小写的
* JavaBean属性名:
* getTime : time
* setTime : time
* getCPU : CPU
* 总之,一个类被当作JavaBean使用时,JavaBean的属性是根据方法推断出来的,它跟班看不到内部成员变量
* 一个符合JavaBean特点的类,可以当作普通类一样进行使用,但把它当作JavaBean用肯定会带来一定额外的好处
* 我们才会去了解使用JavaBean
*
* JavaBean的好处:
* 在JavaEE开发中,经常用到JavaBean,很多环境就要求按照JavaBean方式进行操作,别人都这么用和这么做,所以我们没有选择
*
*
* 一个符合JavaBean特点的类,把它当作JavaBean用,JDK提供了对JavaBean操作的API,这套API称之为内省
* 如果你自己去通过getX()来访问私有的x.用内省这套API操作JavaBean比普通类的方式更方便
* 操作方式主要有两种:
* 1.直接new一个PropertyDescriptor对象的方式,先读取JavaBean的属性
* 用myeclipse可以将读取属性和设置属性的代码抽象成方法
* 只要调用这个方法,并传递一个参数对象,属性名和设置值,它就能完成属性修改的功能
*/
//具体的代码如下
public static void demo1(){
Person p1 = new Person("张三",23);
String propertyName = "name";//获取属性名称
try {
//1.创建PropertyDescriptror对象 把要操作的属性以及类的字节码文件传进来
PropertyDescriptor pd = new PropertyDescriptor("name", p1.getClass());
//2.通过属性,获取其读取的方法
Method methodGetName = pd.getReadMethod();
//3.调用方法
Object retVal = methodGetName.invoke(p1);//因为不需要参数,所以只把作用的对象传进去
System.out.println(retVal);//将值进行打印
//二:调用修改属性的方法
Method methodSetName = pd.getWriteMethod();
methodSetName.invoke(p1,"李斯");
//重新获取name的值
Object newVal = methodGetName.invoke(p1);
System.out.println(newVal);
} catch (Exception e) {
// TODO: handle exception
}
}
/*
* 方法二:在JDK中提供了Introspector类来操作JavaBean.Introspector类中提供了getBeanInfo()静态方法来
* 获得一个BeanInfo对象,BeanInfo类中提供了相应的方法让我们对JavaBean中的属性进行操作
* 1.首先通过Instropector.getBeanInfo()获取BeanInfo对象
* 2.通过BeanInfo.getPropertyDescriptors()获取所有属性的描述
* 3.通过高级for循环遍历属性并作判断
* 具体代码如下
* */
public static void demo2(){
Person person = new Person("张三",23);
String propertyName = "name";
//1.获取BeanInfo对象
BeanInfo beanInfo = null;
try {
beanInfo = Introspector.getBeanInfo(person.getClass());
} catch (Exception e) {
// TODO: handle exception
}
//2.获取所有属性的描述
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
//3.对数组进行遍历比较
for(PropertyDescriptor pd : pds){
if(pd.getName().equals(propertyName)){
Method methodGetName = pd.getReadMethod();
//调用方法
Object retVal = null;
try {
retVal = methodGetName.invoke(person);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//因为不需要参数,所以只把作用的对象传进去
System.out.println(retVal);//将值进行打印
//二:调用修改属性的方法
Method methodSetName = pd.getWriteMethod();
try {
methodSetName.invoke(person,"小刘");
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//重新获取name的值
Object newVal = null;
try {
newVal = methodGetName.invoke(person);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(newVal);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//调用方法,能获取值,也能修改,测试成功
demo1();
demo2();
}
}
//定义一个JavaBean的类
class Person{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- 黑马程序员-复习笔记之JavaBean详解
- 黑马程序员java笔记之三-----JavaBean
- 黑马程序员-复习笔记之枚举
- 黑马程序员--Struts2复习笔记
- 黑马程序员_内省和JavaBean笔记
- 黑马程序员--【强哥笔记】系列之Java高新技术笔记之JavaBean内省(第4天)
- 黑马程序员_java基础加强之JavaBean
- 黑马程序员_Java高新技术之 内省 JavaBean
- 黑马程序员---java高新技术之JavaBean
- 黑马程序员—JAVA高新技术之JavaBean
- 黑马程序员_基础加强之JavaBean
- 黑马程序员------网络编程复习笔记
- 黑马程序员——GUI复习笔记
- 黑马程序员_java基础复习之七泛型
- 黑马程序员--JAVA基础复习之String
- 黑马程序员--java基础复习之数组
- 黑马程序员--java基础复习之集合
- 黑马程序员--java基础复习之IO
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu
- 转——敏捷杂谈之敏捷测试中理想的测试组织
- hive 备忘
- 开发的困惑
- 线程池的介绍及简单实现
- 黑马程序员-复习笔记之JavaBean详解
- iScroll 用法说明
- 新岸线平台搭建文档
- sql注入检测好工具sqlmap
- 不重新编译php, 安装curl扩展
- HttpClient ssl双向认证
- php utf8 截取字符串(支持中文)
- 调用系统程序导入手机上的vcard文件
- Android MediaPlayer架构图解