Hello!
Hello!Java!是本博客的第一个专栏。在选材的时候考虑了一小会,最后决定从Java,这个最最基本的语言入手,一步步和大家分享服务端研发的相关知识和技能。
计算机和软件系的学生在大三的时候会开始有倾向性地选择自己的主要语言。一般来说,Java是最多学生选择的语言。从全世界的从业及代码量来看,Java已经蝉联编程语言排行榜榜首多年。We are not alone but the most!
Java是什么?
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 [1] 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 [2] 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等
以上内容引用自百科文档,我对此进行一次自己的解读。
1、Java是一门编程语言;
类比我们在用的汉语、英语、甚至手语等等,一个人要通过语言向外界传递信息,语言是一个信息的载体;但是,单有语言,是不足够的:还需要人的大脑去组织语言,人的嘴巴或手根据大脑的指令做出语言的表达,此外,还需要接收信息的人,能够接收并解析你传递出来的语言。
所以,在作者大三大四的时候,同学们经常说,我用Java语言做个网站,我是Java工程师,等等。这几年已经不常用这样的说法了。原因有以下几种:
- Java只是一门语言,无法单独地创造价值。要做一个网站,实现一个功能,制造一个硬件,需要很多的技术和知识的汇集。
- Java同时也是一个生态,围绕着JVM、Java语言等基础,有很多的组件、技术已经是开箱即用了,在我们在使用Java创造价值的时候能提供大量的便利。但是,对于这些组件和技术,必须站在比编程语言更高的层次去剖析它们。
- 当你有了足够的研发经验时,编程语言已经不是一个限制。可以在极短的时间内,学习并使用另一个编程语言做研发。这也是现在越来越多的公司,以“服务端研发工程师”替代“Java研发工程师”的原因。
2、Java是静态语言还是动态语言?
静态语言是指,在运行前期(通常指编译期)编译器就能确定变量使用的内存空间,即,编译期类型已经确定。这种语言通常的表现为:
- 在定义变量的时候,编程语言规范会要求我们对变量的类型进行明确的定义
- 在程序运行的时候,无法动态改变某个变量的类型
因此,我们通常认为,Java是一门静态语言。(螃蟹注:在Java编程语言里,对于变量类型的动态是做了较多支撑的。在反射等场景能够简单地支持,未来可能有更多的动态能力引入)
3、当我们谈面向对象的Java时,我们在谈什么?
图片来自百度百科。
面向对象是一种研发的思想理论,从软件研发流程的角度来说,面向对象包括了面向对象分析、面向对象设计、面向对象编程。编程语言在最后一步,面向对象编程,里派上用场。
在Java语言的定义里,万物皆为对象。程序本身就是一个对象,这是大的框架。
但是具体到细节,到底能不能做好面向对象开发,是需要看人的本事的。很多时候,并没有所谓的对错。我举一个最简单的例子:
小明拿着钱包去便利商店购买一包糖,程序要求我们实现支付的流程。
如果你是研发工程师,你如何分析、设计、实现这个流程呢?大多数的我们,会在里面定义至少两个对象角色:客户和收银员。
还能在增加一个对象吗?我们不难发现,钱包也是一个对象。即,你可以将余额作为客户的一个属性,也可以将钱包做为客户的一个属性;如果采用后者,那么扩展性是更优秀的。
还能再深入吗?在支付的时候,判断“余额是否充足且扣减余额”这个动作,应该是客户来实现还是钱包对象来实现呢?如果是客户来实现,那么钱包就只是一个余额的记录器,那就退化成为一个没有灵魂的附属物了。
OK,确定了上述的细节,就可以使用Java语言来实现我们的需求了。你有没有发现,如果此时,改用Python或者Ruby、C++,也照样可以实现上面的需求。所以,面向对象≠Java!但Java,是一门推崇面向对象的语言。
关注本专栏、评论里Show出你对Java的见解,有机会获得阿里巴巴定制的暖手宝一个哦~~送给女神,这个冬天,小码农们不再单身!