Java手动释放对象
伪代码
public void updateUser(BufferedWriter writer, BufferedReader reader) {
List<User> array = new ArrayList<User>();
User st = new User();
String line;
int count = 0;
try {
while ((line = reader.readLine()) != null) { // line 每次得到一行数据
String[] str = line.split(","); // 将每行数据以逗号切片
st.setId(str[0]);
st.setName(str[1]);
st.setAge(str[2]);
st.setAddr(str[3]);
st.setUpdate(str[4]);
st.setUpdate_time(str[5]);
count = 1;
array.add(st);
}
...
...
以上代码单词循环无任何问题,多次执行while时执行到 array.add(st);后会覆盖前面st中的值(因为第二次执行时st并没有被释放,前面st中添加的值还在),导致写入集合中的数据不正确。
修改后代码:
public void updateUser(BufferedWriter writer, BufferedReader reader) {
List<User> array = new ArrayList<User>();
User st = new User();
String line;
int count = 0;
try {
while ((line = reader.readLine()) != null) { // line 每次得到一行数据
String[] str = line.split(","); // 将每行数据以逗号切片
st.setId(str[0]);
st.setName(str[1]);
st.setAge(str[2]);
st.setAddr(str[3]);
st.setUpdate(str[4]);
st.setUpdate_time(str[5]);
count = 1;
array.add(st);
// 很重要,将st中的属性清空,不会覆盖前面的数据
st = new User();
}
...
...
重新赋值就会覆盖上一次的内容了,只能算是伪释放,也可以像下面这样写
public void updateUser(BufferedWriter writer, BufferedReader reader) {
List<User> array = new ArrayList<User>();
String line;
int count = 0;
try {
while ((line = reader.readLine()) != null) { // line 每次得到一行数据
User st = new User(); // 将对象创建在循环中每次循环也会覆盖上次内容
String[] str = line.split(","); // 将每行数据以逗号切片
st.setId(str[0]);
st.setName(str[1]);
st.setAge(str[2]);
st.setAddr(str[3]);
st.setUpdate(str[4]);
st.setUpdate_time(str[5]);
count = 1;
array.add(st);
}
...
...
Java手动释放对象的更多相关文章
- Objective-C:MRC手动释放对象内存举例(引用计数器)
手机内存下的类的设计练习: 设计Book类, 1.三个成员变量: title(书名)author(作者).price(价格) 2.不使用@property,自己完成存取方法(set方法,get方 ...
- java 面向对象(三十):异常(三) 手动抛出异常对象
1.使用说明在程序执行中,除了自动抛出异常对象的情况之外,我们还可以手动的throw一个异常类的对象. 2.[面试题] throw 和 throws区别:throw 表示抛出一个异常类的对象,生成异常 ...
- Java 类和对象
主要参考文献:王映龙<Java程序设计> 一:类的语法 [修饰符]class<类名>[extends父类名][implements接口列表]{ //类体} 1:修饰符 可选值为 ...
- 【Thread】java线程之对象锁、类锁、线程安全
说明: 1.个人技术也不咋滴.也没在项目中写过线程,以下全是根据自己的理解写的.所以,仅供参考及希望指出不同的观点. 2.其实想把代码的github贴出来,但还是推荐在初学的您多亲自写一下,就没贴出来 ...
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- c++继承构造子类调用父类构造函数的问题及关于容器指针的问题及当容器里储存指针时,记得要手动释放
看下面的一个问题: class Person { private: string name; public: Person(const string& s=""){ nam ...
- 深度剖析Java变量栈&对象堆
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...
- Java面向对象 其他对象
Java面向对象 其他对象 知识概要: (1)可变参数 (2)静态导入 (3)System (4)Runtime (5)Date Calendar (6)Math 本 ...
- (七)java类和对象
一个类定义一个新的数据类型,也就是定义了一个逻辑框架,定义了它的成员之间的关系.可以通过这种类型来声明该类型的对象,通过new关键词来实例化对象,也就是为该类型的对象动态的分配物理内存空间,这个分配过 ...
随机推荐
- 目标检测:YOLO(v1 to v3)——学习笔记
前段时间看了YOLO的论文,打算用YOLO模型做一个迁移学习,看看能不能用于项目中去.但在实践过程中感觉到对于YOLO的一些细节和技巧还是没有很好的理解,现学习其他人的博客总结(所有参考连接都附于最后 ...
- openstack Q版部署-----虚拟机创建(8)
一 .创建网络环境 环境变量生效一下 创建一个网络: openstack network create --share --external \ --provider-physical-network ...
- Spring Aware接口
实现aware接口的bean必须在spring的xml文件中注册,由spring的IOC容器管理 1-ApplicationContextAware接口 可以获取spring的IOC容器 2-Bean ...
- 关于Jonathan S. Weissman与RIT(罗切斯特理工学院,位于纽约)
信息来源于:edx平台的 RITx: CYBER501xCybersecurity Fundamentals 课程的介绍(https://courses.edx.org/courses/course ...
- 查找轮廓(cv2.findCountours函数)
1.输入为二值图像,黑色为背景,白色为目标 2.该函数会修改原图像,因此若想保留原图像在,则需拷贝一份,在拷贝图里修改. 一.查找轮廓 cv2.findContours() 三个输入参数:输入图像(二 ...
- python 之路,Day 1 python基础 之 课后随笔
首先是抱着被忽悠的心态,购买了老男孩的什么什么什么(你懂得!!),开始了一周一堂课时的听,然后就是做,自己的博客,首先附上整理的内容吧. 1day .... 一. Hell world 程序 在lin ...
- git与eclipse集成之更新特性分支代码到个人特性分支
1.1. 更新特性分支代码到个人特性分支 在基于特性分支开发的过程中,存在多人向特性分支提交代码的情况,开发者需要关注特性分支代码与个人分支代码保持同步,否则可能导致提交代码冲突. 具体代码同步步骤: ...
- codeforces 461div.2
A Cloning Toys standard input/output 1 s, 256 MB B Magic Forest standard input/output 1 s, 256 M ...
- 【转】辽宁北斗TV直播源
原帖地址:http://bbs.asiatvro.com/thread-1156600-1-1.html 感谢 Qarclub 辽宁卫视,http://lnhlslive.hongshiyun.com ...
- css3 - 旋转的木马
参考资料: 张鑫旭 : http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-trans ...