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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文彬 中级黑马   /  2014-3-15 18:34  /  1047 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文


本帖最后由 李兆宁 于 2012-8-10 10:48 编辑


class Array2
{
        public static void main(String[] args)
        {
                int[] arr = new int[]{2,4,12};
                int[] brr = {2,4,1};
        }
}

学习视频中,对于数组的定义,初始化时用new与不用new的区别在哪里呢?
什么时候需要new,什么时候不需要,有硬性规定吗?

另外问个小技巧,看视频中,老师用单行注释,一次注释多行,是怎么注释的呢?
(就是先选定要注释的行,然后就在每一行的前面加上注释符了)像:

class Array2
{
        public static void main(String[] args)
        {
                //int[] arr = new int[]{2,4,12};
                //int a = 9;
                //int[] brr = {2,4,1};
        }
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

6 个回复

倒序浏览
new的执行过程:

1)先在内存中划分一块空间,类中的member内容拷贝到此空间,这时memeber属性得到应有的空间,member方法拥有可执行代码

2)自动初始化该对象的属性变量,使用缺省值初始化

3)初始化其需要显示赋值的属性,将缺省值覆盖,写入显示值,这叫属性显示赋值初始化

4)调用该对象的构造,执行构造的方法体,构造也可以接收一些初始化参数,用于生成对象时对属性进行初始化操作

5)对象生成,此时将对象首地址传入引用变量

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
int[] arr = new int[]{2,4,12};
int[] brr = {2,4,1};
这是同一种数组格式。

一维数组有2种格式;
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
1、new创建的对象和数组存放在堆内存中(一new则创建对象),int[] brr = {2,4,1}的写法是对数组进行静态初始化,等号右边相当于产生了一个数组对象,也是存放在对内存中。因此,个人认为两种没有多大区别,只是写法不同啦。
2、老师用单行注释,一次注释多行,是怎么注释的呢?这个是用eclipse中的快捷键Ctrl+/。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
如果只是初始化,就数组而言,那么数组可以赋值null,或者什么等号后面什么也不写也行,默认也是null,如果new以后就是手动赋值啦,数组的值就不在是null
回复 使用道具 举报
答案二、三楼基本上都讲完了,补个点:
什么时候需要new? 当你不确定数组中元素时就用new;
例如有那么些类似小操作题:  遍历数组,将数组元素指定为1—1000;
如果要自己给数组int[] arr初始化赋值上面,多少代码要打到吐血,但你可以知道这个数组的长度肯定是1000;
因此:  int[] arr = new int[1000];  
         for(int i =0; i<arr.length;i++){
            arr[ i ] = i + 1 ;
         }
而当数组长度很短,你又知道数组元素时可以直接初始化赋值,除特殊情况外没必要 new ,直接赋值操作,代码既简洁也节约内存空间。

话多了,不过再教多LZ一个小招,有时候黑马试题会考: (总会看到,算加强记忆吧)
就是数组、集合等对象中 new 的在内存中的操作(也就是为什么上面说节约内存空间);
    String s1 = "string";                          //内存空间中创建了"string"这个字符串常量;
    String s2 = new String("string");        //创建了一个String实例并指向已有的"string"字符串常量;
    String s3 = new String("string");        //同上,但是是属于不同上者新String实例,即内存地址值不同;
    System.out.println(s1==s2);
    System.out.println(s2==s3);              //这两个比较的就是s1、s2、s3的内存地址值;
    System.out.println(s1.equals(s2));
    System.out.println(s2.equals(s3));      //这两个比较的是s1、s2、s3的字符串内容是否相同;
慢慢体会,这里不止一个知识点的,O(∩_∩)O~
回复 使用道具 举报
战狼 中级黑马 2014-3-16 09:26:32
7#
第一种注释为Ctrl+/,还有一种是ctrl+shift+/(这种是带星号的注释)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马