学习java的一点心得(一)

在学Java之前,我学过一段时间的C语言,掌握了大部分的基础。然后才接触Java,所以免不了经常将二者进行对比。

每种编程语言说到底是为了解决现实中的问题,所以在它诞生之初,必然夹杂了设计者对这个世界的理解。程序猿都知道:C语言是面向过程的;而Java是面向对象的。这两句话到底怎么理解呢?在我看来,实体之间的交互构成了我们的世界,先有静态的实体,然后实体动态的相互作用,这个世界才能运转。C语言描述世界的时候,侧重交互过程,至于谁来完成这个交互,那不重要;而java侧重实体的归类,只要定义好了实体,主要是实体的行为,剩下的交互是自然而然的事情,亦即交互不重要。实体也就是Java中的对象。


但是这个世界上的实体如此之多,Java若要一个一个的去描述,那显然不现实。所以它才用了向上归纳总结的策略,也就是归类:某个实体必然与其他实体有相似的地方,Java抽取出它们的共同特征,然后用一个类名代表这许多相似的实体。这样一来,Java描述世界便有了可能:属于同一类的实体,它们有着相同的属性和行为,唯一的区别只是属性值不同。不同的类,以及同一个类不同属性值的各种组合,构成了这个世界所有的静态实体。再给实体加上行为,它们便可以互动,世界正常运转了。


1、命名管理

对于任何一门语言,命名空间的设计都是不容忽视的方面。比如Java虽然提供了类抽象机制,但是并没有规定某一组实体只能归为某个名字的类;况且Java是给很多人使用的,不同的人对实体的归为哪一类有着自己独特的见解,同一个实体可以属于不同的类。于是极有可能出现类重名的情况,比如A把一组实体称为Apple类,而B把另一组实体也称为Apple类,那么Apple出现的时候到底指的是哪一组实体呢?

Java的策略是包机制:即每个类在逻辑上必须归属于某个包,然后以“包名.类名”来命名类。比如类Apple属于包package1,那么Apple类的全名就是“package1.Apple”。点号作为分隔符代表类与包之间的从属关系,在不引起冲突的场合可以直接引用Apple,但是在有冲突的情况下,必须使用类的全名“package1.Apple”。

接着只要给这个包取一个独一无二的名字,这样就可以防止冲突了。那么如何保证包名的独一无二呢?答案是域名!显然,全世界不可能有重复的域名,所以Java设计者建议Java程序猿反转自己(公司)的域名作为包名,比如拥有apple.com这个域名的人就可以使用com.apple作为自己的包名。

但是这恐怕还不够,因为可能有很多人共享同一域名:比如apple.com是一家公司的域名,这家公司有太多程序猿,大家都把自己命名的类放在com.apple包内,随着类越来越多,出现重名的几率也就越来越大。这时候,办法就是以点号为分隔符对原来的包名进行扩展,相当于建了一些“子包”,比如com.apple可以扩展成com.apple.one和com.apple.two,那么类com.apple.one.Apple和com.apple.two.Apple虽然都叫Apple,但却是不同的类。

显然可以使用点号分隔出无数的子包来,点号越多,代表分隔的层级越多,能容纳的冲突也就越多。只要保证了“根包”是独一无二的,下面的子包可以随便起名字(当然要保证同一级的子包不能重名),这种机制很像文件系统目录的命名机制。而实际上,二者之间确实存在着映射关系,这个以后会说。

综上,Java解决命名冲突的策略就是在类名的前面缀了一长串的包名,包名的唯一性决定了类名的唯一性;而包名的唯一性是由“根包”的唯一性决定的,跟包就是域名的反转,域名是全世界独一无二的。

注:目前的版本中,包名全部采用小写;而类名的首字母必须大写;在类的全名中,显然最后一个点号后面的才是真名。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值