`

创建对象在while循环里面和外面的不同效果

阅读更多

1.在while循环的外面
	public List<CollectionBean> list() {
		String sql = "select * from collectiontbl";
		Connection conn = JDBC_Connection.getConnection();
		Statement stmt = null;
		ResultSet rs = null;
		List<CollectionBean> list = new ArrayList<CollectionBean>();
		try {
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
CollectionBean bean = new CollectionBean();

			while (rs.next()) {
				//不能再while外面创建这个对象,这是一个非常有技术含量的问题 
				bean.setId(rs.getInt("id"));
				bean.setName(rs.getString("name"));
				bean.setName(rs.getString("url"));
				list.add(bean);
			}
			for(int i=0;i<list.size();i++){
				System.out.println(list.get(i).getId()+" "+list.get(i).getName());
			}
						return list;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBC_Connection.free(rs, conn, stmt);
		}
		return null;
	}
运行结果:
1 www.dkfj.com
2 www.dkfj.com
3 www.dkfj.com
4 www.dkfj.com
5 www.dkfj.com
6 www.dkfj.com


原因解释:
我们注意到这个结果显然不是我们想要的,因为创建了一个对象在while循环外面,每循环一次创建的对象都没有变,改变的只是在栈上的值,而添加到list里的对象都指向到还存在的这个对象的栈上。当最后对象消失的时候,list里所有的对象才把栈上的值copy起走,所以打印的结果全部是一样的。所以我们需要把创建对象放在while循环内。
下面是详细的图解:

1.在while循环的里面
	public List<CollectionBean> list() {
		String sql = "select * from collectiontbl";
		Connection conn = JDBC_Connection.getConnection();
		Statement stmt = null;
		ResultSet rs = null;
		List<CollectionBean> list = new ArrayList<CollectionBean>();
		try {
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			while (rs.next()) {
				//不能再while外面创建这个对象,这是一个非常有技术含量的问题 
				CollectionBean bean = new CollectionBean();
				bean.setId(rs.getInt("id"));
				bean.setName(rs.getString("name"));
				bean.setName(rs.getString("url"));
				list.add(bean);
			}
			for(int i=0;i<list.size();i++){
				System.out.println(list.get(i).getId()+" "+list.get(i).getName());
			}
						return list;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBC_Connection.free(rs, conn, stmt);
		}
		return null;
	}
运行结果:
1 www.baidu.com
2 www.google.com
3 www.google.com
4 www.javaeye
5 www.javaeye
6 www.dkfj.com

原因解释:
分享到:
评论

相关推荐

    7.1 while循环 Project1.zip

    在这个"7.1 while循环"项目中,我们将深入探讨`while`循环的工作原理、语法结构以及如何在实际编程任务中运用它。 `while`循环的基本语法格式如下: ```python while condition: # 当条件为真时,执行这里的代码 ...

    使用while循环设计一个程序,用户在文本框中输入一个整数n,单击“筛选素数”按钮,程序将找出3~n的所有素数并在列表框中输出。

    在C#编程中,`while`循环是一种条件循环,它会持续执行循环体内的代码直到指定的条件不再满足。在这个特定的任务中,用户通过文本框输入一个整数`n`,然后点击按钮启动筛选过程。程序会从3开始遍历到`n`,判断每个...

    5.循环1

    `while True:`并不禁止,而是常用于创建无限循环。 综上所述,循环在Python编程中扮演着至关重要的角色,理解并掌握各种循环结构、`break`和`continue`语句的用法,以及它们与`else`子句的配合,能够帮助我们编写...

    对象和构造器

    例如,在 eg1 中,我们使用了 while 循环和 if 语句来输出指定的字符串。在 eg2 中,我们使用了 if 语句和 while 循环来判定手机号码的合法性。 对象和构造器是 Java 程序设计中两个基本概念,了解它们对于 Java ...

    Python入门_浅谈for循环、while循环

    与for循环不同,while循环的次数不确定,取决于条件的满足情况。若条件始终为真,不加控制的话,就会导致无限循环。 另外,`break`语句用于提前退出最近的循环,而`continue`语句可以跳过当前循环的剩余部分,直接...

    js初级FOR循环 DOm对象 .txt

    主要讲JS初级入门 从不懂到易懂得的过程 其中由for循环 while循环 if else的如何应用知识点 , 字符串的类型 数组创建 对象的概念 DOM对象 以及随机抽人事件 如何获取验证码等简单项目

    Python中for循环和while循环的基本使用方法

    ### Python中for循环和while循环的基本使用方法 在Python编程语言中,循环结构是不可或缺的一部分,主要用于重复执行一段代码直到满足特定条件为止。本文将详细介绍Python中两种最常用的循环结构——`for`循环和`...

    Java中一个线程执行死循环有什么后果

    由于线程A和线程B持有的锁不同,线程B可以顺利完成其方法的执行,即使线程A在while死循环中。这意味着线程B可以得到CPU时间片并执行其任务,而线程A则一直保持运行状态,因为它被设计成无限循环。 然而,这种情况并...

    PHP程序设计-3期(KC016) 2.6.2循环控制3while拓展知识.doc

    本节将深入探讨while循环和foreach循环的拓展知识,以及它们在处理数组时的性能差异。 首先,`while`循环是一种基于条件的循环,它会持续执行循环体内的代码,只要条件为真。在PHP中,`while`循环的语法结构如下: ...

    学习Switch和循环的小源码(vs2008)

    本篇文章将深入探讨在“学习Switch和循环的小源码(vs2008)”项目中涉及的关键知识点:do-while循环、switch语句以及构造函数。 首先,让我们了解一下do-while循环。这是C#中的一个基本控制结构,它与while循环类似...

    利用数组和循环实现的五子棋 第一个项目

    在编程世界中,Java是一种广泛使用的面向对象的编程语言,以其强大的功能和跨平台特性而闻名。本项目“利用数组和循环实现的五子棋”是初学者学习Java的一个很好的起点,它涉及到基础的编程概念,如数组、循环以及...

    MFC线程自定义消息循环

    通过以上步骤,你就可以在MFC中为线程创建一个自定义的消息循环,使得线程能够接收和处理消息,从而实现多线程环境下的并发处理。理解并熟练掌握线程消息循环的创建和管理对于开发高效、稳定的多线程MFC应用程序至关...

    c++多线程的创建挂起执行与销毁

    1. 创建一个基于对话框的应用程序。并增加如图所示控件;分别为3个进度条控件关联三个进度条类型的变量;并在对话框的初始化函数中,设定进度条的范围;为编辑框关联一个整型的变量;为12个按钮添加消息处理函数; 2...

    Python 循环语句的形式和循坏控制.docx

    在 `while` 循环中,意味着条件检查和循环体的重新开始。 3. **pass 语句**:`pass` 是一个空语句,主要用于占位或创建占位符。当需要一个语句但暂时还不知道具体实现时,可以使用 `pass`。它不执行任何操作,也...

    循环语句的用法之速度比较.rar

    在很多编程语言中,for循环的速度与while循环相当,但其简洁性和易读性使得它在许多场合更受欢迎。 2. **while循环**:while循环基于一个条件进行迭代,只要条件为真,就会继续执行循环体。这种循环适合处理未知...

    比较好的循环方法---------

    6. **迭代器和生成器**:在Python中,迭代器允许以迭代方式访问容器对象,而生成器则是一种惰性计算的迭代器,节省内存。它们提供了更高效的循环方式,特别是处理大数据集时: ```python generator = (x for x in ...

    wordpress主循环代码

    在WordPress主题开发中,理解和掌握主循环的工作原理至关重要,因为这直接影响到网站内容的布局和显示。 首先,我们来看一下WordPress的主循环的基本结构。通常在WordPress模板文件中,如`index.php`、`single.php`...

    Python 习题库_循环语句_

    - **while循环的else**:与for类似,当while的条件变为假时,执行else子句。 4. **循环嵌套** - **嵌套结构**:一个循环体内可以包含另一个循环,形成多层循环。 - **应用**:解决多维度问题,如二维数组的遍历...

    C++语言和面向对象程序设计.rar

    文件“C++yuyan”可能涵盖了C++语法的基础知识,包括基本数据类型(如int、float、char)、控制结构(如if语句、for循环、while循环)、函数定义和调用、数组和字符串的使用等。同时,它可能还会涉及更高级的主题,...

Global site tag (gtag.js) - Google Analytics