黑马程序员_高新技术学习笔记(第五章_下)

---------------------- 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培训、期待与您交流! ---------------------- 

详细请查看:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值