面向对象的对象是啥

众所周知,Java是一门面向对象的语言,所以了解对象对于学习和使用Java是非常重要的,我在网上搜了很多“Java什么是对象”,的确有很多讲的很专业的文章,但发现一个有趣的现象,很多都是以举例的方式来介绍对象,包括但不限于“学生”、“汽车”、”大象装冰箱“等,我本来也想这么来介绍给我兄弟的弟弟的,但是突然想到,这么讲,岂不是有概率被误会?我想,无论如何举例,都很难存在那么一个举例对象能够完美契合“对象”的概念,既然如此,为什么不从最简单的语言去讲,什么是“对象”呢?

本文将尽可能少的使用举例的方法、“ 双引号 ”的方法

凡是被“ 双引号 ”包含的内容,是从...文学...语文的角度上,表示特殊含义,可以理解成表里不一,词不达意

这篇文章对于(致敬)Minecraft玩家而言更容易理解,不是偏见,只是恰好用了例子相关了而已

(写代码比写上面那句话简单多了...想那几个词想的我头皮发麻,如何找到一个义务教育的学生能够理解的词?)

(另外我发现,即使同为初中生,在悟性和阅历上也存在明显的差异,我这里的对象可以理解成除了学习啥都不知道的那种,同时学习成绩还勉强三线城市当地平均,😔)

首先需要理解,对象是一个较为抽象的概念,所以不要局限了,不要定义它的“定义范围”,不要拿到一个东西就说他是对象,或者不是对象,Java里万物皆可为对象,也可都不是对象。

首先,记住每个对象在实例化后才能对其进行操作,或使用其内容,每个对象是独立的。

这句话需要死记硬背,不需要理解,看完这篇文章,自然会理解,这句话的存在只是为了让你潜意识里有一个了解对象的方向感。

不过从最基础的去讲什么是对象,会导致一个结果,就是篇幅较长,需要通篇仔细阅读才能更好的理解,这对于一个赛博朋克的时代来说,是注定无法流行起来的方法,不过谁叫我兄弟的弟弟才初中,不怕耽误他“主业”,索性慢慢讲咯。

我们在接触Java的时候,了解到了我们写的代码的文件,格式是.java,当然我们可以写成任何任何格式,只是Sun发明这门语言的时候,发明了“阅读和执行”这门语言的“软件”,这个“软件”只认识.java的格式而已。

大概讲一下这个所谓的“软件”是什么,这里需要记住几个词,仅仅是记住就行了。

JVM,Java Virtual Machine,Java虚拟机,直译就行,JVM会将.java格式的文件变成.class的文件并运行他,而.class的文件是由0和1组成的。

我你所周知,0和1是电信号的两种状态,也是计算机的语言,所以JVM就是将代码转义成计算机能够理解的语言,并让计算机读一遍,这个过程的实际情况就是,我们的书写的代码通过JVM进行一系列预设好的函数和方法,变成了一串的0和1,传到了CPU去执行这个电信号。所以说,写代码就是一种控制CPU电信号的手段。

JRE,Java Runtime Environment,Java运行环境,同样直译,理解成JRE=JVM+Java系统类库,系统类库中有多种现成的方法,可以帮助程序员更好更简单的进行开发。(这里因为他玩MC,所以举了一个和MC相关的例子(MC是Java写的))就像你玩的MC,JVM就是纯净生存,在游戏里已经可以干很多事情了,JRE就是整合包,加入了很多如更多合成公式、逆向合成、提升掉落物等不破坏原规则的mod(他表示一下子理解了,还举例了debug,作者开发工具,秀了我一把,我说我低估他了,但同时指作者=程序员)。

JDK,Java Development Kit,Java开发工具包,除了包含JRE以外还包含了开发java程序所必须的命令工具,即JDK = JRE+编译、运行等命令工具。现在还不需要理解具体内容,只需要先记住,一台新电脑想要写Java代码,必须下载并安装JDK就行,当然JDK的实际内容远不止这些,非要举例的话,可以理解成MC的地图编辑器,皮肤编辑器,贴图编辑器。

