黑马程序员 基础加强与项目2

---------------------- android培训java培训、期待与您交流! ----------------------

 

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值