Java : 一个帝国的诞生

C语言帝国的统治

现在是公元1995年, C语言帝国已经统治了我们20多年, 实在是太久了。

1972年, 随着C语言的诞生和Unix的问世, 帝国迅速建立统治, 从北美到欧洲, 从欧洲到亚洲, 无数程序员臣服在他的脚下。

帝国给我们提供了极好的福利:贴近硬件, 运行极快, 效率极高。

使用这些福利, 程序员们用C 开发了很多系统级软件,操作系统, 编译器, 数据库,网络系统…

但是帝国也给我们安上了两个沉重的枷锁: 指针和内存管理

虽然指针无比强大, 能直接操作内存, 但是帝国却没有给我们工具去做越界的检查, 导致很多新手程序员轻易犯错。

至于内存管理, 帝国更完全是放任的态度: 你自己分配的空间, 自己去释放 !

更要命的是这些问题在编译期发现不了, 在运行时才会突然暴露, 常常让我们手忙脚乱, 昏天黑地去调试。

我们的大量时间和宝贵的精力都被浪费在小心翼翼的处理指针和内存分配上。

每个程序员都被这两个东西搞的焦头烂额!

帝国宣称的可移植性骗了我们,他宣称我们在一个机器上写的程序, 只要在另外一个机器上编译就可以了, 实际上不是这样。 他要求我们尽量用标准的C函数库。其次,如果遇到了一些针对特定平台的调用, 需要对每个平台都得写一份 ! 有一点点小错误,都会导致编译失败。

1982年,帝国又推出了一门新的语言C++, 添加了面向对象的功能,兼容C, 有静态类型检查, 性能也很好。

但是这门新的语言实在是太复杂了, 复杂到比我聪明的多的人都没有办法完全掌握这门语言,它的很多特性复杂的让人吃惊。

C++在图形领域和游戏上取得了一些成功, 但是我一直学不好它。

反抗

我决定反抗这个庞大的帝国, 我偷偷的带领着一帮志同道合的兄弟离开了,我们要新建一块清新自由的领地。

为了吸引更多的程序员加入我们, 我们要建立一个新的语言,这个语言应该有这样的特性:

语法有点像C , 这样大家容易接受

没有C语言那样的指针

再也不要考虑内存管理了, 实在受不了了

真正的可移植性, 编写一次, 到处运行

面向对象

类型安全

还有,我们要提供一套高质量的类库, 随语言发行。

我想把这个语言命名为C+±- , 即C++减减, 因为我想在C++的基础上改进,把它简化。

后来发现不行, 设计理念差别太大。

干脆重启炉灶。

我看到门口的一棵橡树, 就把这个语言叫做Oak。

但是后来发布的时候, 发现Oak已经被别人用了, 我们讨论很久, 最终决定把这门新的语言叫做 Java。

为了实现跨平台, 我们在操作系统和应用程序之间增加了一个抽象层: Java 虚拟机

用Java写的程序都跑在虚拟机上, 除非个别情况, 都不用看到操作系统。

一鸣惊人

为了吸引更多的人加入我们的新领地, 我们决定搞一个演示, 向大家展示Java 的能力。

出世未久的Java其实还远不完善。 搞点什么好呢?

我们把眼光盯上了刚刚兴起的互联网, 1995年的网页简单而粗糙, 缺乏互动性。 于是我们在浏览器上弄了个小插件, 把java 运行环境放了上去。

然后在上面开发了一个图形界面的程序(Applet), 让它看起来美轮美奂, 震撼人心。

每一个看到他的程序员都会发出“Wow”的惊叹 !为之倾倒。

Java 活了!

通过Applet , 无数的程序员看到了Java这门语言,了解了这门语言特性以后, 很多无法忍受C帝国暴政的程序员, 很快加入了我们, 我们的领地开始迅速扩大。

连C语言帝国里的一些商业巨头也纷纷来和我们合作, 其中就包括Oracle , 微软这样的巨头 , 微软的头领Bill Gates还说 :这是迄今为止设计的最好的语言!

但是Bill Gates非常的不地道, 买了我们的Java 许可以后,虽然在自家的浏览器上也支持Applet, 但是他们却偷偷的试图修改Java , 想把Java绑死在自家的操作系统上赚钱, Java会变的不可移植。

