JAVA给你讲它的故事
任何一个产品的发展规律都是:向着人更加容易使用、功能越来越强大的方向发展。
那么,我们的计算机语言的发展也是这样,向着人更加容易使用,即更加容易写代码、更加容易实现现实逻辑的方向发展。套用奥林匹克的口号“更高、更快、更强”。那么计算机发展的主线可以总结为四个字:“更易、更强”。
这个”更易、更强”的主线,也适用于任何的产品。如果,读者朋友以后要开公司创造自己的产品或者服务(服务也是一种产品)。你的产品是否符合”更易、更强”这个规律,也决定了产品能否取得成功,能否击败现有市场上同类型的产品!当然,也直接决定了你能否发财,能否养得起老婆孩子啦!
计算机语言一般意义上划分为:
第一代语言:机器语言
我们都知道计算机的基本计算方式都是基于二进制的方式。如下就是一段典型的机器语言代码:
这种代码是直接输入给计算机使用的,不经过任何的转换!当然,在计算机刚发明的时候,计算机也是稀罕物,人却有很多。物以稀为贵嘛,人就只能迁就计算机,采用了这样一种计算机可以直接识别的代码。当然,这种代码计算机非常受用,不需要做任何转换,直接执行,太爽了!
可是,人就不爽了!这样的代码,又有几个人能写,又有几个人能读懂!如果用来解决最简单的计算问题,凑合着用,没问题。如果要解决复杂问题,需要写几千行、几万行这样的代码,估计谁写谁疯。如果现在我们仍然使用第一代语言,我相信所有程序员最终只能将精神病院作为最后的归宿了。
第二代语言:汇编语言
为了解决机器语言无法读懂的问题。很自然,我们就想到能不能使用人可以读懂的单词来代替一些二进制指令和数据,方便我们人去读、编写代码。于是,汇编语言诞生了。他使用了大量的助记符来代替二进制指令,方便我们人去编写代码。如下是一段典型的汇编语言代码:
显然,这样的代码,要比起机器语言来,对于我们程序员来说,爽了很多,至少不需要再去背诵那些难记的二进制指令了!于是,有了更好的武器,意味着我们可以解决更复杂的代码,写个几百行、几千行汇编语言代码也成为不那么复杂的事情。
【注】现在仍然有很多领域在使用汇编语言,比如:操作工业机器人、单片机编程、甚至某些计算机病毒的编写等。
第三代语言
随着晶体管、集成电路的出现,计算机的功耗越来越小、速度越来越快,计算机很快深入到了各行各业。有个很著名的定律叫做摩尔定律,他深刻的展示了计算机发展的规律:
“当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上”
摩尔定律在我们身边有着实实在在的体验,我们现在手边用的电脑、手机比起十年前强大的很多倍,但是价格实际上确越来越低!十年前,北京房价是3000一平的地方,现在涨到了4万,涨了十多倍。十年前,一个笔记本需要两万人民币,现在只需要几千元,但是性能确更好。我们多么希望,房价也能遵循摩尔定律啊!
这样,随着计算机深入更多的企业、单位、甚至更人。我们很自然的就希望使用计算机解决我们身边的问题。这种需求越来越明确,越来越复杂。汇编语言在体系结构设计上的缺陷,根本无法胜任解决复杂问题。使用汇编语言写几万行代码,几十万行代码,那真的可以称之为”噩梦”.
于是,各种各样,结构化设计更加优良的第三代语言诞生了。例如:C语言、Fortran、cobol、pascal、ada、c++、java、c#。
第三代语言数量众多,大体上分为:面向过程和面向对象两大类。C语言是典型的面向过程的语言。C++、JAVA是典型的面向对象的语言。
大家在学习过程中,不要有这样的误解。学了面向过程会对学习面向对象有不好的影响,影响思维。那纯属扯淡,只能说明你面向过程根本没入门! 事实上,面向过程和面向对象是相辅相成的。在面向对象编程中,也离不开面向过程。关于,面向过程和面向对象的区别,我们将在面向对象章节中详细说明。
C语言
第三代语言中,C语言是最重要的!可以称之为“现代语言的鼻祖”。其他很多语言都跟C语言有千丝万缕的联系!
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
C++语言
显然就是C语言的升级版,看名字我们就知道了,就是C语言面向对象的版本!在C基础上,一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。
JAVA语言
SUN公司的JAVA也是以C/C++为原型开发的,甚至有人将JAVA称之为“C++-”(C加加减).看名字就知道是将C++中某些不太好用的地方砍掉!
Object-C语言
现在IOS和Mac开发中的主流语言。 根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。
C#语言
微软发明的一种希望替代JAVA的语言。盖茨曾经非常认可JAVA,,“JAVA是我见过最好的语言”,因此,微软跟JAVA曾经有一段蜜月期,合作非常好。但是后来由于版权纠纷,闹掰了。盖茨一怒之下,就要搞一个比JAVA更好的语言。因此,我们在C#中可以看到大量的JAVA中有的特性,非常明显的”山寨”,当然也可以称为”微创新”。创新都是源自”山寨”。但是,微软山寨了JAVA的细节,但是没有学到JAVA的精华,即跨平台。当然,这跟微软本身的公司特性有关,微软名字叫做:Microsoft,但是我们知道他的核心产品是windows,所以他希望将他所有的产品都跟windows绑定再一起,这样C#就失去了JAVA的跨平台的优势。
附:贝尔实验室(IT行业的圣地)
晶体管、激光器、太阳能电池、发光二极管、数字交换机、通信卫星、电子数字计算机、蜂窝移动通信设备、长途电视传送、仿真语言、有声电影、立体声录音,以及通信网、C语言、C++语言等许多重大发明的诞生地。
附:历史上最古老的IT公司IBM
IBM(International Business Machines Corporation),国际商业机器公司,或万国商业机器公司的简称。总公司在纽约州阿蒙克市,1911年创立于美国,是全球最大的信息技术和业务解决方案公司。
附:微软的前景堪忧
微软的核心产品是windows. 微软的成长基本上跟个人电脑PC的普及和发展是同步的。但是,随着手机、平板电脑的发展,我们发现个人电脑的地位明显的在下降,这也意味着 windows的地位在显著的下降。“成也PC,败也PC”. 如果,微软不在手机和平板电脑上发力,将不可避免的沦为”第二个诺基亚”。
附:山寨和创新
任何一种创新都不是凭空天上来的, 都是基于以前的旧事物发展的。都是一种”山寨”. 我们看到计算机语言的创新史其实就是一部山寨史。当然,如果把别人的跌出拿来只换个名字那叫耍流氓、不要脸,是真的”山寨”。 如果把别人的东西拿来进行改进,做的更好,那才就叫”创新”。
附:到底应该学哪门语言
很多童鞋会有疑问,到底应该学什么语言呢? 纠结了很长时间,仍然没有下手。我的说法是,JUST DO IT!学了再说。其实,天下文章一大抄,语言之间固然有差异,但是隐藏在语言背后的编程思维方式没有差别。如果你精通了一门语言再去学其他语言,很快就可以上手。
纠结是个坏毛病。小时候,老是纠结于以后做爱因斯坦呢还是盖茨呢?纠结了很多年。长大了,才发现真的是想太多了!
JAVA语言的发展史
SUN公司介绍
SUN公司全称是:Stanford University Network. SUN公司是从斯坦福大学孵化器出的高科技公司。创立后,曾经市值名列IT公司第一位。在2001年时,市值2100亿美元,远超过google公司、IBM公司。SUN公司不仅打败了包括 IBM 在内的全部工作站(Work Station)和小型机(Mini Computer)公司,而且依靠它的 Solaris(一种Unix)和风靡世界的 Java 程序语言,成为在操作系统上最有可能挑战微软的公司。太阳公司不乏能人,它不仅为 Google 培养了 CEO埃里克.施密特和首任工程部副总裁韦恩.罗森(Wayne Rosen),并且在一定程度上奠定了今天 Google 工程部门的基础。
当然,今天的SUN公司已经一落千丈,并且被oracle公司收购。sun公司从成立到市值2000亿美元经过了20年,但是走下坡路只用了1年时间!这就是IT行业的残酷性!
JAVA的诞生和核心特点
上世纪90年代初,SUN公司的James Gosling(高司令,^_^)领导的Green项目,着力打造一个分布式的、可以在消费类电子产品(如电视机顶盒)使用的系统架构。
这种架构中,要求写的代码可以运行在各种消费类电子产品中,即要求代码的中立性、跨平台性。
最初,Green项目使用的C++,但是在研发过程中发现C++并不能很好的适应新的需求。于是,这些高人对C++编译器做了改写,仍然不太理想,不太符合跨平台的特性。 牛人有牛人特有的牛脾气,于是,大家决定重起炉灶,开始研发一种新的语言,即JAVA.
经过一年半的研发,整个产品研发完成。但是,很遗憾,消费类电子产品并没有高速的发展起来,JAVA进入蛰伏期。
【注】跨平台特性,始终是JAVA的核心优势!
JAVA的飞速发展
无心插柳柳成荫!90年代中末期,有一个改变世界的大事出现了:互联网的爆发式增长。在传统产业,例如钢铁产业要想取得产量翻番,那需要很多年的时间。但是,在互联网行业都是呈指数级增长,爆炸式的增长。google可以在短短几年就增长到上千亿美元市值。
互联网将各种各样的电脑连到了一起,这时,我们发现电 脑的操作系统各种不同。因此,急需一种跨平台的语言,通过它编写的程序可以在各种平台上运行。JAVA正好符合这种需求。使用JAVA编写的applet程序给了90年代的人们极大的震撼,于是JAVA迎来了他的黄金时代!
JAVA诞生后,经历了如下版本的发展变化:
• 1991年,Sun公司的Green项目,Oak
• 1995年,推出Java测试版
• 1996年,JDK1.0
• 1997年,JDK1.1
• 1998年,JDK1.2,大大改进了早期版本的缺陷,是一个革命性的版本,更名为Java2
• 2004年,J2SE 5.0 (1.5.0) Tiger老虎
• 2006年,J2SE 6.0 (1.6.0) Mustang野马
• 2011年,JAVASE7.0
JAVA的特性和优势
简单性
就是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。由于语法基于c,因此学习起来完全不费力。
面向对象
面向对象是一种程序设计技术,他将重点放在数据(即对象)和对象之间的接口上。
可移植性(跨平台性)
这是JAVA的一个重要的优势。JAVA代码或者说字节码、二进制码可以跨平台的移植,而不用管具体的操作系统和硬件环境。JAVA本身就是面向网络的,只有在网络环境中才能显示出他的优势,比如:现在我有一个网络环境,要让我的笔记本和手机交互,笔记本环境是windows发出一个让手机定时录音的JAVA代码,手机只有简单Linux内核操作系统,照样可以完美的执行这个代码。
“一次编写,随处运行”:“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三大版本的区别
SUN公司推出了JAVAEE、JAVASE、JAVAME适应各种不同平台上的开发和运行工作。我们以后的学习会围绕他们开展起来。
• J2EE (JAVAEE)
– Java 2 Enterprise Edition:
– 定位在服务器端的应用
• J2SE (JAVASE)
– Java 2 Standard Edition
– 定位在个人计算机上的应用
• J2ME (JAVAME)
– Java 2 Micro Edition
– 定位在消费性电子产品的应用上。
JAVA语言为什么能够成功
一个产品的成功和一个人的成功是一个道理。除了自身具备过硬的优势外,还需要那么一点点狗屎运,甚至狗屎运非常关键。就是我们所讲的天时地利人和。JAVA的成功除了自己具备跨平台特性外,更重要的是正好踩中了互联网发展的节奏。微软的成功除了windows好用外,也是正好踩中了个人电脑发展的节奏。所以,我们除了自己努力外,也需要出去走走努力才踩一坨狗屎才行
附:斯坦福大学的房产生意经
斯坦福大学依靠自身庞大的校区,创建了斯坦福科技园(硅谷的前身),初期采用房租免费等方式,鼓励自己的毕业生在科技园创业、鼓励社会企业入驻。由于免费的方式再加上其他优惠的政策,吸引了大量的创业者加入进来。最终大家添柴加火,造就了今天的硅谷。这才是最高明的房地产商啊!相比我国的房产商杀鸡取卵式的发展,无语!北京五环外房价都3万多了,一个精英人才就算是年薪20万,买个100平的房子,需要不吃不喝15年!如果要吃喝的话,基本一辈子都在为这100平的房子打工!赤裸裸的剥削至此,还有什么话说!
附:跟斯坦福大学有关的IT公司
牛逼的大学,不可思议的大学。看看这个大学的毕业生和教授创立的公司:
1. 惠普公司
2. SUN公司
3. 思科公司
4. 雅虎公司
5. Google公司
6. 英特尔公司
7. NVidia(最大的显卡公司)
8. 耐克(卖鞋的,斯坦福除了IT还有耐克)
JAVA给你讲它的故事的更多相关文章
- java核心技术-(总结自杨晓峰-java核心技术36讲)
1. 谈谈你对java平台的理解 首先是java最显著的两个特性,一次写入处处运行:还有垃圾收集器gc,gc能够对java内存进行管理回收,程序员不需要关心内存的分配和回收问题 然后谈谈jre和jdk ...
- java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱
java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱 redis数据库 Redis企业集群高级应用精品教程[图灵学院] Redis权威指南 利用redis + lua解决抢红包高并 ...
- 可能是把 Java 内存区域讲的最清楚的一篇文章
出处: 可能是把 Java 内存区域讲的最清楚的一篇文章 Java 内存区域详解 写在前面 (常见面试题) 基本问题 拓展问题 一 概述 二 运行时数据区域 2.1 程序计数器 2.2 Java 虚 ...
- 【设计模式】Java设计模式精讲之原型模式
简单记录 - 慕课网 Java设计模式精讲 Debug方式+内存分析 & 设计模式之禅-秦小波 文章目录 1.原型模式的定义 原型-定义 原型-类型 2.原型模式的实现 原型模式的通用类图 原 ...
- Java设计模式精讲之UML急速入门
简单记录 - 慕课网 - Java设计模式精讲 Debug方式+内存分析 文章目录 第2章 UML急速入门 2-1.UML简单入门 UML定义 UML特点 UML 2.2分类 UML类图 理解泛化.实 ...
- 《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
非常荣幸作为晓峰哥的同事,之前就看过这篇文章,重写读一遍,再学习学习. 一.开篇词 初级.中级:java和计算机科学基础.开源框架的使用:高级.专家:java io/nio.并发.虚拟机.底层源码.分 ...
- java核心技术36讲笔记
Java-Basic 谈谈final. finally. finalize有什么不同? 典型回答: final可以用来修饰类.方法.变量,分别有不同的意义, final修饰的class代表不可以继承扩 ...
- 8千字干货教程|java反射精讲
java反射机制精讲 目录 1. 反射机制的概念 2. 反射的基础Class类 3. 反射的用法 4. 反射的应用示例 作者简介:全栈学习笔记,一个正在努力的人 微信公众号:公众号日更,精彩美文每天推 ...
- 更好的 java 重试框架 sisyphus 背后的故事
sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...
随机推荐
- react相关知识点链接整理
1.React组件之间的通信 2.中间件做代理解决跨域问题 3.不要再问我跨域的问题了 4.React 组件数据流 && 组件间沟通 5.如何理解虚拟DOM 6.react性能调谐与d ...
- webapp 的简单开发
web app 的技术平台很多,如adobe phonegap.sencha touch.appcan(国产).dcloud(国产)平台.我选择了dcloud平台,原因:简单,容易上手. web ap ...
- 如何解决git fatal: refusing to merge unrelated histories
我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传. 先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法p ...
- 【转】B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介
B 树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: ...
- makefile 模板 (template)
本文把makefile 分成了三份:生成可执行文件的makefile,生成静态链接库的makefile,生成动态链接库的makefile. 这些makefile都很简单,一般都是一看就会用,用法也很容 ...
- sprintf详解
原文:http://www.cnblogs.com/wqlblogger/archive/2007/01/09/615525.html 转摘声明:选自<CSDN 社区电子杂志——C/C++杂志& ...
- EM(期望最大化)算法初步认识
不多说,直接上干货! 机器学习十大算法之一:EM算法(即期望最大化算法).能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么 ...
- Spring返回json数据
第一种形式:使用注解@ResponseBody @RequestMapping(value = "/admin/jq", method = RequestMethod.GET) @ ...
- java音频播放器
java音频播放器备份,支持wav,mp3 都是摘抄于网络,wav播放,mp3播放 播放wav版本 包: 不需要其他jar包 代码: package com; import javax.sound.s ...
- MongoDB安装步骤
安装C:\Users\Administrator>d:\mongo\bin\mongod -dbpath=D:\ND.Monodb\ND.Monodb.db -logpath=D:\ND.Mon ...