Java学习笔记(3)

一、内存中的参数传递

1、基本数据类型的参数传递

我们可以通过下面的具体示例来了解,基本数据类型的参数传递:

Java学习笔记(3)

上述代码具体的执行过程:

1)栈内存优先读取Demo类中的主方法main,并在栈内存中新建一个main方法的内存空间

2)在main方法中新建局部变量x,并赋值3

3)读取到show(x)方法时,在栈内存中新建一个show方法的内存空间

4)将主方法中的x=3传递到show方法的内存空间中,

5)读取show方法中的语句,将x的值置为4

6)show方法执行完毕,执行弹栈操作,如下图:

Java学习笔记(3)

7)继续读取main方法中的执行语句,打印x的值,因为show方法并没有返回值,因此,主方法中的x值并不受影响,所以最终输出结果为 x = 3 。

Java学习笔记(3)

2、引用数据类型的参数传递

对于引数据类型的参数传递,我们也可以通过一个具体示例,来进行了解:

Java学习笔记(3)

上述代码的具体执行过程:

1)栈内存优先读取Demo类中的主方法main,并在栈内存中新建一个main方法的内存空间

2)在栈内存的main方法的内存中新建一个局部变量d

3)在堆内存中新建一块Demo对象的存储空间,并对其中的成员x进行初始化 x=0 ,然后读取Demo类中的 x = 3 ,再将3赋给x,将堆内存中Demo对象的首地址传给栈内存的d

4)通过读取d中存的首地址,找到堆内存中的Demo对象,将9赋给其中的成员x

5)读取 show(x) ,在栈内存中新建一个show方法的内存空间,并将变量d传递进去

6)执行 show 方法中的 d.x = 4 语句,因为show中的变量d存储的是堆内存中 Demo 对象的首地址,所以会将堆内存中的x值置为4

7)show方法执行完毕,执行弹栈操作

8)继续读取main方法中的执行语句,打印x的值,因为堆内存中的x值已经变化,所以最终的输出结果是 4

Java学习笔记(3)

 

二、构造函数 

 

1、定义:

关于构造函数的定义,我们可以简单理解为,构建创造对象时调用的函数

2、作用:

可以给对象进行初始化

3、特点

1)创建对象都必须要通过构造函数进行初始化

2)一个类中如果没有定义构造函数,Java会为该类创建一个默认的空参数构造函数,如:

class Person
{
    Person() {} //为Person类创建一个空的构造函数
}

3)一个类中如果定义了构造函数,那么类中默认的构造函数就没有了

4、具体示例

class Person
{
	private String name;
	private int age;
	//定义一个Person类的构造函数
	Person() //构造函数,而且是空参数的
	{
		System.out.println("Person run");
	}
}


class ConsDemo 
{
	public static void main(String[] args) 
	{
		Person p = new Person(); //对新建的对象 p 进行初始化
	}
}

运行结果

Java学习笔记(3)

 

 5、一般函数和构造函数的区别

构造函数:

1)对象创建时,就会调用与之对应的构造函数,对对象进行初始化

2)对象创建时,会被调用,且只调用一次

一般函数:

1)对象创建后,需要函数功能时才调用

2)对象创建后,可以被多次调用