一、背景

JAVA语言最開始仅仅是Sun电脑(Sun MicroSystems)公司在1990年12月開始研究的一个内部项目。

Sun电脑公司的一个叫做帕特里克·诺顿的project师被公司自己开发的C++和C语言编译器搞得焦头烂额,由于当中的API极其难用。帕特里克决定改用NeXT。同一时候他也获得了研究公司的一个叫做“Stealth计划”的项目的机会。

在这个项目中,团队最初考虑使用C++语言。可是非常多成员包含Sun的首席科学家比尔‧乔伊,发现C++和可用的API在某些方面存在非常大问题。

        工作小组使用的是内嵌类型平台。能够用的资源极其有限。

非常多成员发现C++太复杂以至非常多开发人员常常错误使用。他们发现C++缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后。他们想要一种易于移植到各种设备上的平台。

        依据可用的资金,乔伊决定开发一种集C语言和Mesa语言大成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议Sun公司的project师应该在C++的基础上,开发一种面向对象的环境。最初,高斯林试图改动和扩展C++的功能。他自己称这样的新语言为C++ ++ --,可是后来他放弃了。

他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的橡树命名。

        1994年6、7月间,在经历了一场历时三天的头脑风暴的讨论之后,约翰·盖吉、詹姆斯·高斯林、比尔·乔伊、帕特里克·诺顿、韦恩·罗斯因和埃里克·斯库米,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。作为原型,帕特里克·诺顿写了一个小型万维网浏览器。WebRunner,后来改名为HotJava。同年。Oak改名为Java。商标搜索显示。Oak已被一家显卡制造商注冊。因此团队找到了一个新名字。

这个名字是在非常多成员常去的本地咖啡馆中杜撰出来的。一种比較可信的说法是这个名字是出于对咖啡的喜爱,所以以Java咖啡来命名。类文件的前四个字节假设用十六进制阅读的话,分别为“CA FE BA BE”。就会拼出两个单词“CAFE BABE”(咖啡宝贝)。

1994年10月,HotJava和Java平台为公司高层进行演示。1994年。Java 1.0a版本号已经能够提供下载。可是Java和HotJava浏览器的第一次公开公布却是在1995年5月23日SunWorld大会上进行的。SUN公司的科学指导约翰·盖吉宣告Java技术。这个公布是与网景公司的运行副总裁马克·安德森的惊人公布一起进行的,宣布网景将在其浏览器中包括对Java的支持。1996年1月。Sun公司成立了Java业务集团,专门开发Java技术。

二、发展

1、概念

是一种能够撰写跨平台应用软件的面向对象的程序设计语言。

Java不同于一般的编译语言和直译语言。它首先将源码编译成字节码。然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编写。到处执行”的跨平台特性。

Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

2、组成

Java编程语言。即语法。

Java文件格式。即各种目录、文件的后缀。

Java虚拟机(JVM),即处理*.class文件的解释器。

        Java应用程序接口(Java API)。

3、长处

(1)Java是眼下使用最为广泛的网络编程语言之中的一个。

它具有简单,面向对象,稳定。与平台无关。解释型,多线程,动态等特点。

(2)简单

Java 语言简单是指这门语言既易学有好用。

假设你学习过 C++语言,你会感觉 Java非常眼熟,由于 Java中很多基本语句的语法和 C++一样,像经常使用的循环语句。控制语句等和 C++差点儿一样,但不要误解为 Java 是 C++的增强版,Java
和 C++是两种全然不同的语言,他们各有各的优势,将会长期并存下去,Java 语言和 C++语言已成为软件开发人员应当掌握的语言。假设从语言的简单性方面看。Java要比 C++简单。C++中很多easy混淆的概念。或者被Java弃之不用了,或者以一种更清楚更easy理解的方式实现。比如,Java不再有指针的概念。

(3)面向对象

基于对象的编程更符合人的思维模式,使人们更easy编敲代码。在实际生活中,我们每时每刻都与对象在打交道。

我们能够用共同拥有的属性和功能给出一个概念
,如机动车类。

一个详细的轿车就是机动车类的一个实例 对象 .

Java 语言与其他面向对象语言一样,引入了类的概念,类是用来创建对象的模板,它包括被创建的对象的状态描写叙述和方法的定义。

(4)与平台无关

跨平台是 Java 语言最大的优势。其他语言编写的程序面临的一个主要问题是 操作系统的变化,处理器升级以及核心系统资源的变化,都可能导致程序出现错误或无法执行。Java的虚拟机成功地攻克了这个问题。Java编写的程序能够在不论什么安装了 Java虚拟机 JVM 的计算机上正确的执行,Sun公司实现了自己的目标 “一次写成。处处执行”。

(5)解释型

我们知道C,C++等语言,都是仅仅能对特定的CPU芯片进行编译,生成机器代码。该代码的执行就和特定的CUP有关。

Java不像C++,它不针对特定的CPU芯片进行编译,而是把程序编译为称做字节码的一个“中间代码”。

字节码是非常接近机器码的文件,能够在提供了 Java 虚拟机 JVM 的不论什么系统上被解释运行。

Java的字节码经过细致设计,非常easy便能使用JIT 即时编译方式 编译技术将字节码直接转化成高性能的本地机器码。Sun 公司在 Java 2发行版中提供了这样一个字节码编译器——JIT(Just In Time),它是Java虚拟机的一部分。Java执行系统在提供JIT的同一时候仍具有平台独立性,因而“高效且跨平台”对Java来说不再矛盾。

假设把 Java 的程序比做“汉语”的话。字节码就相当于“世界语”。世界语不和详细的“国家”关,仅仅要这个“国家”提供了“翻译”。就能够再高速地把世界语翻译成本地语言。

