笔记10

int[] a:定义一个整型的数组A,它其实是对数组类对象的一个引用。
数组可以是一组相同类型的基本变量或者是一组相同类型的对象。

//初始化方法1
int[] a;
a=new int[10];//这句可以写在任何地方

//当然也可以连写:
int []a=new int[10];//本书作者推荐用这种方式
//初始化方法2(必须在定义数组类对象引用的同时用{}进行赋值)
int[] a={1,2,3};

每一个数组对象都有一个成员变量length,它表示数组内元素的个数,但注意!不能给它赋值。

public class H
{   
    public static void main(String[] args)
    {
        int[] a1={1,2,3,4,5};
        int[] a2;
        a2=a1;
        for(int i=0;i<=a2.length-1;i++)
        {
            a2[i]=a2[i]+1;
        }
        for(int j=0;j<=a1.length-1;j++)
        {
            printnb(a1[j]+" ");
        }
        print();
    }

}                   

输出:2 3 4 5 6

这表示数组对象之间赋值传递的是引用,数组对象本身存的是对数组的引用。
如果对数组下标越界使用C++和C都是不会报错的,但JAVA会 报错。

package net.mindview;
import static net.mindview.util.Print.*;
import java.util.*;
//数组是有初始值的,数值型整数的值为0,小数为0.0
//char是空格
//boolean是false
//类对象是null
public class H
{   
    public static void main(String[] args)
    {
        Random rand=new Random(47);
        int[] a;
        a=new int[rand.nextInt(20)];//rand.nextInt(20)[产生[0,20)的随机整数值]
        print(a.length);
        String str=Arrays.toString(a);//将数组转化成字符串的形式
        print(str);

        double[] b;
        b=new double[rand.nextInt(20)];
        print(b.length);
        print(Arrays.toString(b));

        char[] c;
        c=new char[rand.nextInt(20)];
        print(c.length);
        print(Arrays.toString(c));

        boolean[] d;
        d=new boolean[rand.nextInt(20)];
        print(d.length);
        print(Arrays.toString(d));

        String[] s;
        s=new String[rand.nextInt(20)];
        print(s.length);
        print(Arrays.toString(s));

    }

}             

输出:
这里写图片描述

public class H
{   
    public static void main(String[] args)
    {
        Integer[] a=new Integer[10];  //注意这里a是10个 Integer x...也就是说a[i]是该类对象的引用,没有初始化的话会有默认值null
        for(int i=0;i<=9;i++)
        {
            a[i]=i;
        }
        print(Arrays.toString(a));

    }
}      

输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

public class H
{   
    public static void main(String[] args)
    {
        Integer[] a=new Integer[]{new Integer(1),new Integer(2),3,};//初始列表最后的“,”是可选的,据说“,”便于护长列表
        Integer[] b={new Integer(4),new Integer(5),6};
        print(Arrays.toString(a));
        print(Arrays.toString(b));
    }
}     

输出:
[1, 2, 3]
[4, 5, 6]

下面这个脑洞我是第一见到,能理解这个过程。但是不知道这能用到什么地方,不知这段代码是处理什么问题用的。
书中写的是用于替换main()方法的命令行参数。

public class H
{   
    public static void main(String[] args)
    {
        A.main(new String[]{"hello","my","lover","java"});

    }
}   

class A
{
    public static void main(String[] args)
    {
        for(String str:args)
        {
            print(str);
        }

        print(Arrays.toString(args));
    }
}

输出:
hello
my
lover
java
[hello, my, lover, java]

补充:其实上面这段代码就是起了个和主函数同名的函数,其实完全可以简化并这样理解:

import java.util.*;
public class Hello
{

    public static void main(String[] args)
    {
        Bitch.fuckworld(new String[]{"you ","are ","a ","gammer"});
    }

}
class Bitch
{
    static void fuckworld(String[] str)
    {
        for(String i:str)
        {
            System.out.println(i);
        }
        System.out.println(Arrays.toString(str));
    }
}

