从今天开始进入Java面相对象,C#中对面相对象理解就是万物皆对象,这个细节一点写笔记,希望自己对面相对象有更详细理解。
一、类
类:对显示生活中一类具有共同属性和行为的实物的抽象
对象:是能够看得到摸得着的诊室存在的实体
简单理解:类是对事物的一种描述,对象则为具体存在事物。
类是对象的抽象,对象的类是实体
ps:如果手机算一个类,交流中提到手机并不知道手机具体指哪个,可能是苹果、小米华为等等各个品牌,这就是类。如果这里说具体到某一个手机,比如你的小米14手机,你大概率手里面就一个。那么这小米14就是具体的对象。这段话可以验证上面的话。
二、对象属性
属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值。
ps:还是以手机举例,你的小米14手机,它的属性可以看来有:品牌名字、价格、cpu芯片、内存大小等等。这些都是手机共有的属性,可能属性的值不一样,小米的可能是芯片骁龙,苹果手机芯片可能是A15。虽然都有价格属性,各个手机价格的属性值,也就是售价,都不一样。
三、行为
行为:能够执行的操作。 ps:行为就是方法
ps:还是用手机举例,那么手机的发短信、打电话、聊微信等等,这些就是行为。
这点上我也不太明白,可能因为学到这里的时候还没太过透彻。如果让我来说明,就是具体执行代码的代码块。用我C#的理解,我写了一个方法,里面肯定有具体要操作的事情,比如输出一个helloworld的控制台输出。
四、类的定义
1、类的重要性:类是Java程序的基本组成单位
类是什么:是对象现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的属性和行为。
ps:为什么这里我又写了一次,我感觉这里可以说明一点为什么是现实的抽象,是因为我们写的程序肯定要服务于现实,比如做一个表格,那列名(字段)如何定义,肯定要起一个名字吧,手机列里面可以写各种手机,这就是我们自己定义类,所以是现实的抽象。(因为我第一次学习C#的时候让老师一句万物皆对象也很懵,我已经努力的让写清晰什么是类,不知道会不会帮到一些人)
2、类的组成
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
五、对象的使用(ps:就当熟悉了,这个和C#一模一样)
- 创建对象
格式:类名 对象名 = new 类名();
范例:Phone phone1 = new Phone();
- 使用对象
- 使用成员变量
格式:对象名.变量
范例:phone1.bard = “xiaomi”;
-
- 使用成员方法
格式:对象名称.方法名
范例:phone1.call();
六、对象内存
- 单个对象
- 多个对象
- 多个对象指向同一个地址
ps:这个算是对自己帮助比较大的,因为自己学习了一部分的C语言,对于指针比较了解。
这里扩展一个知识点,因为自己学习比较杂,大概了解(如果有错也希望有人看到可以指出来)。
内存分为栈内存和堆空间,栈的意思是:存放内存的地址,这个地址可以指向一个空间,这个空间就是堆内存。(大致理解一下,栈内存就是宾馆房卡,可以打开其中一个房间,上面也写着门牌号,去哪个房间,房间也就是堆内存。具体房间里面有什么,就是咱们的数据)我感觉初学者可以不用太过理解C语言的指针一样的内容,容易打消学习积极性。
下面的是更加一级的扩展心得:
另外这一段的学习让我大概了解了出栈,每次运行完毕以后会把方法出栈。(个人理解,有可能不对:出栈以后只是更换了房间号码,或者说更换了一个房卡,用其他房卡打开的还是原来的房间,所以如果新建的数据类型如果不进行初始化,有可能还是过去的数据,过去自己学习C语言的时候,越界访问以后就是其他的值。)
七、成员变量和局部变量的区别
- 成员变量:在类中的方法外定义的变量。
- 局部变量:在类中方法里面定义的变量。
- 在同一个方法中,不允许存在多个相同变量的名称。
- 局部变量如果想使用,必须先赋值,成员变量是有初始化值的。
- 在方法在传递的参数(形参)也是属于该方法里面的局部变量
区别(不同) | 成员变量 | 局部变量 |
类中位置 | 类中方法外 | 类中方法里(方法声明传递参数) |
内存中位置 | 堆内存 | 栈内存 |
声明周期不同 | 随着对象存在而存在 随着对象消失而消失 | 随着方法调用存在而存在 随着方法结束消失而消失 |
初始化不同 | 有默认的初始化值 | 没有默认的初始化值 必须先定义赋值后使用 |
ps:以前学习C#的时候,让必须先声明,然后赋值,最后使用。这里补全了为什么有些可以不赋值直接使用,不过也可以记忆成为声明->赋值->使用,避免出错。