疯狂Java:突破程序员基本功的16课-李刚编著 学习笔记(未完待续)

突破程序员基本功(16课)

数组

  • 静态语言: 在编译的时候就能确定数据类型的语言,大多静态语言要求在使用变量之前必须声明数据类型(少数具有强推导能力的现代语言不用)
  • 动态语言: 在程序运行时确定数据类型的语言,变量使用之前不需要声明数据类型

java是静态语言,在使用之前需要声明变量类型。

//声明一个可存放数据类型为String,长度为5的数组
 String[] arr = new String[5];

数组的初始化

数组初始化有两种方式

  • 静态初始化: 初始化时,程序员显示指定数组每个元素的初始值,由系统决定数组的长度
//静态初始化,方法一
String[] arr1 = new String[]{
    "hello",
    "world",
    "hello",
    "java"
};
//静态初始化方法二
String[] arr2 = {
    "xixi",
    "haha"
};
  • 动态初始化: 初始化时程序员指定数组长度,由系统为数组分配初始值
//动态初始化方法
String[] arr3 = new String[5];

动态初始化时,系统默认分配初始化值按照如下规则

1. 数组元素类型为基本类型中的整数(byte, short, int, long),默认初始值是0。
2. 数组元素类型为基本类型中的浮点数(float, double)默认初始值是0.0。
3. 数组元素类型为基本数据类型中的字符型(char),默认初始值是'u0000'。
4. 数组元素类型为引用类型(类,接口,数组),默认初始值是null。

数组初始化一旦完成,就无法改变数组的长度

数组一定需要初始化么?

  • 数组变量不需要初始化
  • 数组变量引用的数组对象需要初始化
public static void main(String[] args) {
    String[] buff = new String[]{
            "v1",
            "v2"
    };
    //声明数组
    String[] movies;
    movies = buff;
    System.out.println(Arrays.toString(buff));
}

结果:

[v1, v2]

由上可只movies(数组变量并不需要初始化,但是该引用所引用的对象需要初始化)。

基本数据类型的初始化

    public static void main(String[] args) {
        int[] iArr; //1

        iArr = new int[]{ //2
            1,
            2
        };
    }
  1. 第一步声明变量的时候,只是在栈区声明了一个变量iArr,此时改变量还没有指向任何的引用对象。
  2. 第二步的时候,在堆区域开辟了一个连续的内存空间,长度为4,这个时候iArr指向堆区这一连续的内存空间。

Tips: 并不是所有的基础数据类型都存储在栈区,如上此时的"1,2存储在堆区域。更明确的说,所有的局部变量都存储栈内存中(包括基本数据类型变量和引用类型变量)。但引用类型变量所引用的对象总是存储在堆内存里。

引用类型数据类型初始化

class Person {
    int age;
    String name;

    public Person() {

    }

    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }
}

public class ArrDemo {

    public static void main(String[] args) {
        Person[] students = new Person[2]; //1
        System.out.println(students.length); //2
        Person amber = new Person(1,"amber");//3
        Person nick = new Person(3, "nick"); //4
        students[0] = amber; //5
        students[1] = nick; //6
        System.out.println(amber); //7
        System.out.println(students[0]); //8
    }
}

未完

原文地址:https://www.cnblogs.com/amberbar/p/11610381.html