栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记Java对象初始化产生的问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记Java对象初始化产生的问题

问题描述

背包、队列和栈_qq_45666842的博客-CSDN博客

在用Stack类(栈,栈是一种数据类型,详细介绍见上方链接)创建一个字符串的容器时,输出时总会输出null值。

public class BinaryOperation {
	
	
    public static Stack  binayoperation(int i) {
	   Stack stack = new Stack();
	   while(i>0) {
		  stack.push(i%2);
		  i/=2;
	   }
	   return stack;
	}
	public static void main(String[] args) {
		Stack stk = binayoperation(50);
		
		for(Integer n:stk) {
			System.out.print(n);
		}

	}

}

输出结果如下 

 思考了好久,终于发现是创建的Stack类中成员变量的初始化问题导致的,有问题的Stack源码如下

public class Stack implements Iterable{
	
    //private Node node = new Node();//该链表对象的初始化是问题的根源,不应该初始化
	ptivate Node node;
    private int N;
	
//往Stack栈中添加元素的方法push
	void push(Item item) {
		Node oldNode = node;
		node = new Node();//node对象已经被创建出来,所以只需重新赋值即可,不可重新创建对象
		node.item = item;
		node.next = oldNode;
		N++;

	}
//从Stack栈中删除并返回元素的方法pop	
	Item pop() {

			Item item = node.item;
			node = node.next;
			N--;
			return item;

	}
//  栈中是否有元素
	boolean isEmpty() {
		return(N==0);
	}
//栈中元素的个数
	int size() {
		return N;
	}
	

	
//链表
	class Node {

		Item item;

		 Node next;
	
	}

//迭代器的实现
	public Iterator iterator(){
		return  new ListIterator();
	}
	private class ListIterator implements Iterator{

		private Node current = node;
		public boolean hasNext() {return current!=null;}
		public Item next() {
			Item item=current.item;
			current = current.next;
			return item;
			
		}
		public void remove() {}
	}

 Node类的对象有两个成员变量,一个是item,一个是next

	class Node {

		Item item;
		Node next;
	
	}

 当只创建Node类的对象node,而不初始化时,node为null。

Node node;

但是当创建了Node类的对象并且初始化后,内存为node分配了空间存放其item,next成员

由此可见,虽然其item,next都为null,但是node本身时存在的,可以被处理输出。

 链表中仅有两个值,却有三个节点。因此,在本例中,对象应该先创建,需要时再初始化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357724.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号