这是我们难于忍受的, 我们和微软发起了一场旷日持久的游击战争, 逼着微软退出了Java领域, 开发了自己的.NET , 这是后话。

开拓疆土

从1995年到1997年,我们依靠 Java 不断的攻城略地, 开拓疆土,我们王国的子民不断增加, 达到了几十万之众, 已经是一个不可忽视的力量了。

但是大家发现, Java除了Applet, 以及一些小程序之外, 似乎干不了别的事情。

C帝国的人还不断的嘲笑我们慢, 像个玩具。

到了1998年, 经过密谋, 我们Java 王国决定派出三只军队向外扩展:

Java 2 标准版(J2SE): 去占领桌面

Java 2 移动版(J2ME): 去占领手机

Java 2 企业版(J2EE): 去占领服务器

其中的两只大军很快败下阵来。

J2SE 的首领发现, 开发桌面应用的程序员根本接受不了Java, 虽然我们有做的很优雅的Swing 可以开发界面, 但是开发出的界面非常难看, 和原生的桌面差距很大。 尤其是为了运行程序还得安装一个虚拟机, 大家都受不了。

J2ME也是, 一直不受待见, 当然更重要的原因是乔布斯还没有重新发明手机, 移动互联网还没有启动。

失之东隅,收之桑榆, J2EE赶上了好时候, 互联网大发展, 大家忽然发现, Java简直是为写服务器端程序所发明的!

强大, 健壮, 安全, 简单, 跨平台 !

在J2EE规范的指导下, 特别适合团队开发复杂的大型项目。

我们授权BEA公司第一个使用J2EE许可证, 推出了Weblogic, 凭借其集群功能, 第一次展示了复杂应用的可扩展性和高可用性。 【三高:高可用,高性能,高并发】

这个后来被称为中间件的东西把程序员从事务管理,安全管理,权限管理等方面解放出来, 让他们专注于业务开发。 这立刻捕获了大量程序员的心。

很快Java 王国的子民就达到数百万之众。

榜样的力量是无穷的, 很快其他商业巨头也纷纷入场, 尤其是IBM,在Java 上疯狂投入,不仅开发了自己的应用服务器 Websphere, 还推出了Eclipse这个极具魅力的开源开发平台。

当然IBM利用java 获得了非常可观的效益, 软件+硬件+服务 三驾马车滚滚向前, 把IBM推向了一个新的高峰。

帝国的诞生

大家也没有想到,除了商业巨头以外, 程序员们也会对Java王国 这么热爱, 他们基于Java 开发了巨多的平台,系统,工具,例如:

构建工具: Ant,Maven, Jekins

应用服务器: Tomcat,Jetty, Jboss, Websphere, weblogic

Web开发: Struts,Spring,Hibernate, myBatis

开发工具: Eclipse, Netbean,intellij idea, Jbuilder

。。。。等等等等。。。。

并且绝大部分都是开源的 !

微软眼睁睁的看着服务器端的市场被Java 王国占据, 岂能善罢甘休? 他们赶紧推出.NET来对抗, 但我们已经不在乎了, 因为他的系统是封闭的,所有的软件都是自家的:

开发工具是Visual Studio, 应用服务器是IIS, 数据库是SQL Server,只要你用.NET,基本上就会绑定微软。

另外他们的系统只能运行在Windows服务器上, 这个服务器在高端市场的占有率实在是太低了。

2005年底, 一个新的王国突然崛起, 他们号称开发效率比java 快5-10倍, 由此吸引了大批程序员前往加盟。

这个新的王国叫做Ruby on Rails, 它结合了PHP体系的优点(快速开发)和Java体系的优点(程序规整), 特别适合快速的开发简单的Web网站。

虽然发展很快, 但没有对Java 王国产生实质性的威胁, 使用Ruby on Rails搭建大型商业系统的还很少。

除了Ruby on Rails ,还有PHP, Python , 都适合快速开发不太复杂的Web系统。 但是关键的,复杂的商业系统开发还是Java 王国的统治之下。 所以我们和他们相安无事。

