Array工具类用于完成对数组的反射操作
思考题:怎么得到数组中的元素类型。
Array在发射类中
反射的作用---实现框架功能
框架与框架要解决的核心问题
以后使用别人的类的两种方式
一种是你去使用别人的类
还有一种是别人的类调用你的类
一个是框架,一个是工具
买房子---开放商提供房子,安装门,又要锁,
门窗被调用,锁被门窗调用
房子是框架,提前做了,装上了门就成了家,框架在调用你的类---门 锁是一个工具,去买来调用装上
框架的要解决的核心问题
写框架(房子)时,客户还没有能力,没有写好门,那么就要准备好以后怎么让用户安装门
在程序中无法直接new某个类的实例对象,用反射方式来做
综合案例
先直接用new语句创建ArrayList和HashSet的实例对象,演示用eclipse自动生成RefectPoint类的equals和hashcode方法,比较两个集合的运行结果差异
然后改为采用配置文件加反射的方式创建ArrayList和HashSet的实例对象对象,比较观察运行结果差异
引入了eclipse对资源文件的管理方式的讲解
集合中存储的是对象的引用型变量,指向对象是实体
List中可以增加重复元素,set中不能出现重复元素,map中键值对,键不能重复
流没有关闭不是对象不被释放,而是对象关联的系统资源没有被释放
举例:比如用java控制windows的一个窗口,java的对象呗垃圾回收了而windows的窗口还在,没有被关闭,浪费了资源
流运行了close()方法,告诉操作系统将java与本件结束关系,关闭对文件的操作。关闭物理资源
getProperty()根据键获取值
Collection<ReflectPoint>collections2 =(Collection<ReflectPoint>)Class.forName(className).newInstance();
ReflectPointrp1 = new ReflectPoint(3, 4);
为什么Collection<ReflectPoint>可以接受,而变成Collection<?>确不能接受
删除<?>又可以,那在<>里添加什么才可以达到没有添加德效果
getRealPath()获取绝对位置
类加载器
Class的方法getClassLoader().getResourceAsStream(String)
逐一的去查找name的文件,去classpath下找
配置文件要放在classpath下,用类加载器的方式加载
rp1.getClass().getClassLoader().getSystemResourceAsStream(name)
用类加载器去获取配置文件的读取流
Rp1.getClass().getResourceAsStream()如果放在它的目录下直接写文件名即可,因为Class知道它自己在哪个包里
最前面加上/就表示在classpath下的根目录,前面的包名都要写完整
集合中存储的都是对象引用
所以修改了集合中修改了一个元素,那么集合中其它元素如果指向了这个对象,那么都跟着改变
确定对象唯一性
HashSet依靠equals来判断元素是否相等,用hashcode来确定元素的位置,如果equals不等,而hashcode相等,那么用连接或者其它方式将对象存入到hashset中,treeset判断元素唯一性的方法是comparTo
Hashcode
先用Hashcode查找要放的位置,再用equals判断是否相等
先放到某个区域
没有复写hashcode和equals方法是2个,为什么写了一个equals,没有写hashcode反而可以变成3个了??
当一个对象被储存进HashSet集合中以后,就不能修改这个对象的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初储存进HashSet集合中的哈希值就不同了,在这种情况下,既是在contains方法用该对象的当前引用作为的参数去HashSet集合中索引对象,也返回不到对象的结果,导致无法从HashSet集合中单独删除当前对象,造成内存泄露
如果hashcode是用对象中的x,y作为参数运算,如果存入对象后修改了对象的x或者y的值那么就找不到这个对象,也不能删除这个对象了
Hashcode有什么用:
可以说上内存溺出
Java中有内存·泄露吗
---------------------- android培训、 java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima