JavaBean内省
什么是 JavaBenn
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有
的字段,且方法名符合某种命名规则。JavaBenn中的方法要么是set开头要么是get开头,set或
get之后的次就是JavaBenn的属性,如setAge(),那在JavaBenn中肯定有一个变量名是Age。
如果一个Java类中的一些方法符合某种命名规则,则可以把它当作JavaBean来使用。
总之,一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java
类内部的成员变量。一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用
肯定需要带来一些额外的好处,我们才会去了解和应用JavaBean!好处如下:
Java EE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和
要求这么做,那你就没什么挑选的余地!
----------------------------------------------------------------------------
部分代码:
ReflectPoint pt1 = new ReflectPoint(3,5); //pt1对象中有一个x变量 String propertyName = "x"; //"x"-->"X"-->"getX"-->MethodGetX-->普通方法这样写会很麻烦 //传两个参数,第一个是属性名,第二个是把那个对相当JavaBenn类 PropertyDescriptor pd1 = new PropertyDescriptor(propertyName,pt1); //通过get或set方法获取操作那个变量的方法 Method method = pd1.getReadMethod(); //pt1调用这个函数,方法里面没有参数 Object boject = method.invoke(pt1);
总结:
通过PropertyDescriptor类,把要变成JavaBean的那个类和要操作的参数传进去,
然后再通过PropertyDescriptor类的set或get方法获取对象中操作那个变量的方法,
然后通过invoke让指定对象去操作这个方法。
对JavaBean进行内省操作
1. 通过 PropertyDescriptor 类操作那个JavaBean类
2. 采用遍历BeanInfo的所有属性方式来查找和设置某个RefectPoint对象的X属性,在程序
中把一个类当作JavaBean来看,就是调用IntroSpecto.getBeanInfo方法,
得到的BeanInfo对象封装了吧这个类当作JavaBean看的结果信息。
----------------------------------------------------------------------------
Beanutils工具包
commons-beanutils.jar在导入这个工具包的同时还要导入第三方的工具包
阿帕奇提供的日志开发包,叫:commons-logging.jar可以对Javabean进行操作
BeanUtils.getProperty()//得到JavaBean中的属性
BeanUtils.setProperty(pt1,"x","9");//设置
set里的X是int 但是我们用Beanutils设置值的时候是用String类型设置进去的,返回也是String类型的。
PropertiesUtils类
PropertiesUtils类里面也有getheset方法
PropertiesUtils.setProperty(pt1,"x",9);
Beanutils与PropertiesUtils的区别:
部分代码:
BeanUtils.setProperty(pt1, "birthday.time", "111");
System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
PropertyUtils.setProperty(pt1, "x", 9);
System.out.println(PropertyUtils.getProperty(pt1, "x").getClass().getName());
BeanUtils是以字符串的形式对javabean进行操作,
而PropertiesUtils是以属性本身的类型进行操作。
Beanutils可以与map相互转换
----------------------------------------------------------------------------
了解注解及java提供的几个基本注解 注解就是向编译器或者软件传达一些信息
@Override 表示当前方法是覆盖父类的方法。
@Deprecated 表示当前元素已过时。
@SuppressWarnings 表示关闭一些不当的编译器警告信息,就是不让你警告了你别管了。
元注解
@Target表示该注解用于什么地方,可能的 ElemenetType 参数包括:
ElemenetType.CONSTRUCTOR 构造器声明
ElemenetType.FIELD 域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE 局部变量声明
ElemenetType.METHOD 方法声明
ElemenetType.PACKAGE 包声明
ElemenetType.PARAMETER 参数声明
ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
@Target(ElementType.METHOD)枚举此注解只能加在方法上
@Target({ElementType.METHOD,ElementType.TYPE})//也可以加到类上
@Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
RetentionPolicy.SOURCE 注解将被编译器丢弃
RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
@Documented 将此注解包含在 javadoc 中
@Inherited 允许子类继承父类中的注解
总结:
注解相当于一种标记,加了注解就等于为程序打上了某种标记,
为注解增加基本属性
定义基本类型的属性和应用属性:
在注解类中增加String color();@MyAnnotation(color="red")
用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法
MyAnnotation a = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(a.color());
可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象
为属性指定缺省值:
String color() default "yellow";
value属性:
String value() default "zxx";
如果注解中有一个名称为value的属性,且你只想设置value属性那么可以
省略value=部分,例如:@MyAnnotation("lhm")。
----------------------------------------------------------------------------
泛型
了解泛型
ArrayList类定义和ArrayList类引用中涉及如下术语:
整个称为ArrayList泛型类型
ArrayList中的E称为类型变量或类型参数
整个ArrayList称为参数化的类型
ArrayList中的Integer称为类型参数的实例或实际类型参数
ArrayList中的<>念着typeof
ArrayList称为原始类型
泛型的好处:
1:将运行时期的问题ClassCastException问题转换成了编译失败,体现在编译时期,程序员就可以解决问题。
2:避免了强制转换的麻烦。
参数化类型与原始类型的兼容性:
参数化类型可以引用一个原始类型的对象,编译报告警告,
例如,Collection c = new Vector();
原始类型可以引用一个参数化类型的对象,编译报告警告,
例如,Collection c = new Vector();
----------------------------------------------------------------------------
个人认为:两边都制定的话要一样,两边任意一边指定的话也能兼容,但是不能两边都指定了而类
型不一样。另外参数化类型不考虑类型参数的继承关系:
Vector v = new Vector(); //错误!///不写没错,写了就是明知故犯
Vectorv = new Vector(); //也错误!
编译器不允许创建泛型变量的数组。即在创建数组实例时,数组的元素不能使用参数化的类型,
例如,下面语句有错误:
Vector vectorList[] = new Vector[10];
----------------------------------------------------------------------------
泛型类:将泛型定义在类上。
class Tool
{
private Q obj;
public void setObject(Q obj)
{
this.obj = obj;
}
public Q getObject()
{
return obj;
}
}
用于放置泛型的类型参数的尖括号应出现在方法的其他所有修饰符之后和在方法的返回类型之前,
也就是紧邻返回值之前。按照惯例,类型参数通常用单个大写字母表示。
只有引用类型才能作为泛型方法的实际参数,swap(new int[3],3,5);语句会报告编译错误。
----------------------------------------------------------------------------
当方法操作的引用数据类型不确定的时候,可以将泛型定义在方法上。
static void swap(E[] a, int i, int j)
{
E t = a[i];
a[i] = a[j];
a[j] = t;
}
静态方法上的泛型:静态方法无法访问类上定义的泛型。如果静态方法操作的引用数据类型不
确定的时候,必须要将泛型定义在方法上。
public static void function(Q t)
{
System.out.println("function:"+t);
}
注意:
在对泛型类型进行参数化时,类型参数的实例必须是引用类型,不能是基本类型。
当一个变量被声明为泛型时,只能被实例变量、方法和内部类调用,而不能被静态变量和静态方
法调用。因为静态成员是被所有参数化的类所共享的,所以静态成员不应该有类级别的类型参数
----------------------------------------------------------------------------
泛型接口.
interface Inter
{
void show(T t);
}
class InterImpl implements Inter
{
public void show(R r)
{
System.out.println("show:"+r);
}
}
相关推荐
黑马程序员__移动商城项目实战 包括黑马程序员乐淘商城实战和慕课React+Antd
公式指标,黑马起爆,有助于判断什么时候可以入手
下面将详细介绍JavaWeb的基本概念、核心技术和黑马程序员源码在学习过程中的作用。 1. **JavaWeb基础** JavaWeb是基于Java技术构建Web应用的框架,它包括Servlet、JSP(JavaServer Pages)、JSTL(JavaServer ...
《黑马程序员_hibernate框架开发2016版讲义...通过对黑马程序员提供的这门课程的学习,开发者不仅能掌握Hibernate的核心概念和技术,还能提升在实际项目中的数据库操作效率,为构建高效、稳定的Java应用打下坚实基础。
标题中的“heima_ugo_xiaochengxu_黑马训练营_微信小程序_小程序支付_VantWeapp商城”揭示了这是一个关于微信小程序开发的项目,由黑马训练营提供教学支持,特别关注了商城功能、微信登录和微信支付的集成,并且使用...
黑马程序员_张孝祥_Java多线程与并发库,老师讲的非常仔细,老师很有耐心.欢迎大家下载学习.
通过这个“黑马旅游网项目”,学习者可以系统地了解和掌握Java Web开发的基础技能,为后续更高级的Web开发技术打下坚实基础。这个项目不仅提供了理论知识,还将通过实际操作帮助学习者提升解决问题的能力,更好地...
黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip
【标题】"传智播客_黑马_品优购_2018"指的是一个由传智播客和黑马程序员联合推出的2018年品优购相关的IT培训课程资源。这个课程可能涵盖了电子商务、互联网产品开发、运营等多个方面,旨在帮助学员掌握最新的技术和...
【青橙电商前台开发02】课程主要涵盖了电商网站前端开发的相关知识,是黑马教育机构...同时,黑马青橙电商的课程通常以实战为导向,让你在实践中学习和成长,所以“好好看吧”,这对你在电商领域的职业发展将大有裨益。
重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip
《Hibernate框架深度解析——基于黑马程序员2016版教学资料》 Hibernate,作为一个强大的对象关系映射(ORM)框架,极大地简化了Java开发者在数据库操作中的工作。它通过提供数据持久化的对象模型,使得开发者可以...
2. CSS基础:选择器的使用(如类选择器、ID选择器、元素选择器等),属性(如color、font-family、background-color、padding、margin等),盒模型(content、padding、border、margin),浮动和清除,以及CSS布局...
黑马程序员_ibatis视频教程,仅供参考学习,有需要的可以下载,本人有全栈开发工程师各种学习技术视频教程及本档,有需要的可以留言或到本人账号下载
黑马程序员_JDBC视频教程,仅供参考学习,有需要的可以下载,本人有全栈开发工程师各种学习技术视频教程及本档,有需要的可以留言或到本人账号下载
《黑马Python机器学习入门笔记》是一份针对初学者编写的指南,旨在帮助读者掌握Python语言在机器学习领域的基本应用。这份笔记将带你踏入这个充满无限可能的领域,通过Python这门易学且强大的编程语言,开启你的数据...
【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...
C++黑马程序员学习资料,附赠《InterviewGuide第四版By阿秀》、《LeetCode刷题手册》、《背包问题九讲》、《算法图解》pdf版本,三个基础课程文档手册及三个实验项目,由简到繁分别为《通讯录管理系统》、《职工管理...
黑马程序员_iOS基础视频_最适合初学者入门video,百度云链接。
马程序员_黎活明__Spring如何装配各种集合类型的属性.ppt )