1. 数组的特点

(1)数组是一种引用数据类型

(2)数组当中的多个数据,类型必须统一

(3)数组的长度在程序运行期间不可改变

2.数组常见的初始化方式

    1)动态初始化:

           数组格式:数据类型 [ ] 数组名称 = new 数据类型 [数组长度]

           例:int [ ] array = new int [5];  //创建一个数组存放5个int数据。 

                  double [ ] array1 = new double [ 300] //创建一个数组存放300个double类型数据。 

           动态初始化(已指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。    

           动态初始化数组,其中元素会默认一个值:
                   整型:默认为0;
                   浮点:默认为0.0;
                   字符:默认'\u0000';
                   布尔:默认false;
                   引用:null

    2)静态初始化:

            数组格式:数据类型 [ ] 数组名称 = new 数据类型 [ ] {元素1,元素2,元素3} ;

            省略格式:数据类型[ ] 数组名称 = {元素1,元素2,元素3}; 

            例:int [ ] array = new int [ ] {5,15,20}; 

                   string [ ] array1 = new string [ ] { "hello","world","java" } ;

             静态初始化(已指定内容):在创建数组时,不直接指定数据个数多少而直接将具体数据内容进行指定。

             静态初始化数组也有默认值的过程,只不过系统马上将默认值替换为括号中具体数值。

             建议:不确定数组内容,用动态初始化,已确定内容,用静态初始化。

3.Java内容划分5部分

            1.栈(Stack):存放的都是方法中得局部变量、
                                      局部变量:方法的参数或方法{}内部变量
                                      作用域:一旦超出作用域,立刻从栈内存中消失。
            2.堆(Heap):凡是new出来的东西,都在堆当中,
                                      堆内存里的东西都有一个地址值:16进制
                                      堆内存里的数据,都有默认值:整数:0   浮点:0.0
                                      字符:'\u0000' 布尔:false  引用类型:null
            3.方法区:(Method Area):存储。class相关信息,包含方法信息
            4.本地方法栈(Native Method Stack):与操作系统相关
            5.寄存器(pcRegister):与CPU有关

            引用变量,都可以赋值为null
            数组必须进行new初始化才能使用其中的元素
            如果只是赋值了null,没有进行new创建
            将会发生空指针异常NullPointerException

4.数组实际使用时,在栈、堆、方法区的作用情况

public class Demo1{
    public static void main(String[] args){
        int[] array = new int[3];
        System.out.println(array); //输出地址值
        System.out.println(array[0]); //输出0
        System.out.println(array[1]); //输出0
        System.out.println(array[2]); //输出0
        System.out.println("-----------------------------");
        //数组赋值
        array[1] = 10;
        array[2] = 20;
        System.out.println(array); //输出地址值
        System.out.println(array[0]); //输出0
        System.out.println(array[1]); //输出10
        System.out.println(array[2]); //输出20
    }
}

           解释:数组被new之后,会在堆(Heap)中开辟新的地址空间举例地址为:0x666,动态初始化 new int  [3] 开辟3个空间即:[0]、[1]、[2]。而栈内存中的int [ ] array会根据地址:0x666进行匹配并执行栈内存的方法,而System.out.println(array);输出的也就是地址值0x666。当array [1] = 10; 时,堆内存中的下标[1] 就赋值为10,同理下标为[2] 赋值20。

 

java boolean数组 javadouble数组_JAVA数组

5.数组反转(实战)

       给定数组 int [ ] array = {1,2,3,4,5,6,8,1000}; 对数组进行交换反转,实现输出数组为 {1000,8,6,5,4,3,2,1}

public class Demo2{
    public static void main(String[] args){
    int [] array = {10,15,6,100,89};
    
        //遍历打印数组array
        for(int i = 0;i<array.length;i++){
            System.out.println(array[i]);
        }
        System.out.println("----------------------------------------");
    
        //反转
        for(int min = 0,max = array.length-1;min<max;min++,max--){
            int temp = array[min];
            array[min] = array[max];
            array[max] = temp;
        }
    
        //打印反转之后的数组
        for(int i = 0;i<array.length;i++){
            System.out.println(array[i]);
        }
    }
}

下面附一张理解此代码的示意图

6.求数组最大值

public class Demo3{
    public static void main(String[] args){
        int [] array ={1,2,3,4,5,6,8,1000};
        int max = array[0];
        for(int i = 0;i<array.length;i++){
            if(array[i]>max){
                max = array[i];
            }
        }
    System.out.println(max);
    }
}

此时输出的最大值为:1000

        同理,求最小值,只需要将 if 判断中的关系运算符">"号变为"<"号即可。