java快速入门--3

数组

在java中,任何类型都可以定义成数组类型。例如我们之前学过int类型,int arr[] = new int[10];同时,如果我们学了对象,可以定义对象数组,例如,Person p[] = new Person[10],int类型的数组,它会自动初始化成0,boolean类型的数组会自动初始化成false。

//给数组赋值成0-9
int arr[] = new int[10];
for(int i = 0;i<10;i++){
    a[i] = i;
}

值得注意的是,在数组中,是从0开始的,那么0开始,从后数第10个位置是9,所以这里最多到9
同样的,如果我们先对整个数组进行赋值,那么只需要使用length属性即可。

int arr[] = new int[10];
for(int i = 0;i<arr.length;i++){
    arr[i] = i ;
}

如果你赋值的量比较少,那么你完全可以使用至今初始化的方法

int arr[] = {1,2,3};
//循环打印
for(int i = 0;i<arr.length;i++){
    System.out.println(arr[i]);
}

函数

如果我们有大量需要复用的代码块,那么我们可以将它封装到一起,在java中可以定义一个函数,例如,我想输出1-100内的素数

public static boolean isPrime(int i ){
    if(i<= 1){
        return false;
    }
    for(int q = 2 ;q<=Math.sqrt(i);q++){
        if(i%q == 0) return false;
    }
    return true;
}

public static void main(String args[]){
    for(int i = 1;i<= 100;i++){
        if(isPrime(i)){
            System.out.println(i);
        }   
    }
}

这样,如果我们写着写着,发现又要判断素数了,这时候,只需要调用isPrime()函数即可,而不需要再将isPrime()中的内容写一遍了。

函数与数组联系

与上面的数组联系,如果我们想将这个数组的元素都初始化成1,那么,我们也可以单独定义一个函数

public staitc void init(int arr[]){
    for(int i = 0;i<arr.length;i++){
        arr[i] = 1;
    }
}

这样,我们以后没生成一个数组,就只需将数组传到这个函数来执行即可,例如

int arr[] = new int[200];
init(arr);

函数与基本类型联系

上面初始化了数组,那么我们想初始化基础数据类型的变量可以这样做吗,也放到一个函数中去初始化。

    public static void main(String[] args) {
        int a = 0; 
        init(a);
    }
    public static void init(int i ){
        i = 2;
    }

如果我们也希望像数组那样初始化,看看上面这张写法可行吗?答案是不行的,上面的这种写法,并不能改变a的值,原因是,这里的a变量是基本数据类型,它放在栈中,我们无法去直接修改栈中的值,我们知道,栈是后进先出的,这里这是将a的值赋传给了init中的i,也就是实参传给了形参,只是拷贝了一份而已,我们在inti函数中,无论怎么操作,都是操作的i的内容,而非a的内容。

引用传递和值传递

上面的两个例子,分别是引用传递和值传递的最好的说明了,数组放在堆中,我们可以通过引用直接修改堆中数据,而基本数据类型保存在栈中,我们知道栈是后进先出的,我们无法直接修改栈中的内容,jvm也不会允许这么做。
如果你学了C语言或C++,你可以理解成C中的指针,也可以理解成C++中的引用。后面会讲到对象,事实上,对象的传递也是引用传递,我们完全可以将这个对象放到另一个函数中去初始化。

猜你喜欢

转载自blog.csdn.net/qq_25956141/article/details/79701009