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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马斯巴达 高级黑马   /  2013-1-7 23:53  /  2493 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢军 于 2013-1-8 23:05 编辑

import java.util.*;class DuiLie{        private LinkedList link;//这里的link是创建好的一个集合?        DuiLie()        {                link = new LinkedList();这里是创建对象?        }

请问上面的link分别是什么?下面创建对象为什么不是这种格式LinkedList link=new LinkedList()?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

8 个回复

正序浏览
mport java.util.*;
class DuiLie
{
        private LinkedList link;

        DuiLie()
        {
                link = new LinkedList();
        }

首先private Linkedlist link 这是在栈中定义了一个link存在,
然后new LinkedList在堆中new了一片空间,然后这片空间的地址,
例如0x0035,然后p=0x0035,然后p才真正意义上的指向了new
出来的这片空间

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报

import java.util.*;
class DuiLie {
         private LinkedList link;

        DuiLie()
         {
                 link = new LinkedList();
         }
}
这里你定义了一个私有的类的属性,只是一个属性而已,
它在栈空间中分配一个变量link,其它地方是没有的。
构造方法中的语句意思是说:将这个变量指向堆空间的一块区域,
像你这种写法和单例设计模式很近了,以下是一个单例模式,
public class Singleton {
        private static Singleton instance = new Singleton();

        public static Singleton getInstance() {
                return instance;
        }

        private Singleton() {
        }
}
毕老师视频里讲的很详细,你可以看下,

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
private LinkedList link  这个是在栈内存中开辟一个空间,有一个引用link,但这个时候并没有指向任何对象。
link = new LinkedList()  这个就是给上面的栈内存中的link指向一个对内存中的具体对象。
LinkedList link=new LinkedList()?  因为你上面已经定了link了 在同一个作用域里面变量名不能重复

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
谢军 发表于 2013-1-7 23:59
import java.util.*;
class DuiLie
{

private LinkedList link;定义了一个属性叫link,是LinkedList类型的,此时的link没有指向对象;在产生DuiLie对象时,为link进行了显示初始化

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
import java.util.*;
class DuiLie
{
         private LinkedList link;

        DuiLie()
         {
                 link = new LinkedList();
         }
如果字段里有static这是单例模式,只能创建一个对象,你如果是
linkedList link=new linkedList();这样就米有单例性了,指向了另一个新对象

你的没有static,上面是声明,
下面是创建的对象

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
private LinkedList link;这是说这个DuiLie类,有一个LinkedList类型的属性 link,
link = new LinkedList();这一句,是在构造函数里面的初始化语句,也就是所谓的构造函数初始化,初始化属性用的,就是初始化上面那一句的。
在第一句里面,你也可以初始化,那就是所谓的显示初始化或者叫赋值,当然你也可以像第一句那样不赋值,但是因为他是对象的属性,而且是引用类型的,所以他的的默认值是null。
至于你说为什么不再加类型的原因,就是看你需求了,如果你硬要加的话,那么下面那个link就会只是一个局部变量了,只能在他定义的区域里面有用(也就是最近的一对大括号)当然这也是可以的,但问题是,在这里你这个类的属性又没有赋值,肯定是空指针异常了。说到底,就是看你的需求是什么来决定你要怎么做。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
黄锦成 发表于 2013-1-7 23:56
先把你的问题中的代码弄好再问吧?你贴出来的代码有点乱

import java.util.*;
class DuiLie
{
        private LinkedList link;

        DuiLie()
        {
                link = new LinkedList();
        }
回复 使用道具 举报
先把你的问题中的代码弄好再问吧?你贴出来的代码有点乱
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马