(6)多线程

Java 的特点之中的一个就是内置对多线程的支持。多线程同意同一时候完毕多个任务。实际上多线程使人产生多个任务在同一时候运行的错觉,由于,眼下的计算机的处理器在同一时刻仅仅能运行一个线程,但处理器能够在不同的线程之间高速地切换。由于处理器速度很快。远远超过了人接收信息的速度,所以给人的感觉好象多个任务在同一时候运行。C++没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序的设计。

(7)安全

当你准备从网络上下载一个程序时,你最大的操心是程序中含有恶意的代码,比方试图读取或删除本地机上的一些关键文件,甚至该程序是一个病毒程序等。当你使用支持Java的浏览器时,你能够放心地执行Java的小应用程序 Java Applet 。不必操心病毒的感染和恶意的企图,Java小应用程序将限制在 Java执行环境中,不同意它訪问计算机的其他部分。

(8)动态

Java 程序的基本组成单元就是类,有些类是自己编写的。有一些是从类库中引入的。而类又是执行时动态装载的,这就使得Java 能够在分布环境中动态地维护程序及类库,而不像 C++那样,每当其类库升级之后,对应的程序都必须又一次改动。编译。

4、缺点

开发周期长,代码量大。对程序猿的技术要求高

有人说,对于一个大型项目,假设用java来作,可能须要9个月,而且可能须要翻阅10本以上的书,但假设用ruby来作,3个月,3本书就足够了。而.net也只是3,4本书足以。这就是差别。

比性能,微软曾做过一个样例。就是同一个项目用java和.net来作,结果开发周期。.net是java的一半,代码量java是.net的三倍。

三、比較

Java编程语言的风格十分接近C语言、C++语言。

Java是一个纯粹的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C语言中easy引起错误的指针(以引用代替)、运算符重载(operator overloading)、多重继承(以接口代替)等特性。添加了垃圾回收器功能,用于回收不再被引用的对象所占领的内存空间,使得程序猿不用再为内存管理而担忧。

在 Java 1.5 版本号中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长參数和自动装/拆箱等语言特性。

总结:不管java还是.Net。他们都是编程语言的一种。编程的关键不是语言,而是思想。一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。可是假设你没有了思想。那就像是海里的帆船失去了船帆,是非常难到打海的还有一边的。所以。让我们去学习语言中的思想,让我们去掌握编程的灵魂。

java学习总结——你的前世今生的更多相关文章

  1. 【转载】Java学习笔记

    转载:博主主页 博主的其他笔记汇总 : 学习数据结构与算法,学习笔记会持续更新: <恋上数据结构与算法> 学习Java虚拟机,学习笔记会持续更新: <Java虚拟机> 学习Ja ...

  2. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  3. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  4. 分享篇——我的Java学习路线

    虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...

  5. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  6. Java学习心得之 HttpClient的GET和POST请求

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...

  7. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  8. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  9. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

随机推荐

  1. 树莓派zero_w设置中文(已成功)

    树莓派默认是采用英文字库的,而且系统里没有预装中文字库,所以即使你在locale中改成中文,也不会显示中文,只会显示一堆方块.因此需要我们手动来安装中文字体. 好在有一个中文字体是免费开源使用的.ss ...

  2. ORA-01033:ORACLE initialization or shutdown in process

    Oracle遇到问题 :在PL/SQL当输入用户名和密码后 竟然出现标题上错误,我一项目数据库数据库全都没有备份,还有很多很多数据,该不会让我重装数据库吧,想到这个我汗那个流啊. 在网上查了下 看了看 ...

  3. 新开的坑-python学习笔记(1)——连接符与转义

    1/print输出格式虽然知道怎么用却还要打破砂锅的问问题... 问题答案是 需要读很多基础文档教程 --------例如 "+"  . "," 作为连接符的作 ...

  4. 隐藏win10任务栏输入法M图标

    在任务栏右键=>任务栏设置=>打开或关闭系统图标=>(关闭)输入指示

  5. vs2017 创建C#类时添加文件头

    C#类模板地址:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\ItemTemplates\C ...

  6. GEO/SRA数据库

    GEO数据库 GEO数据库隶属于NCBI,是最大最全面的基因表达数据库,主要是芯片和转录组测序数据.除储存数据外,也提供一些数据挖掘工具,因此利用好这个数据库,没有实验,没有自己的数据也能发好文章! ...

  7. 如何在MONO 3D寻找最短路路径

    前段时间有个客户说他们想在我们的3D的机房中找从A点到B点的最短路径,然而在2D中确实有很多成熟的寻路算法,其中A*是最为常见的,而这个Demo也是用的A*算法,以下计算的是从左上角到右下角的最短路径 ...

  8. 06二叉树、Map、Collections、适配器

    06二叉树.Map.Collections.适配器-2018/07/16 1.set集合,无索引,不可以重复,无序(存取不一致) 2.TreeSet用来对象元素进行排序,可以保证元素唯一 储存自定义对 ...

  9. 电子笔记本的思考(1)(ver0.2)

    章节:电子笔记本的思考(1)   陶哲轩在<解题·成长·快乐——陶哲轩教你学数学>中着重强调,用纸笔来“缓存”思维对于数学解题的重要性: 用选定的符号表达你所知道的信息,并画一个示意图.把 ...

  10. pageContext对象的使用及常用方法

    pageContext对象的使用及常用方法 制作人:全心全意 获取页面上下文的pageContext对象是一个比较特殊的对象,通过它可以获取JSP页面的request.response.session ...