Java中关于类型的思考

刚开始学Java时候,自己就经常被两个概念困惑。

这个概念就是类。

类,究竟真实的含义是什么,这一定有确切的结论。

类,里面有方法,一个类可以用来执行。从这点可以看出,类就是程序。

然而,类有时候又是一种类型,一种数据的类型。此时,类和int double好像没什么区别。

那么,类究竟最准确的理解是什么呢?

其实是这样,程序其实就是一段执行的代码,说白了与之对应的就是方法,你可以理解为,一开始的程序就是由一个个方法组成。但是这个方法最容易出现的问题就是方法重名问题,另外,对于调用这个方法的人来说,重用性也是个问题。比如,你不知道这个代码在哪个文件里面保存,此时就需要一种方式,就是把代码分类,一种很容易想到的就是把解决某一类问题的代码放在一个文件里。当想去使用某个方法 的时候,不用乱找,只需要找到相关的那个文件即可,极大地缩小了范围,那个存放“相关代码”的文件,就叫类。里面有一“类”方法,这类方法解决类似的问题。这样,函数的重名和查找问题解决了。

于是就有了类和成员方法。那么只有算法肯定是不行的,巧妇难为无米之炊,除了方法,还要有变量参与计算,那么起初这些变量是包装在方法中的,方法调用结束,这个变量就没了。但是后来如果一类中的多个方法,都需要共享一个变量怎么办呢?那么这时候,成员变量就应运而生了,成员变量的本质就是供一个类或多个类的多个方法,可以共享一个变量。这里的共享,指的是可以共享访问的意思。成员变量大多是设置成私有的,仅仅这个类的方法可以访问。成员变量的本质还在于,变量和方法的分离,其实方法只要保存一份即可,而不同的变量需要不同的保存,这是显而易见的,Java内存机制也是这样设计的。如果有个变量,我需要再相同类型对象共享访问呢?那么类变量就应运而生了,用于存放所有对象共享的变量。

由上面我们可以体会到,一个类注定被设计成方法和变量的集合。说白了,就是数据结构+算法的集合。按理说,数据结构+算法=整个程序啊。而Java不同,Java中数据结构+算法=某一个类,这个类可以是单个程序,也可以是程序的一部分,多个类组合共同成为一个程序才是Java程序的特点。那对于每个java源文件(也就是每个类),我们把它看成什么最好呢?这就需要我们认清楚类和类之间的关系,其实是协作关系,这点不难理解。因为是相互调用,相互传递参数。这像不像现实中的两个人呢?像不像两个实体呢?两个物体呢?只不过,在Java中的这些物体,都有了“生命”,他们仿佛有了种魔力,就是可以有自己的“行为”,这个行为就是方法。我们把这种在内存中有“生命”的实例叫做对象。伟大的面向对象思想产生了。他和现实中对象的区别是,现实中的一个桌子,一把椅子,他们是没有生命的。而面向对象中的任何物体,几乎都有“操作自己”的方法,比如toString,就是把自己的信息输出。你想,一个桌子,一把椅子,可以把自己信息“主动”输出吗?不可以,只能通过人去测量。而面向对象和现实的最大区别在于,尽量让对象自己产生行为。在代码层面的解释就是,把和对象相关的代码封装在对象本身当中。当然也有和这种思想相反的想法,这就是一些设计模式中提到的了。但把和对象相关的方法封装在对象本身中,是绝对的面向对象主流思想。

所以,我们可以这样认为,面向对象的世界是魔幻的。因为其中的任何对象都是一种有生命的存在。

回过头来,我们再理解类和类型的区别和联系。具体的区别和联系,通过自己的总结就能很全面。但是,如果用一句简单的话去理解这个知识。实际上,我们往往关注的是类中的数据和数据相关的行为。类,相当于一种复杂的数据类型,或者,可以认为他是多个基本数据类型的集合。当然这仅仅是从数据角度来看。而从内容角度来看类中不仅是变量的集合,还是方法的集合。

总之,类不同于基本数据类型,但是可以说,类依然可以看做一种数据类型。就好比一个有生命的物体和一个没有生命的物体,都可以叫一个名字,但是他们确并不完全可以相提并论。类是面向对象特有的。可以把它想象成,一个模板,他可以产生出许许多多有生命的对象。

而方法声明时候,所谓的类型声明,真实的理解应该是某个类的对象,也就是内存中的实例,而不是类本身。对类本身的理解,应该说是创建对象的模板。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值