数组

  1. 一维数组:
    (1)定义:int a[ ]; 或 int[ ] a;
    (2)初始化:
public class Demo1{
    public static void main(String[] args){
        //省略格式的静态初始化
        int[] array1 = {10,20,30};

        //静态初始化的标准格式,可拆分为两步
        int[] array2;
        array2 = new int[] {11,21,31};

        //动态初始化的标准格式,可拆分为两步
        int[] array3;
        array3 = new int[5];
        
        /*
        需要注意的是静态初始化如果使用省略格式,一定不能分为两步
        int[] array4;
        array4 = {10,20,30}//报错
        */
    }
}

.
(3)引用:a[0],脚标取值范围为0 ~ a.length-1
(4)每个数组的长度 :a.length

  1. 多维数组: 定义:int [ ][ ] ii=new int[2][3]; 或 int [ ][ ] iii=new int [2][ ]; 或 int [ ][ ] iiii=new int [ ][ ]{{1,2},{3,4}};
  2. 混合定义数组: int [ ] x,y[ ];(x为一维数组,y为二维数组)
  3. 在JVM内存中,堆(Heap)存放数组的数据,栈(Stack)中存放数组的数据在堆中的地址值

方法(函数)

1.方法的参数:
(1)可以构造确定地参数个数,如:public void setName (String name){ this.name = name } (2)可以构造可变的参数个数,
方法一:用数组的方式传递可变参数;如果没有参数,就要定义一个空数组或null,如:public void print (String[ ] args ){...} 方法二:用Java特有的方法(…)用来传递可变个数的参数;如果没有参数可以不填,如:public void print (String... args){...}

2.方法的参数传递:Java中只有值传递,值是变量在栈中的值。

JVM内存模型:

java里空数组赋值_数据


因为基本数据类型都是保存在栈中,而引用类型数据及对象都是在栈中保存的是他们的地址值,在堆中保存的才是实际数据;所以会存在形参是基本数据类型还是对象的两种不全相同的情况。

(1)如果方法的形参是基本数据类型,那么实参(也就是实际的数据)向形参传递参数时,是把实参的值复制给形参,即值传递。所以一个方法不能够修改一个基本数据类型的参数(即数值型或布尔型)。
(2) 如果方法的形参是对象,那么实参(实际的对象)向形参传递时,是把实参在栈中的地址值,也就是引用对象在堆中的地址。所以一个方法可以改变一个对象参数的状态(即可以通过地址值改变数据),但是不能让实参对象更换引用(即地址值)。

具体图示分析如下:

java里空数组赋值_java里空数组赋值_02


java里空数组赋值_数组_03


java里空数组赋值_数组_04


3.方法类型:

(1)无参数无返回值

public void Demo1(){
    System.out.println("无参数无返回值");
}

(2)有参数无返回值

public void Demo2(int a,String b){
    System.out.println(a+"-->"+b);
}

(3)有返回值无参数

public void Demo3(){
    System.out.println("有返回值无参数");
    return true;
}

(4)有返回值有参数

public void Demo4(int a,int b){
    return a*b;
}

(5)return也可以用来结束方法

public void Demo5(int a){
    if(a>10){
        return ;
    }
    System.out.println(a);
}

另外也可以用System.exit(0)将整个虚拟机里的内容都停掉了 ,直接结束整个运行环境。


java里空数组赋值_JVM_05


java里空数组赋值_数组_06

JVM内存模型

上述两点都用到了一些JVM内存模型的知识,所以就系统整理了一些JVM内存模型的知识。

java里空数组赋值_java里空数组赋值_07


1.虚拟机栈描述的是Java 方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack )用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。Java 虚拟机栈也是线程私有的,生命周期与线程相同。

局部变量表存放了编译期可知的各种基本数据类型、对象引用(一般指的是位置信息,可能是一个指向对象起始地址的引用指针,也可能指向一个代表对象的句柄或者其他与此对象相关的位置)和returnAddress 类型(指向了一条字节码指令的地址)。

2.Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例(实际数据),几乎所有的对象实例都在这里分配内存。