java学习笔记-----数组

                            
  In the Java programming language,arrays are objects(§4.3.1) ,are dynamically creaeted,and may be assigned to variables of type Object (§4.3.2). .All method of class Object may be invoked on an array.
                              即数组是一个对象,它拥有Object类中的方法。
    • 验证:

              char[] ch=new char[5];
              System.out.println(ch.getClass());
              System.out.println(ch.getClass().getSuperclass());
/*Output
*class [C
*class java.lang.Object
*说明数组是一个类[C对象,同时基类为Object
*/



  • 定义及初始化
    • 定义        
              int[] a1;//定义"一个int型数组引用",现在只是为该引用分配了足够的存储空间,但没给数组对象本身分配任何空间。
              //System.out.println(a1.toString());//编译错误,原因没有初始化。在JAVA,除了类成员变量会自动初始化(数组类型初始化为0,布尔型为false,引用为null),局部变量不初始化不能直接使用,否则编译器报错。
              //int[2] a2;//定义数组的时候不允许指定数组的大小,否则编译错误

    • 初始化
              int[] a1={1,2,3,4};// 初始化方法1
              int[] a2=new int[4];// 初始化方法2,它的元素值为该元素类型的默认值(数字类型为0,布尔类型为false,引用类型为null),只是初始化数组a2是指向一个int引用的数组,并没有把int存放到数组中。
              Father[] f=new Father[5];//这是运用了初始化方法2,它的元素值均为null,即都为空引用
              //f[0].a=1;//直接使用空引用,运行时产生NullPointerException异常
              for(Father x:f)//需要对数组中的引用进行初始化
              {
                     x=new Father();
              }
             
              int[] a3=a1;// 初始化方法3,复制了一个引用,注意此时a3和a1指向对一个数组对象
              

    • PS:故此一般定义和初始化是一起使用




  • 常用的方法和变量
    • length:数组的长度
              int[] a1={1,2,3,4};
              System.out.println(a1.length);//输出数组a1的长度4
              //a1[4]++;//运行时,java会检查数组下标,一旦越界,就会抛出ArrayIndexOutOfBoundsException异常。

    • toString()和Arrays.toString():前者属于Object类的方法
   //Object.toString() 
   public String toString() {
       return getClass().getName() + "@" + Integer.toHexString(hashCode());
   }
              int[] a1={1,2,3,4};
              System.out.println(a1.toString());
              System.out.println(Arrays.toString(a1));
              /*Output:
               *[I@7852e922
               *[1, 2, 3, 4]
               */
             

    • clone():复制数组
              int[] a1={1,2,3,4};
              int[] a3=a1;//这种复制方法,使得a3和a1指向同一个对象
              int[] a4=a1.clone();//使用clone方法复制,a4和a1不指向同一个对象
              System.out.println(a1==a3);//true
              System.out.println(a1==a4);//false


  • 深入探讨
    • 对象数组和基本类型数组的唯一区别在于,对象数组存放的是对象的引用,而基本类型数组存放的是基本类型的值。
    • 方法的返回值就两种形式:1.数值(对于基本类型而言);2.引用(对于对象包括数组而言)
    • 对于多维数组中,在new只需指明第一维的维数即可。
    • 不能创建一个泛型数组(即T[] a//error;Peel<Apple>[] a//error),但是能够创建一个Object数组,再转型为T[],即(T[])new Object[4];
    • 数组不支持自动包装机制
    • System.arraycopy()数组复制,属于浅复制
    • 浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。举例来说更加清楚:对象A1中包含对B1的引用,B1中包含对C1的引用。浅拷贝A1得到A2,A2 中依然包含对B1的引用,B1中依然包含对C1的引用。深拷贝则是对浅拷贝的递归,深拷贝A1得到A2,A2中包含对B2(B1的copy)的引用,B2 中包含对C2(C1的copy)的引用。




  • CompareTo()返回值(默认情况下)
    • 如果指定的数与参数相等返回0。
    • 如果指定的数小于参数返回 -1。
    • 如果指定的数大于参数返回 1。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值