---------------------- android培训、java培训、期待与您交流! ----------------------
数组反射
Class clazz = pt1.getClass
clazz.isArray(){
Array.getLength(obj)
for(int i-0;i<length;i++)
{
System.out.println(Array.get(obj,i));
}
else{
System.out.println(obj);
}
}
得到数组的元素类型
int[] a = new int[3];
a[0].getClass().getName();
Collection collections = new ArrayList();//HashSet()
ArrayList:放的对象的引用
HashSet:比较对象 remove
pt1 = new Reflect(3,3);
pt2 = new Reflect(5,5);
pt3 = new Reflect(3,3);
collections.add(pt1);
collections.remove();
collections.size();
==相等equals肯定等
要想pt1和pt3相等必须改写equals和hashCode方法
去掉hashcode方法,pt1.equals(pt3);结果有多种可能
hashCode为了提高效率,把集合分成若干区域,每个要存进来的对象可以算出一个值,根据值选择相应的区域
x%32取模
hashCode 是根据内存地址计算的
对象存储集合是hash算法实现的集合,hashCode方法才有意义
当一个对象被存进HashSet集合中,就不要修改参与hash值计算的字段值了
否则就内存就溢出、泄漏了
框架的概念及用反射技术开发框架的原理
config.properties
className=java.util.ArrayList
InputStream ips = new FileInputStream("config.properties");
Properties props = new Properties();
props.load(ips);
ips.close();//告诉操作系统释放和自己关联的系统资源
String className = props.getProperty("className");
HashMap VS Properties
Properties 扩展了 HashMap 的功能
Properties可以从文件读,也可以写入文件 key value
配置文件在工程目录下
java MyClass xxx.file
绝对路径d:\\xxxx\\yyyy
用户在配置文件中定义文件路径
javaweb api getRealPath 得到项目真实路径+项目内部路径
ReflectTest2.class.getClassLoader().getResourceAsStream(文件目录"cn/itcast/day1/config.properties")//利用classLoader在classpath中定义的目录中寻找
框架技术中应用比较多,只读,不能存储
InputStream ips = ReflectTest2.class.getResourceAsStream("config.properties");没有斜杠打头表示相对路径resouces/
/cn/itcast/day1/resources/congfig.properties 是相对于classpath的根目录
内省
IntroSpector
主要对javabean进行操作
javabean特殊的java类,方法名称符合某种规则
int getAge()
void setAge(int age)
把一个java类当作javabean来看,这个javabean的属性是根据get,set方法名称来推断的
String propertyName = "x";
"x"》》》getX
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method MethodGetX = pd.getReadMethod();
Object retVal = MethodGetX.invoke(pt1);
pd.getWriteMethod()
抽取方法
refactor》》》Extract Method
抽取的方法参数 修改成Object 对任何java类都起作用了
输入的常量要用变量替换
BeanInfo beanInfo = java.bean.introspector.getBeanInfo(pt1.getClass())
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pd:pds)
{
pd.getName().equals(propertyName);
}
Object retValue=null;
for(){}
return retValue;
beanutils
logging
BuildPath
BeanUtils.getProperty(pt1,"x")
//字符串 web开发中浏览器传入的参数都是字符串类型自动转换
属性级联
copyProperties Map describe
javabeam>>>>map
map(age:7,name:"hp")
map>>>>javabean
//java7的新特性
Map map = (name:"zxx",age:18);
BeanUtils.setProperty(map,"name","lhm");
PropertyUtils.setProperty(pt1,"x",9)//这里只能用int 9
----------------------android培训、java培训、期待与您交流! ----------------------