小白学习Java第三天,JVM的内存划分及方法中参数的传递

一、JVM的内存划分

内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程 序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式,共分为5部分:
栈:存储的都是方法中的局部变量,方法运行一定要在栈中运行。
堆:存储对象或者数组,new来创建的,都存储在堆内存
方法区:存储可以运行的class文件,包含方法的信息。
寄存器:给CPU使用,和我们开发无关。
本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关。
程序执行过程示例图:
在这里插入图片描述

二、方法中参数的传递实质

方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。
定义格式:

修饰符 返回值类型 方法名(参数列表){ 
	代码... 
	return 结果; }

定义格式解释:
修饰符: 目前固定写法 public static 。
返回值类型: 目前固定写法 void ,其他返回值类型在后面的课程讲解。
方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
参数列表: 空车,有参两种形式。
return:方法结束。因为返回值类型是void,方法大括号内的return可以不写。
举例:

public static void methodName() { 
	System.out.println(“这是一个方法”);
}

方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。参数列表:个数不同,数据类型不同,顺序不同。
重载方法调用:JVM通过方法的参数列表,调用不同的方法。
方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值。
参数为引用数据类型是值传递很好理解,可见下方实例图所示。

public static void main(String[] args) { 
	int[] arr = getArray(); 
	for (int i = 0; i < arr.length; i++) {
 		System.out.println(arr[i]);
	}
 }
 public static int[] getArray() { 
 	int[] arr = { 1, 3, 5, 7, 9 }; 
 	//返回数组的地址,返回到调用者 
 	return arr; 
 }

在这里插入图片描述
重点说一下参数为基本数据类型的值。
值传递:是指在调用函数时,将实际参数复制一份传递给函数,这样在函数中修改参数时,不会影响到实际参数。其实,就是在说值传递时,只会改变形参,不会改变实参。
这里,需要特别强调的是,千万不要以为传递的参数是值就是值传递,传递的是引用就是引用传递。也不要以为传递的参数是基本数据类型就是值传递,传递的是对象就是引用传递。 这是大错特错的。以前的我,一直都是这样认为的,现在想来真是太天真了。判断是值传递还是引用传递的标准,和传递参数的类型是没有一毛钱关系的。
以下面试题为例:

package com.cp.demo;
public class Method_Demo1 {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a); //1
        System.out.println(b); //2
        change(a, b);
        System.out.println(a); //1
        System.out.println(b); //2
    }
    public static void change(int a, int b) {
        a = a + b;
        b = b + a;
        System.out.println(a);
        System.out.println(b);
    }
}

结果为:
1
2
3
5
1
2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章