面向对象
类与对象
类
现实世界中如果事物与事物有共同特征,那么我们就把他们称之为一类,比如鱼类,运动类,电竞类等等。类是人类大脑思考总结出的一个模板,是一个抽象的概念。一个事物都应该具备状态和行为,比如学生,状态包括性别,年龄等等行为包括学习,跑步等等
这个学生的状态我们在类中称之为属性,行为我们称之为方法,假设一个学生性别男,喜欢跑步,那么他就有男这么一个状态和跑步这么一个行为
所以类 = 属性 + 方法
类中的属性又称为实例变量(对象变量),通常当一个方法表示一个对象的行为时该方法不用static修饰,这个方法又称为实例方法(对象方法),两者在访问时必须先有对象(类的实例化)才能访问。
对象
实际存在的个体,又称示例instance,通过类这个模板可以实例化多个对象,在上面的示例中我们只是大致给出了一个学生的类,没有具体实例化,假设这个学生性别为男,正在跑步。我们就可以通过类来实例化出这个学生对象
引用
引用的本质是一个变量,存储的是通过类实例化后的java对象的内存地址。
可以通过引用访问对象的属性。
访问实例变量有两种方法:第一种读取 引用.变量名 第二种修改 引用.变量名 = 值。
JVM(Java虚拟机内存分析)
方法调用时的参数传递问题
我们先试着分析一下这段代码的运行结果
初学者大部分都会认为结果为:add(i)的值为:11
11
但是i的值实际没有发生变化。
那么为什么i的值没有自增1呢,这时候就涉及到方法的调用时的参数传递问题,在我们创建的add方法开始被main方法调用的时候局部变量i被传到add方法的()里,这个步骤就等于() = i;()用来接收变量,而"()"就可以看作是另一个名为()的局部变量,这样当我们将i的值传给()就相当于把i的值赋值了一份传给了(),这两个局部变量互不干扰,比如:
当我们在add方法中对i++时,当前的i和main方法里的i已经时两个不同的i只是变量名相同,所以在对add方法中的i++时,main中的i不受影响,进而结果是原来的i不变,add方法中的i自增1。
方法调用时的引用数据类型传递问题
试着分析以上代码,写出运行结果。
这里我们还是add方法,但是add方法中的形式参数类型为引用数据类型,结果还和上面的传基本数据类型结果一样吗?答案是不一样。
在方法形式参数类型为引用数据类型时,我们传递的是当前引用所存储的对象的地址,而不管这个地址怎么复制,最终通过这个地址所找到的内容还是一样的,都是s1.age,所以不管我们是在哪里修改这个地址中的内容,它都是修改的这个数据本身
我们只需要记住当一个方法需要修改参数时,方法调用的时候参数的传递只是把变量复制了一份传到方法里面,只不过有的时候形式参数列表中的数据为基本数据类型,有的时候形式参数列表中的数据为引用数据类型。 当为基本数据类型时原参数(要传入的参数)不变,当为引用数据类型时原参数(要传入的参数)改变。
标签:JavaDay7,对象,数据类型,add,实例,引用,自学,方法 From: https://blog.csdn.net/m0_56008529/article/details/141872478