输出:
you
are
a
gammer
[you , are , a , gammer]

public class H
{   
    H(String str)
    {
        print(str);
    }
    public static void main(String[] args)
    {
        H[] haha=new H[]{new H("I"),new H("love"),new H("java")};

    }
}  

输出:
I
love
java

这个输出说明H[] haha=new H[]{new H(“I”),new H(“love”),new H(“java”)};依次调用了构造函数

补充:

public class Hello
{
    Hello(String s)
    {
        System.out.println(s);
    }

    public static void main(String[] args)
    {
        Hello[] bitch=new Hello[3];
        for(Hello i : bitch)
        {
            System.out.println(i);
        }
    }

}

输出:
null
null
null

这说明Hello[] bitch=new Hello[3];只是创建了Hello类对象的引用,名字为Hello[0] Hello[1] Hello[2]但是这些引用没有指向的对象。

public class Hello
{
    Hello(String s)
    {
        System.out.println(s);
    }

    public static void main(String[] args)
    {
        Hello[] bitch=new Hello[]{new Hello("a"),new Hello("b"),new Hello("c")};
        for(Hello i : bitch)
        {
            System.out.println(i);
        }
    }

}

输出:
a
b
c
Hello@5e2de80c
Hello@1d44bcfa
Hello@266474c2
这说明 Hello[] bitch=new Hello[]{new Hello(“a”),new Hello(“b”),new Hello(“c”)};创建了名为Hello[0] Hello[1] Hello[2]的引用,并给他们分配了指向的对象 Hello[0]=new Hello(“a”) Hello[1]=new Hello(“b”) Hello[2]=new Hello(“c”)

class A
{
    static void f(Object []ob)
    {
        for(Object i:ob)
        {
            printnb(i+" ");
        }
        print();
    }

}
public class H
{   
    public static void main(String[] args)
    {
        A.f(new Object[]{new Integer(1),new Float(2.5),new A()});
        A.f(new Object[]{new Integer(1),new Integer(2),new Integer(3)});
        A.f(new Object[]{new Double(1.1),new Double(2.2),new Double(3.3)});
        A.f(new Object[]{new A(),new A(),new A()});//输出的每一条数据的@之前是类名,@之后是对象的地址
        print();print();
        Object[] a=new Object[]{new Integer(1),new Double(2.2),new A()};
        //也就是说所有类都是Object类的子类,用这个知识点,可以给Object类的对象赋值
        //所以Object对象的引用数组里可以存任意类型以及任意数目的类对象。
    }
}   

输出:
1 2.5 net.mindview.A@15db9742
1 2 3
1.1 2.2 3.3
net.mindview.A@6d06d69c net.mindview.A@7852e922 net.mindview.A@4e25154f

补充:简写了一个:

import java.util.*;
public class Hello
{
    static void f(Object[] ob)
    {
        System.out.println(Arrays.toString(ob));
    }

    public static void main(String[] args)
    {
        Hello.f(new Object[]{1,2,3,4,2.2});
        Hello.f(new Object[]{new Integer(1),new Double(2.2)});
        Hello.f(new Object[]{new Hello(),new Hello()});
    }

}

输出:
[1, 2, 3, 4, 2.2]
[1, 2.2]
[Hello@5e2de80c, Hello@1d44bcfa]

分析:
static void f(Object[] ob)
{
System.out.println(Arrays.toString(ob));
}
参数为Object类对象的引用数组,即Object[0],Object[1]…
在调用函数的时候,例如用这种方式:Hello.f(new Object[]{new Integer(1),new Double(2.2)});
new Object[]{new Integer(1),new Double(2.2)}它给每一个前面说的Object[0],Object[1]..赋初值,即让他们指向对象 。
Object[0]=new Integer(1) Object[1]=new Double(2.2),这里唯一特殊的部分在于这个初值可以是任意类型的,因为 Object类是所有类的基类,即:所有类的都是Object类的子类,子类可以给基类赋初值对象。然后因为是数组,所有可以是不定个数的。

=====102未完

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值