从事编程已经有一段时间了,忽然发现,Java做为个人第一编程语言,本身彷佛对她并有一个系统的思想。当下Java依旧保持着超高的热度,新特性也不断出现,从当初学习的java6版本到最近刚出的java9,我意识到本身须要对整个java知识体系作一个梳理。借用一下《老子》里面的一句话:合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。
坚实的基础对于编程同样是重要。
接下来,开始咱们的积累之路吧!java
Java是一门面向对象编程语言,不只吸取了C++语言的各类优势,还摒弃了C++里难以理解的多继承、指针等概念,所以Java语言具备功能强大和简单易用两个特征。Java语言做为静态面向对象编程语言的表明,极好地实现了面向对象理论,容许程序员以优雅的思惟方式进行复杂的编程。 Java具备简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特色 。Java能够编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。--来自百度百科
看完百度的解释,是否是仍是懵懵懂懂,不知所云?不要紧,随着后面的接触,天然而然能理解其中的意思了。c++
Java:由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。Java语言是一种能够撰写跨平台应用软件的面向对象的程序设计语言,由当时任职太阳微系统的詹姆斯·高斯林(James Gosling)等人于1990年代初开发,它最初被命名为Oak。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。程序员
1991年4月,由James Gosling博士领导的绿色计划(Green Project)开始启动,此计划的目的是开发一种可以在各类消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划的产品就是Java语言的前身:Oak(橡树)。Oak当时在消费品市场上并不算成功,但随着1995年互联网潮流的兴起,Oak迅速找到了最适合本身发展的市场定位并蜕变成为Java语言。正则表达式
1992年3月,因为Oak已被用做另外一种已存在的编程语言名称,所以必须选一个新的名字——它就是Java,灵感来源于咖啡。算法
1993年2月,电视机顶盒,FirstPerson试图从时代华纳得到一个电视机顶盒交互系统的一揽子订单。在那时,因为绿色计划不是很成功,随即失去了时代华纳的订单。因而开发的重心从家庭消费电子产品转到了电视盒机顶盒的相关平台上。编程
1995年5月23日,Oak语言更名为Java,而且在SunWorld大会上正式发布Java 1.0版本。Java语言第一次提出了“Write Once,Run Anywhere”的口号。c#
1996年1月23日,JDK 1.0发布,Java语言有了第一个正式版本的运行环境。JDK 1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)。JDK 1.0版本的表明技术包括:Java虚拟机、Applet、AWT等。数组
1996年4月,10个最主要的操做系统供应商申明将在其产品中嵌入Java技术。同年9月,已有大约8.3万个网页应用了Java技术来制做。在1996年5月底,Sun公司于美国旧金山举行了首届JavaOne大会,今后JavaOne成为全世界数百万Java语言开发者每一年一度的技术盛会。安全
1997年2月19日,Sun公司发布了JDK 1.1,Java技术的一些最基础的支撑点(如JDBC等)都是在JDK 1.1版本中发布的,JDK 1.1版的技术表明有:JAR文件格式、JDBC、JavaBeans、RMI。Java语法也有了必定的发展,如内部类(Inner Class)和反射(Reflection)都是在这个时候出现的。服务器
直到1999年4月8日,JDK 1.1一共发布了1.1.0~1.1.8九个版本。从1.1.4以后,每一个JDK版本都有一个本身的名字(工程代号),分别为:JDK 1.1.4 – Sparkler(宝石)、JDK 1.1.5 – Pumpkin(南瓜)、JDK 1.1.6 – Abigail(阿比盖尔,女子名)、JDK 1.1.7 – Brutus(布鲁图,古罗马政治家和将军)和JDK 1.1.8 – Chelsea(切尔西,城市名)。
1998年12月4日,JDK迎来了一个里程碑式的版本JDK 1.2,工程代号为Playground(竞技场),Sun在这个版本中把Java技术体系拆分为3个方向,分别是面向桌面应用开发的J2SE(Java 2 Platform, Standard Edition)、面向企业级开发的J2EE(Java 2 Platform, Enterprise Edition)和面向手机等移动终端开发的J2ME(Java 2 Platform, Micro Edition)。在这个版本中出现的表明性技术很是多,如EJB、Java Plug-in、Java IDL、Swing等,而且这个版本中Java虚拟机第一次内置了JIT(Just In Time)编译器(JDK 1.2中曾并存过3个虚拟机,Classic VM、HotSpot VM和Exact VM,其中Exact VM只在Solaris平台出现过;后面两个虚拟机都是内置JIT编译器的,而以前版本所带的Classic VM只能之外挂的形式使用JIT编译器)。在语言和API级别上,Java添加了strictfp关键字与如今Java编码之中极为经常使用的一系列Collections集合类。
在1999年3月和7月,分别有JDK 1.2.1和JDK 1.2.2两个小版本发布。
1999年4月27日,HotSpot虚拟机发布,HotSpot最初由一家名为“Longview Technologies”的小公司开发,由于HotSpot的优异表现,这家公司在1997年被Sun公司收购了。HotSpot虚拟机发布时是做为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及以后全部版本的Sun JDK的默认虚拟机。
2000年5月8日,工程代号为Kestrel(美洲红隼)的JDK 1.3发布,JDK 1.3相对于JDK 1.2的改进主要表如今一些类库上(如数学运算和新的Timer API等),JNDI服务从JDK 1.3开始被做为一项平台级服务提供(之前JNDI仅仅是一项扩展),使用CORBA IIOP来实现RMI的通讯协议,等等。这个版本还对Java 2D作了不少改进,提供了大量新的Java 2D API,而且新添加了JavaSound类库。JDK 1.3有1个修正版本JDK 1.3.1,工程代号为Ladybird(瓢虫),于2001年5月17日发布。
自从JDK 1.3开始,Sun维持了一个习惯:大约每隔两年发布一个JDK的主版本,以动物命名,期间发布的各个修正版本则以昆虫做为工程名称。
2002年2月13日,JDK 1.4发布,工程代号为Merlin(灰背隼)。JDK 1.4是Java真正走向成熟的一个版本,Compaq、Fujitsu、SAS、Symbian、IBM等著名公司都有参与甚至实现本身独立的JDK 1.4。哪怕是在十多年后的今天,仍然有许多主流应用(Spring、Hibernate、Struts等)能直接运行在JDK 1.4之上,或者继续发布能运行在JDK 1.4上的版本。JDK 1.4一样发布了不少新的技术特性,如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等。
JDK 1.4有两个后续修正版:
2002年9月16日发布的工程代号为Grasshopper(蚱蜢)的JDK 1.4.1
2003年6月26日发布的工程代号为Mantis(螳螂)的JDK 1.4.2。
2002年先后还发生了一件与Java没有直接关系,但事实上对Java的发展进程影响很大的事件,那就是微软公司的.NET Framework发布了。这个不管是技术实现上仍是目标用户上都与Java有不少相近之处的技术平台给Java带来了不少讨论、比较和竞争,.NET平台和Java平台之间声势浩大的孰优孰劣的论战到目前为止都在继续。
2004年9月30日,JDK 1.5发布,工程代号Tiger(老虎)。从JDK 1.2以来,Java在语法层面上的变换一直很小,而JDK 1.5在Java语法易用性上作出了很是大的改进。例如,自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等语法特性都是在JDK 1.5中加入的。在虚拟机和API层面上,这个版本改进了Java的内存模型(Java Memory Model,JMM)、提供了java.util.concurrent并发包等。另外,JDK 1.5是官方声明能够支持Windows 9x平台的最后一个JDK版本。
2006年12月11日,JDK 1.6发布,工程代号Mustang(野马)。在这个版本中,Sun终结了从JDK 1.2开始已经有8年历史的J2EE、J2SE、J2ME的命名方式,启用Java SE 六、Java EE 六、Java ME 6的命名方式。JDK 1.6的改进包括:提供动态语言支持(经过内置Mozilla Java Rhino引擎实现)、提供编译API和微型HTTP服务器API等。同时,这个版本对Java虚拟机内部作了大量改进,包括锁与同步、垃圾收集、类加载等方面的算法都有至关多的改动。
在2006年11月13日的JavaOne大会上,Sun公司宣布最终会将Java开源,并在随后的一年多时间内,陆续将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并创建了OpenJDK组织对这些源码进行独立管理。除了极少许的产权代码(Encumbered Code,这部分代码大可能是Sun自己也无权限进行开源处理的)外,OpenJDK几乎包括了Sun JDK的所有代码,OpenJDK的质量主管曾经表示,在JDK 1.7中,Sun JDK和OpenJDK除了代码文件头的版权注释以外,代码基本上彻底同样,因此OpenJDK 7与Sun JDK 1.7本质上就是同一套代码库开发的产品。
JDK 1.6发布之后,因为代码复杂性的增长、JDK开源、开发JavaFX、经济危机及Sun收购案等缘由,Sun在JDK发展之外的事情上耗费了不少资源,JDK的更新没有再维持两年发布一个主版本的发展速度。JDK 1.6到目前为止一共发布了37个Update版本,最新的版本为Java SE 6 Update 37,于2012年10月16日发布。
2009年2月19日,工程代号为Dolphin(海豚)的JDK 1.7完成了其第一个里程碑版本。根据JDK 1.7的功能规划,一共设置了10个里程碑。最后一个里程碑版本原计划于2010年9月9日结束,但因为各类缘由,JDK 1.7最终没法按计划完成。
从JDK 1.7最开始的功能规划来看,它本应是一个包含许多重要改进的JDK版本,其中的Lambda项目(Lambda表达式、函数式编程)、Jigsaw项目(虚拟机模块化支持)、动态语言支持、GarbageFirst收集器和Coin项目(语言细节进化)等子项目对于Java业界都会产生深远的影响。在JDK 1.7开发期间,Sun公司因为相继在技术竞争和商业竞争中都陷入泥潭,公司的股票市值跌至仅有高峰时期的3%,已无力推进JDK 1.7的研发工做按正常计划进行。为了尽快结束JDK 1.7长期“跳票”的问题,Oracle公司收购Sun公司后不久便宣布将实行“B计划”,大幅裁剪了JDK 1.7预约目标,以便保证JDK 1.7的正式版可以于2011年7月28日准时发布。“B计划”把不能按时完成的Lambda项目、Jigsaw项目和Coin项目的部分改进延迟到JDK 1.8之中。最终,JDK 1.7的主要改进包括:提供新的G1收集器(G1在发布时依然处于Experimental状态,直至2012年4月的Update 4中才正式“转正”)、增强对非Java语言的调用支持(JSR-292,这项特性到目前为止依然没有彻底实现定型)、升级类加载架构等。
到目前为止,JDK 1.7已经发布了9个Update版本,最新的Java SE 7 Update 9于2012年10月16日发布。从Java SE 7 Update 4起,Oracle开始支持Mac OS X操做系统,并在Update 6中达到彻底支持的程度,同时,在Update 6中还对ARM指令集架构提供了支持。至此,官方提供的JDK能够运行于Windows(不含Windows 9x)、Linux、Solaris和Mac OS平台上,支持ARM、x8六、x64和Sparc指令集架构类型。
2009年4月20日,Oracle公司宣布正式以74亿美圆的价格收购Sun公司,Java商标今后正式归Oracle全部(Java语言自己并不属于哪间公司全部,它由JCP组织进行管理,尽管JCP主要是由Sun公司或者说Oracle公司所领导的)。因为此前Oracle公司已经收购了另一家大型的中间件企业BEA公司,在完成对Sun公司的收购以后,Oracle公司分别从BEA和Sun中取得了目前三大商业虚拟机的其中两个:JRockit和HotSpot,Oracle公司宣布在将来1~2年的时间内,将把这两个优秀的虚拟机互相取长补短,最终合二为一。能够预见在不久的未来,Java虚拟机技术将会产生至关巨大的变化。
2011年7月28日,Oracle公司发布Java SE 1.7
2014年3月18日,Oracle公司发表Java SE 1.8
2017年9月22日,Oracle公司发表Java SE 1.9
1、 Java和C:
一、二者编程思想不一样,C语言是一种过程式语言,较为简单直观,它是Java,C++等高级语言的基础。而Java语言是一种面向对象语言。
二、Java语言的安全性更好,Java语言很看重程序的安全性。java不容许程序员直接进行指针操做。指针能够说是C语言中最灵活的一个数据类型,也是最容易出错的。java就避免了这些问题的产生。
三、Java能够经过多线程来同时执行多个任务。线程是程序内一个单一的顺序控制流程。C语言在某个时刻只能执行一个任务,而Java能够经过多线程来同时执行多项任务。
2、 Java和C++:
一、Java语言不须要程序对内存进行分配和回收。Java丢弃了c++中不多使用的、很难理解的、使人迷惑的哪些特色,如操做重载、多继承、自动强制类型转换。特别的,Java语言不使用指针也没有指针。在Java语言中,内存的分配和回收都是自动执行的,程序员无需考虑内存碎片的问题。
二、Java语言中没有指针的概念,引入真正的数组。不一样于C++中利用指针实现的“伪数组”,Examda,Java引入了真正的数组,同时将容易形成麻烦的指针从语言中去掉,这将有利于防止在c++程序中常见的由于数组操做越界等指针操做而对系统数据进行非法读写带来的不安全问题。
三、Java用接口(Interface)技术取代C++程序中的多继承性。接口与多继承有一样的功能,可是省却了多继承在实现和维护上的复杂性。
3、 Java和c#:
一、在面向对象世界里,一切都是对象Java和C#都是面向对象的语言,它们都遵照面向对象的概念,这也使得这两种语言很像,至少看起来是这样.但在具体实现上,这两种语言仍是有很大差异的.做为面向对象的语言,Java先于C#面世.一切皆是对象,Java遵照得很好――全部的类都继承自Object,一点儿问题没有!然而同时,Java认识到不少时候咱们须要作一些简单计算:2+3=五、(2==3)=false…这些频繁使用的简单的不能再简单的小东西,咱们有必要封装起来作成一个个对象再去操做它们吗?回答是,没有必要!因而,Java引入了简单类型,或者叫基本类型,同时引入了值类型的概念.换言之,Java的值类型就是这几个简单类型,并且它们是脱离Object以外的概念,它们不是面向对象的元素.Java便成了面向对象+boolean、byte、short、int、long、char、float、double这八个简单类型。
二、Java更加注重面向对象,更加注重标准化和完美化.因而,Java有了Eclipse,有了JSP、Serverlet、EJB,有了Spring、Structs、Hibernate…C#更加注重实用性和易用性,它封装的更多一些.因而C#有了VisualStudio,有了ASP.Net、WinFormApp、CommandLineApp、WCF、WPF、WF、EntityFramework…比较而言,Java更开放,朋友不少;C#更封闭,但微软很给力。
三、2010年1月,Oracle收购了Sun,把MySQL和Java归入囊中,让广大开发者不由对MySQL和Java的前景产生担心..2008年,C#刚兴起的时候,Java已经发展得如火如荼了.但后来C#一直发展挺快,向Java借鉴的同时,也不断创新,引入本身的新东西,如:对值类型的大胆改造,引入Linq、Lumda表达式,等.Java和C#都是在发展的.Java计划也将引入Lumda语法,看来Java也开始放下架子,和C#相互学习了.开放仍是封闭、依靠社区仍是本身开发,Java和C#选择的道路不一样,但都将更强大且易于使用。
上图是来自TIOBE排行榜
能够看出,Java超高的热度,这意味着Java前景好、Java比较好找工做。
java拥有庞大的用户,活跃的社区,语言稳定,能让你在遇到问题的时候快速找到解决方案。Java有不少企业在用,并且都是用在大项目上,这意味着java有良好的就业环境。
首先Java是一个面向对象的编程语言,容易理解。并且略去了多重加载、指针等难以理解的概念。而且实现了自动垃圾回收,大大简化了程序设计。并且网上关于java的学习资源太多太多了,如雨后春笋般冒出来的java培训机构也太多太多了,这都给咱们提供了一个很好的学习环境与氛围。
Java从出道至今已有10多年的历史,通过10多年的积累和沉淀,出现了不少优秀的开源社区,如Apache和Spring。这些优秀的社区提供了不少很是好的框架,借助这些框架可使咱们不用去关注Java底层的开发,而只需关注业务的实现。
其实图片中包括的并非特别准确,当下行情比上述描述的还要好,薪资其实比上面要更高,职业发展路径选择的方式也大于上图所示。但前提是,学好的状况下!
听完以上描述,是否是已经火烧眉毛的想要投入Java的怀抱了?还等什么,快上车,来不及了!
转载请注明:呆萌钟 » [Java Review 01] Hello,Java!