2006年, 一只叫Hadoop的军队让Java王国入侵了大数据领域, 由于使用Java 语言, 绝大多数程序员在理解了Map/Reduce , 分布式文件系统在Hadoop中的实现以后, 很快就能编写处理处理海量数据的程序, Java 王国的领地得到了极大的扩展。

2008年, 一个名叫Android 的系统横空出世, 并且随着移动互联网的爆发迅速普及, 运行在Android之上的正是Java !

Java 王国在Google的支持下, 以一种意想不到的方式占领了手机端, 完成了当年J2ME 壮志未酬的事业 !

到今年为止, 全世界估计有1000万程序员加入了Java王国,它领土之广泛, 实力之强大, 是其他语言无法比拟的。

Java 占据了大部分的服务器端开发,尤其是关键的复杂的系统, 绝大多数的手机端, 以及大部分的大数据领域。

一个伟大的帝国诞生了。

Java的特性和优势

简单性

就是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。由于语法基于c,因此学习起来完全不费力。

面向对象

面向对象是一种程序设计技术,他将重点放在数据(即对象)和对象之间的接口上。模拟人的思维写程序,万物皆对象!

可移植性(跨平台性)

这是JAVA的一个重要的优势。JAVA代码或者说字节码、二进制码可以跨平台的移植,而不用管具体的操作系统和硬件环境。

“一次编写,随处运行”:“write once, run anywhere”

JAVA在设计时就很注重移植和跨平台性。比如:JAVA的Int永远都是32位。不像c++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。

高性能

JIT(JUST IN TIME)即时编译。将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使JAVA程序的执行效率大大提高,某些代码甚至接近c++的效率。随着这种技术的一天天完善,也许有一天会超越编译代码的效率。

分布式

JAVA是为internet的分布式环境设计的,因为他能够处理tcp/ip协议。事实上,通过url访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,remote method Invocation),使程序能够通过网络调用方法。

动态性

就是在需要时将某些代码添加到正在运行的程序中。反射机制。当需要把某些代码添加到正在运行的程序中时,动态性是一个非常重要的特性。Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的

多线程

多线程的使用可以带来更好的交互响应和实时行为。多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。

安全性

Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以构建防病毒,防篡改的系统。

健壮性

Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合法的,而且不致引起任何问题。不过,即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该例外抛弃。再通过异常处理机制,程序就会发现这类例外,并加以处理。

当然,我们学习他这门语言,最初的目的,是因为使用的人多,我们需要去掌握学习,但是当我们慢慢的越来越深入的时候,你就会爱上他,发现他的无穷魅力并为之沉醉!

JAVA语言为什么能够成功

一个产品的成功和一个人的成功是一个道理。除了自身具备过硬的优势外,还需要那么一点点狗屎运,甚至狗屎运非常关键。就是我们所讲的天时地利人和。JAVA的成功除了自己具备跨平台特性外,更重要的是正好踩中了互联网发展的节奏。微软的成功除了windows好用外,也是正好踩中了个人电脑发展的节奏。所以,我们除了自己努力外,也需要出去走走努力才踩一坨狗屎才行!

学技术,也需要知道很多事情和历史对吧,我们来聊聊硅谷。

斯坦福大学依靠自身庞大的校区,创建了斯坦福科技园(硅谷的前身),初期采用房租免费等方式,鼓励自己的毕业生在科技园创业、鼓励社会企业入驻。由于免费的方式再加上其他优惠的政策,吸引了大量的创业者加入进来。最终大家添柴加火,造就了今天的硅谷。这才是最高明的房地产商啊!说到房地产,我们现在这个社会是不是就很难受了,年薪20万,买一套房子180万,你算算,是不是大概下来就需要十年了,你说你一个大好青年,因为一个房子,就一下变成中年大叔了!哎,人间不值得啊,所以我们需要通过不断的学习来提高自己,从而进步!让自己的人生更有价值,而不是活着而已。

斯坦福大学百科

看着这么多的牛人,各位,是不是我们也得努努力了,少刷点抖音,少玩点王者,吃鸡(玩得时候带带我~)多跟着我敲敲代码,没准以后咋们的同学也能搞出一个改变世界的东西是吧。

好了,不多说话,我们先来认识一下我们即将要学习的最终要的阶段,JavaSE。

