- 浏览: 12021 次
- 性别:
- 来自: 北京
文章分类
最新评论
------- android培训、java培训、期待与您交流! ----------
JAVABEAN是一个遵循特定写法的java类,它通常具有如下特点:
1.这个java类必须具有一个无参构造函数
2.属性必须私有化
3.私有化的属性必须通过public类型的方法暴露给其他程序,并且方法的命名也必须遵守一定的命名规范
JAVABEAN属性:
一、定义:
把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean。实际上JavaBean就是一个java类,在这个java类中就默认形成了一种规则——对属性进行设置和获得。而反之将说ava类就是一个JavaBean,这种说法是错误的,因为一个java类中不一定有对属性的设置和获得的方法(也就是不一定有set和get方法)。
二、从JavaBean中就引出了一个内省的概念
内省:把一类中需要进行设置和获得的属性访问权限设置为private(私有的)让外部的使用者看不见摸不着,而通过public(共有的)set和get方法来对其属性的值来进行设置和获得,而内部的操作具体是怎样的?外界使用的人不用不知道,这就称为内省。
三,这里有一个面试题,分享一下
存在一个JavaBean,它包含以下几种可能的属性:
1:boolean/Boolean
2:int/Integer
3:String
4:double/Double
属性名未知,现在要给这些属性设置默认值,以下是要求的默认值:
String类型的默认值为字符串 www.itheima.com
int/Integer类型的默认值为100
boolean/Boolean类型的默认值为true
double/Double的默认值为0.01D.
只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现
/*
设计思路:
设计一个模拟题目要求的JavaBean类,通过反射进行对其中的未知属性名的变量赋值。
1,拿到字节码文件,建立一个空构造函数的实例对象。
2,利用字节码作为参数,Introspector.getBeanInfo(JavaBean.class)得到BeanInfo实例对象。
3,通过BeanInfo的方法,beanInfo.getPropertyDescriptors()拿到该字节码的所有属性描述。
3,通过PropertyDescriptor--属性描述实例对象,通过调用getWriteMethod()方法,修改字节码中属性的值。
4,在通过属性描述中getPropertyType()方法,定位是那种类型的成员变量,筛选出后,进行相应的修改赋值。
*/
这里是源码分享一下
package com.itheima;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
/*
* 5、 存在一个JavaBean,它包含以下几种可能的属性:
1:boolean/Boolean
2:int/Integer
3:String
4:double/Double
属性名未知,现在要给这些属性设置默认值,以下是要求的默认值:
String类型的默认值为字符串 www.itheima.com
int/Integer类型的默认值为100
boolean/Boolean类型的默认值为true
double/Double的默认值为0.01D.
只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现
*/
/*
* 设计思路:
设计一个模拟题目要求的JavaBean类,通过反射进行对其中的未知属性名的变量赋值。
1,拿到字节码文件,建立一个空构造函数的实例对象。
2,利用字节码作为参数,Introspector.getBeanInfo(JavaBean.class)得到BeanInfo实例对象。
3,通过BeanInfo的方法,beanInfo.getPropertyDescriptors()拿到该字节码的所有属性描述。
3,通过PropertyDescriptor--属性描述实例对象,通过调用getWriteMethod()方法,修改字节码中属性的值。
4,在通过属性描述中getPropertyType()方法,定位是那种类型的成员变量,筛选出后,进行相应的修改赋值。
*/
//建立模拟JavaBean类
class JavaBean{
//成员变量
private boolean flag;
private int number;
private String itcast;
private double money;
//成员变量相应的set和get方法
public void setItcast(String newitcast){
itcast=newitcast;
}
public String getItcast(){
return itcast;
}
public void setNumber(int newnumber){
number=newnumber;
}
public int getNumber(){
return number;
}
public void setFlag(boolean newflag){
flag=newflag;
}
public boolean getFlag(){
return flag;
}
public void setMoney(double newmoney){
money=newmoney;
}
public double getMoney(){
return money;
}
}
public class HeiMa{
public static void main(String[] args) throws Exception {
//拿到字节码
Class<JavaBean> clazz=JavaBean.class;
//拿到字节码的一个对象实例
Object obj=clazz.newInstance();
//通过字节码拿到BeanInfo实例对象
BeanInfo beanInfo=Introspector.getBeanInfo(clazz);
//通过BeanInfo拿到这个字节码的所有属性描述
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
//通过属性描述对象拿到属性对应的set方法和get方法,通过set方法进行属性赋值
for(PropertyDescriptor pd:pds){
//拿到当前属性的set方法
Method setMethod=pd.getWriteMethod();
Method getMethod=pd.getReadMethod();
//拿到当前属性的类型字节码
Class<?> properclass=pd.getPropertyType();
//通过字节码来筛选出相应的属性,再对应赋值,赋值完毕后,通过打印get方法查看赋值情况。
if(properclass==String.class){
setMethod.invoke(obj, "www.itheima.com");
System.out.println(getMethod.invoke(obj));
}else if(properclass==int.class || properclass==Integer.class){
setMethod.invoke(obj, 100);
System.out.println(getMethod.invoke(obj));
}else if(properclass==Boolean.class || properclass==boolean.class){
setMethod.invoke(obj, true);
System.out.println(getMethod.invoke(obj));
}else if(properclass==Double.class || properclass==double.class){
setMethod.invoke(obj, 0.01D);
System.out.println(getMethod.invoke(obj));
}
}
}
}
JAVABEAN是一个遵循特定写法的java类,它通常具有如下特点:
1.这个java类必须具有一个无参构造函数
2.属性必须私有化
3.私有化的属性必须通过public类型的方法暴露给其他程序,并且方法的命名也必须遵守一定的命名规范
JAVABEAN属性:
一、定义:
把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean。实际上JavaBean就是一个java类,在这个java类中就默认形成了一种规则——对属性进行设置和获得。而反之将说ava类就是一个JavaBean,这种说法是错误的,因为一个java类中不一定有对属性的设置和获得的方法(也就是不一定有set和get方法)。
二、从JavaBean中就引出了一个内省的概念
内省:把一类中需要进行设置和获得的属性访问权限设置为private(私有的)让外部的使用者看不见摸不着,而通过public(共有的)set和get方法来对其属性的值来进行设置和获得,而内部的操作具体是怎样的?外界使用的人不用不知道,这就称为内省。
三,这里有一个面试题,分享一下
存在一个JavaBean,它包含以下几种可能的属性:
1:boolean/Boolean
2:int/Integer
3:String
4:double/Double
属性名未知,现在要给这些属性设置默认值,以下是要求的默认值:
String类型的默认值为字符串 www.itheima.com
int/Integer类型的默认值为100
boolean/Boolean类型的默认值为true
double/Double的默认值为0.01D.
只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现
/*
设计思路:
设计一个模拟题目要求的JavaBean类,通过反射进行对其中的未知属性名的变量赋值。
1,拿到字节码文件,建立一个空构造函数的实例对象。
2,利用字节码作为参数,Introspector.getBeanInfo(JavaBean.class)得到BeanInfo实例对象。
3,通过BeanInfo的方法,beanInfo.getPropertyDescriptors()拿到该字节码的所有属性描述。
3,通过PropertyDescriptor--属性描述实例对象,通过调用getWriteMethod()方法,修改字节码中属性的值。
4,在通过属性描述中getPropertyType()方法,定位是那种类型的成员变量,筛选出后,进行相应的修改赋值。
*/
这里是源码分享一下
package com.itheima;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
/*
* 5、 存在一个JavaBean,它包含以下几种可能的属性:
1:boolean/Boolean
2:int/Integer
3:String
4:double/Double
属性名未知,现在要给这些属性设置默认值,以下是要求的默认值:
String类型的默认值为字符串 www.itheima.com
int/Integer类型的默认值为100
boolean/Boolean类型的默认值为true
double/Double的默认值为0.01D.
只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现
*/
/*
* 设计思路:
设计一个模拟题目要求的JavaBean类,通过反射进行对其中的未知属性名的变量赋值。
1,拿到字节码文件,建立一个空构造函数的实例对象。
2,利用字节码作为参数,Introspector.getBeanInfo(JavaBean.class)得到BeanInfo实例对象。
3,通过BeanInfo的方法,beanInfo.getPropertyDescriptors()拿到该字节码的所有属性描述。
3,通过PropertyDescriptor--属性描述实例对象,通过调用getWriteMethod()方法,修改字节码中属性的值。
4,在通过属性描述中getPropertyType()方法,定位是那种类型的成员变量,筛选出后,进行相应的修改赋值。
*/
//建立模拟JavaBean类
class JavaBean{
//成员变量
private boolean flag;
private int number;
private String itcast;
private double money;
//成员变量相应的set和get方法
public void setItcast(String newitcast){
itcast=newitcast;
}
public String getItcast(){
return itcast;
}
public void setNumber(int newnumber){
number=newnumber;
}
public int getNumber(){
return number;
}
public void setFlag(boolean newflag){
flag=newflag;
}
public boolean getFlag(){
return flag;
}
public void setMoney(double newmoney){
money=newmoney;
}
public double getMoney(){
return money;
}
}
public class HeiMa{
public static void main(String[] args) throws Exception {
//拿到字节码
Class<JavaBean> clazz=JavaBean.class;
//拿到字节码的一个对象实例
Object obj=clazz.newInstance();
//通过字节码拿到BeanInfo实例对象
BeanInfo beanInfo=Introspector.getBeanInfo(clazz);
//通过BeanInfo拿到这个字节码的所有属性描述
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
//通过属性描述对象拿到属性对应的set方法和get方法,通过set方法进行属性赋值
for(PropertyDescriptor pd:pds){
//拿到当前属性的set方法
Method setMethod=pd.getWriteMethod();
Method getMethod=pd.getReadMethod();
//拿到当前属性的类型字节码
Class<?> properclass=pd.getPropertyType();
//通过字节码来筛选出相应的属性,再对应赋值,赋值完毕后,通过打印get方法查看赋值情况。
if(properclass==String.class){
setMethod.invoke(obj, "www.itheima.com");
System.out.println(getMethod.invoke(obj));
}else if(properclass==int.class || properclass==Integer.class){
setMethod.invoke(obj, 100);
System.out.println(getMethod.invoke(obj));
}else if(properclass==Boolean.class || properclass==boolean.class){
setMethod.invoke(obj, true);
System.out.println(getMethod.invoke(obj));
}else if(properclass==Double.class || properclass==double.class){
setMethod.invoke(obj, 0.01D);
System.out.println(getMethod.invoke(obj));
}
}
}
}
发表评论
-
黑马程序员_java1.5新特性与java学习中常用的英语单词
2014-07-17 11:21 1144------- android培训、java培 ... -
黑马程序员_反射枚举与正则表达式总结总结
2014-07-17 00:16 2366------- android培训、java培训、期待与您交流 ... -
黑马程序员_反射枚举与正则表达式总结
2014-07-16 11:34 0------- <a href="http:/ ... -
黑马程序员_类库与集合总结
2014-07-16 11:20 1111------- android培训、java培 ... -
黑马程序员_IO流与多线程总结
2014-07-16 00:03 2014------- android培训、java培 ... -
黑马程序员_IO与多线程总结
2014-07-15 15:07 0------- <a href="http:/ ... -
黑马程序员_面向对象总结
2014-07-15 11:32 838------- android培训、java培 ... -
黑马程序员_张老师银行面试题Bank
2014-07-15 02:43 1247------- android培训、java培训、期待与您交流 ... -
黑马程序员_面向对象之前的Java基础总结
2014-07-15 00:49 616------- <a href="http ... -
黑马程序员_张老师交通灯面试题TafficLamp
2014-07-14 18:42 680------- android培训、java培训、期待与您 ... -
黑马程序员_分类代理理解与AOP面向方面编程总结
2014-07-11 13:30 799------- android培训、java培训、期待与您 ... -
黑马程序员_JavaBean类总结
2014-07-09 21:46 0------- <a href="http ...
相关推荐
01_JavaBean讲解(上)001 01_JavaBean讲解(上)001 01_JavaBean讲解(上)001 01_JavaBean讲解(上)001
利用JSP_Servlet_JavaBean,适合学习使用。
jsp的JDBC_JavaBean程序例,高清完整。
oracle_to_javabean
JSP_SERVLET_JAVABEAN
javabean封装数据库
java+jsp+servlet+mysql+javabean
基于JSP_Servlet_JavaBean的E-Book电子书店.
jsp+servlet+javaBean实现MVC.让你熟练掌握JSP,servlet,javaBean
jsp_servlet_javaBean 增删改查
01_JavaBean讲解(上)第2部分 (必须用里面的java分割器进行合并才能用) (必须用里面的java分割器进行合并才能用)
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490903
javabean在jsp中的使用,主要是设计一个简单的javabean来实现对数据库的轻松操作
jsp+javabean+tomcat+mysql编写的简单OA 全部源码
Y2_开发基于JSP_Servlet_JavaBean的网上交北大青鸟y2课程之一
资料++笔记_4_javabean_4321_myeclipse_jsp_源码.zip
北大青鸟 Y2 5.0 开发基于JSP_Servlet_JavaBean的网上交易系统课件(6-9章节)
webservices_helloworld_javabean
(JSP+JavaBean+Servlet)技术结合的一个项目
根据数据表结构自动生成javabean,需JDK1.7以上版本