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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李前进 中级黑马   /  2014-4-11 17:39  /  1077 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

private LinkedList link= new LinkedList();

private LinkedList link;
DuiLie()//构造函数
{
        link = new LinkedList();
}
有什么不一样?用构造函数有什么好处吗?

点评

以前看视频,里面的讲师说在构造函数里设计,会显得你很出色,这是一种思想,在构造的时候就将属性赋值, ,后来想也是,构造函数本来就是初始化   发表于 2014-4-11 17:50

6 个回复

倒序浏览
构造函数一般是给类初始化成员用的  如果你的类里面有需要初始值的 就可以用构造函数赋值。
假如写了一个带参数的构造函数。那么系统就不会给你默认的构造函数了
所有最好自己写一个带空参数的
回复 使用道具 举报
本帖最后由 H._张_♂ 于 2014-4-11 19:19 编辑

第一种情况叫做初始化后立即赋值
  1. import java.util.LinkedList;

  2. public class Test5 {

  3.         public static void main(String[] args) {
  4.                 // 调用DuiLie,并创建实例对象
  5.                 DuiLie duiLie = new DuiLie();//当new DuiLie()时,栈中先有一个link引用指向堆中的一个LinkedList实例对象
  6.         }

  7. }
  8. class DuiLie {
  9.         private LinkedList link = new LinkedList();//这叫一次性赋值。创建引用后直接复制
  10.         DuiLie(){System.out.println(link);}//构造函数可以省略,输出[]。
  11. }
复制代码

第二种叫做初始化后二次赋值
  1. import java.util.LinkedList;

  2. public class Test5 {

  3.         public static void main(String[] args) {
  4.                 // 调用DuiLie,并创建实例对象
  5.                 DuiLie duiLie = new DuiLie();
  6.         }

  7. }
  8. class DuiLie {
  9.         private LinkedList link;//在java中jvm一律赋初值。这里为null;
  10.         
  11.         DuiLie(){
  12.                 System.out.println(link);//输出null
  13.                 link = new LinkedList();
  14.                 System.out.println(link);//输出[] 表示link为空
  15.         }
  16.         
  17. }
复制代码
至于好处,我觉得应该是延迟加载的问题。


评分

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

查看全部评分

回复 使用道具 举报
第一种  

当类加载的时候,该对象就初始化了,堆内存中就会给该对象开辟空间

第二种

当建立该类的对象时,才初始化对象,你有需要的时候才会在内存中开辟空间!

对象的值一般是有构造函数传过来的,这样更灵活一点,

比如你这个类中的对象需要改变时,你需要去改原来的代码,

而第二种,如果加了参数,建立对象时,直接修改参数就好了!

评分

参与人数 1黑马币 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
第一种是直接初始化,也叫做成员变量显示初始化,在new对象的时候,堆内存开辟空间,private LinkedList link默认初始化值为null,因为它是引用数据类型,然后显示初始化为new LinkedList();
第二种是堆内存开辟空间时,private LinkedList link默认为null,然后通过构造函数传递参数初始化
回复 使用道具 举报 1 0
第一种是直接声明类的对象,并且初始化,第二种是用另一个类的构造函数来初始化对象,有点儿延迟加载的感觉。看看其他人怎么说
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马