Java基础:说说Java相关推荐

  1. java基础之java中的基本数据类型

    java基础之java中的基本数据类型 学习java一段时间了,使用java也差不多一年多了,可是对于后续的java的学习真的是后劲不足,或者是说懒惰吧,回想一下这一年多,用java最多的就是Andr ...

  2. java基础之----java常见异常及代码示例

    java基础之----java常见异常及代码示例 参考文章: (1)java基础之----java常见异常及代码示例 (2)https://www.cnblogs.com/gunduzi/p/1203 ...

  3. java基础总结-java技术栈快速复习

    java基础 java基础概念 java概述和语言背景 java语言是没有sun公司(Stanford University Network:斯坦福大学网络)在1995年推出的计算机语言 java之父 ...

  4. 【Java基础】· Java基本语法:程序流程控制习题总结

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  5. 黑马程序员:Java基础总结----Java语言编程规范

       黑马程序员:Java基础总结        Java语言编程规范:参考自SUN公司文档  ASP.Net+Android+IO开发..Net培训.期待与您交流!  I.   排版规范 A.  规 ...

  6. java基础:Java七大外企经典面试精讲视频

    java基础:Java七大外企经典面试精讲视频 对于很多应聘java程序员的求职者来说,全面掌握java面试技巧,确实是自己找到一个好工作的敲门砖.今天小编在这里给大家分享一个关于java基础的Jav ...

  7. java基础之java类型

    系列文章目录 java基础之java类型 文章目录 系列文章目录 基本类型 自动类型提升 引用类型 基本类型 整型 Byte 8位 -2^7~2^7-1 默认值0 Short 16位 -2^15~2^ ...

  8. Java 基础学习-Java语言概述

    Java 基础学习 第一章 Java语言概述 回顾java基础知识,进行整理记录. 文章目录 Java 基础学习 前言 一. Java语言发展史(了解) 二.Java语言跨平台原理(理解) 三.JRE ...

  9. JAVA基础之java语法

    JAVA基础之java语法 第一个java程序 // HelloWorld类名和文件名相同 public class HelloWorld {// 公开的 static 静态的 void 没有返回值 ...

  10. 一文带你深入理解【Java基础】· Java基本语法:程序流程控制

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

最新文章

  1. Hibernate之lazy延迟加载
  2. python垃圾回收机制(GC)相关问题
  3. win10软件拒绝访问删不掉_Win10右键菜单添加“获取文件管理员权限”选项
  4. 第一次java怎么创建一class_Java:如何创建Class参数?
  5. itop 安装时碰到的Missing PHP extension mysqli soap ldap
  6. python混合asp_用python实现面向对象的ASP程序实例
  7. mathematic语法基础
  8. 删除桌面无法删除的网页快捷方式
  9. 【NLP】一文简要了解词义消歧与实体消歧
  10. 药品召回管理办法(征求意见稿)(转)
  11. 使用pytorch自己从头搭建一个Lenet分类器网络及其训练、检测脚本
  12. linuxping百度未知的名称或服务_有赞怎么打通百度小程序?开通有什么好处?
  13. 力天创见客流方案分析
  14. 红米k30 android版本,红米K30配置如何 红米K30手机参数配置及图赏
  15. 这后台管理系统,有逼格!(附源码)
  16. 通过cib.xml重新启动pacemaker
  17. 微商是如何推广的呢?
  18. Linux USB摄像头使用
  19. BIM Revit2017下载安装教程及安装包
  20. 【金字塔Python量化学习笔记】01课:利用Python导出价格数据

热门文章

  1. 64位 regsrv win10_有没有 极品飞车9 win10 64位的中文补丁
  2. mac 升级php 到7,macOS High Sierra 10.13升级PHP到7.3并创建Laravel 7项目
  3. 洗扑克牌 (乱数排序)
  4. 计算机在服装上的应用研究,图像识别技术在纺织品及服装研究中的应用
  5. java 环境变量 locale_locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
  6. 点击html内任意图片放大,再点击关闭放大图片
  7. html 人物行走动画,CSS3人行走动作图解和动画实现
  8. [Excel表格]单元格内换行
  9. matlab_plot实时画点
  10. 开源地图服务器 网站,开源WebGIS:地图发布与地图服务