总不能再教勾股定理的时候,就教他如何求证勾股定理吧,我不确定他有没有这么多的脑容量去记住这些,我也怕我没那么多时间去给他讲,毕竟经常一个大点的项目来了,我人就两个月处于“被动失联”的状态了。

偏了偏了.....

在理解JDK, JRE, JVM是啥之后,知道了Java的(非代码层面的)大概开发过程,而我们要讲的对象,就是其中JVM“创造”出来的,之所以用创造一词,是因为这个东西本来就在,而JVM只是进行了一个初始化的过程。

接着是方法区、堆、栈,这是当.class文件被执行时,CPU和内存条上被划分出来一些区块,用于执行和缓存代码或内容。这里暂时不做详细的理解。

然而系统类库中的一些东西,也是以对象的方式存在,所以我们通常说,当我们new了一个对象的时候,如

A a = new A;
对象的类型  对象的名称  =  新建  对象;
//这里涉及了java书写规则,字母什么时候大写,什么时候小写
//不着急,还没碰键盘,就还用不上,至少目前用不上

JVM会现在方法区去寻找这个对象的类信息,没找到的话,就会加载一个这个对象的.class文件出来,以方便我们使用。

换种说法就是,你找对象出来放着不用干嘛?留着占空间?所以,我们去new一个对象出来,必然是因为我们要使用这个对象。

当然,还有一些方法是为了防止你乱找对象,从而限制你找对象的方法,后面有缘再讲。

创建对象时对象的名称基于规则后可以随便取,对象的类型不能随便取,要看有没有这个类,大概理解为你在海洋馆找奇蹄目马科,会出现找不到对象异常即ObjectNotFoundException,这就话符合Java的书写规则,可以大概猜一下书写规则,但不建议过度猜测,只需要记住有时候单词首字母要大写就行。

A      a = new A;
方法区  栈   堆

对象的类型,即.class存放在方法区中,对象存放在堆中,对象的名字存放在栈中。

这里理解起来有一些麻烦,为什么要把对象类型,对象本体和对象名字分开放呢?

这里玩的就是一个归纳整理,任何东西,都有它自己的实体,名字,和类型,分开放可以方便管理。

对象的名字可以随便取,这是为了方便开发者自己使用,但其实对象的名字是一串16进制的内容,专业叫法叫地址,这个内容对应的是堆中某个具体的位置,每个对象在磁盘中都有独立的空间,要想一下子找到目标对象,靠的就是这个地址,每一个地址对应一个对象。

所以,在第一次new一个对象的时候,不仅在堆中生成了新的东西,也在栈中生成了新的东西。

对象可以是变量,可以是方法,也可以是类,不过因为变量的体量太小,所以没必要专门搞个对象来存放,就算是一串贼长贼难记的数字,设置一个常量就可以了,那都能用。绝大部分方法也没有必要存放在对象中,因为方法对应的就是功能,每个方法可以实现不同的功能,所以一个方法很有可能只用一次,当然也存在那种极其相似的方法,不过那种更适合一种叫重写或重载的写法,也比写个对象放在那好,虽然谁都可以是对象,但不是谁都适合当对象,要看具体的开发情况。

同时每次new对象,虽然new的都是A的对象,但是就是两个一模一样的对象,不同的地方就在于名字不同,名字不同自然地址也不同,所以也是在盘中不同的位置了,就像你给一个圆石用了命名牌换了一个名字”刚挖下来的圆石“,和圆石有一模一样的特性,它就只能叫圆石类的刚挖下来的圆石,和圆石是独立存在的两个个体(这里又是以游戏举例子了,话说Java写的游戏拿来举例Java示真的方便和贴切呢,我都能想象到游戏里不同道具的功能怎么用代码实现)。

有点绕,所以这篇文章是小众的,不被流行的,但对某些特殊人群有着起效的文章。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值