A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 qiaojinhui 于 2013-6-7 17:09 编辑

public class MyQueue {
private LinkedList link = null;为什么要付空值?还私有化。

public MyQueue(){
  link = new LinkedList();这个构造方法是什么作用啊?为什么要这样用那?
}

/**
  * 往队列中添加元素。
  */
public void myAdd(Object obj){
  //调用的是LinkedList的方法。
  link.addLast(obj);
}

/**
  * 获取队列中元素的方法。
  */
public Object myGet(){
  
  return link.removeFirst();
}

/**
  * 队列中是否为空。
  */
public boolean isNull(){
  return link.isEmpty();
}
}

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
private LinkedList link = null;为什么要付空值?还私有化。
这句话时建立对象的引用。建立在成员位置。在整个累中都有效。

public MyQueue(){
  link = new LinkedList();这个构造方法是什么作用啊?为什么要这样用那?
这句话呢。是对象被创建的时候。就创建一个LinkedList。这个和单利模式的烂汉式差不多。不知道哥们能理解不。如果不理解请回复我
}

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 速度去考试 , 高考 一年一次!!.

查看全部评分

回复 使用道具 举报
private LinkedList link = null;
用Linkedlist模拟队列这种数据结构,所以linklist不需要对外暴露,当然就private了。至于初始化为空其实不必写,直接这样写成private LinkedList link;也可以,因为默认为空。
public MyQueue(){
  link = new LinkedList();
}
就是在创建MyQueue对象时自动的建立一个LinkedList的实例对象,此时link对象就指向了一个LinkedList对象,而不是null了。
回复 使用道具 举报
private LinkedList link = null;为什么要付空值?还私有化。

public MyQueue(){
  link = new LinkedList();这个构造方法是什么作用啊?为什么要这样用那?
}
*********************************

由于 你是基于LinkedList来模拟Queue  所以  这个和ArrayList的结构很相似

这么说  毕老师说过  ArrayList内部或者底层是数组  这说明在ArrayList的定义 一定是:
public class ArrayList{
   private int[] arr =null;
}

假如你要基于别的现有的数据结构A来模拟另一种数据结构B   那你应该把要基于的数据结构A作为一个数据结构B的成员(这个叫聚合)
(1). 个人认为:由于是引用型成员变量 (位于堆内存中),所以根据堆内存中成员变量的特点:都有默认值(引用型的成员变量的默认值就是null)。这里你显式赋值null或者不赋值  都会是null
(2). 成员私有化是OOP的封装的要求。如果不私有化,那么在外部的程序是可以对成员变量进行修改的,这样违背了封装性。私有化之后,外部程序不能直接访问这个私有化的成员变量
      此时 你如果觉得有必要提供外部程序一个有限制的方法操作这个私有成员  你就提供一个public的有判断(比如Person类的年龄age必须在0-150之间)方法  就可以了
      如果你觉得这个变量仅仅是提供给我这个类的内部的其他方法使用的 没有必要提供给外部的程序使用 那你就不要提供有限制的public方法

     在这里  私有化的意思就是  我就让别人知道我这个是队列MyQueue  没有必要让别人知道我这个队列是如何在内部进行实现的  所以 私有化之后 没有提供相应的public方法供外部调用
回答你的第三个问题:***************************public MyQueue(){  link = new LinkedList();这个构造方法是什么作用啊?为什么要这样用那?}
***************************
由于无论你是不是显式给link赋值  他都是null的值   但是 你类的其他方法要使用这个LinkedList的对象的引用  如果不实例化  那么结果就是在调用这个LinkedList的实例link的方法时候,就会出现NullPointerException。
在MyQueue中为link成员初始化的原因就是 我一旦在外面程序MyQueue queqe =new MyQiueue();的时候  由于JVM会自动调用构造方法 所以  这个原本是null的link会马上被实例化  免得下面方法使用的时候  忘记实例化抛出异常

那么  你也可以在其他的方法里面对这个link进行实例化(也就是new)  也可以在private LinkedList link = new LinkedList();
后者是显式初始化 先于构造方法执行 效果一样的  怎么做 按照你的需求就OK

回复 使用道具 举报 1 0
好好学好你的基础,构造函数都没懂就上集合了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马