老生常谈,还拿咸鸭蛋举例子,我们的成员变量和成员函数,就是定义咸鸭蛋的属性和定义咸鸭蛋的操作。
1.1和1.2关键理解类的定义和对象的关系
我们这一节要
理解对象中的成员变量是怎么来的,怎么就能让成员函数明白自己在和 哪个对象打交道,
在没有引入类之前,变量是跟着代码走得,代码写到哪里,变量写在哪里,那么运行的时候变量就在那儿。现在写在类里的成员变量,只是一个声明,变量并不在哪里,变量不在类里面,变量在每一个对象里。
所谓变量就是会变的量,我们虽然在咸鸭蛋这个类里面定了咸鸭蛋应该有的属性,但是不同的咸鸭蛋属性的数据不一样,例如大小,价格,口味等,所以这个 “变” 指的就是我们创建一个对象之后传入的数据不一样罢了,所以变的那个量不在类里,而是在创建的每一个对象里。
成员变量
●类定义了对象中所具有的变量,这些变量称作成员变量
●每一个对象有自己的变量,和同一个类的其他对象是分开的
所以所谓的成员变量就是我们定义的咸鸭蛋的属性的变量
public clsss Xian{
int daxiao;
int balance;
int qiwei;
}
就咸鸭蛋而言,我们首先要定义咸鸭蛋可能有的属性,大小,价格,气味等等。这就是成员变量
成员函数
void guige(int daxiao){
System.out.println("咸鸭蛋的大小是"+daxiao+“cm”);}
我们自己定义一个函数操作名,后面跟着要传入的参数,这个参数就是我们刚开始定义的属性,然后我们就可以进行相应的操作,这就是成员函数,我们可以定义多个。
接下来如果我们想调用这个成员函数,那就要创建一个对象来,不然怎么对他赋予对应的属性呢(成员变量),然后通过对象名来调用成员函数,传递参数:
① 在主函数里面创建对象, 然后进行对对象进行具体赋值,创建一个具体对象
类名 对象名 = new 类名
Xian dan = new Xian( );
② 利用对象,调用类里面的函数操作
dan.guige(11);
对象名.函数操作名(函数需要的参数);
当然,我们可以创建很多咸鸭蛋,就是创建很多名字不同的对象,我们通过对象名进行调用的时候,不同的咸鸭蛋的的数据是互不干扰的,尽管他们用的都是一个属性
就是调用的时候临时建立了 guige( ) 和 dan 之间的关系 , 让guige()内部的成员变量指的是dan的成员变量。
怎样才能保证如此呢?我们就要请出我们的 “this” 大佬了,
●this是成员函数的一个特殊的固有的本地变量,他表达了调用这个函数的那个对象
举个例子:
当我们成员变量
int balance=10;
我想让成员变量的初始值赋予给一个对象的时候
成员函数假如是
void balances( ){
this.balance = balance;
}
此时的 this.balance 就是代表调用这个函数的那个对象的成员函数,说白了就是哪个咸鸭蛋调用了这个价格,那 this.balance 就是谁的咸鸭蛋的价格, 至于 balance 就是类的成员函数的值。balance永远是谁离得近,就是谁的,this 表示的是谁调用,就是谁的。
对象调用成员函数修改成员变量
void balances( int balance){
this.balance = balance;
}
Xian dan = new Xian( );
dan.balances(88);
我们传入了balance 价格,调用了成员函数,那balance 就是谁离得近就是谁的,在这个函数里面定义传入的参数,然后赋值给调用这个函数的对象的成员变量。就是谁调用,这个值给谁。
所以,
调用函数
●通过 “ . ” 运算符调用某个对象的函数
● 在成员函数内部直接调用自己(this)的其他函数。
本地变量
●定义在函数内部的变量是本地变量,比如上面标红的balance, 只在这个函数内生效,出去就失效了
●本地变量的生存期和作用域都是在函数内部
●成员变量的生存期是对象的生存期,作用域是类内部的成员变量