本篇博客是Java web入门的第一篇博客,这篇博客主要讲述java语言的一些简介。

一)先从Java语言的诞生说起。

1991年,Sun公司在一个叫做James Gosling的人的带领下,成立了一个项目组,名字叫做“Green”。当时这个项目组成立的时候,是计划开发一种能够运行在消费性电子设备上的编程语言。这种设备的特点是:1、运算能力和运算空间非常有限;2、不同的厂商设计产品时会使用完全不同的CPU,因此会有完全不同的架构。为了解决这个问题,当时Green希望设计出一种具有非常优秀的“跨平台”特性的语言。1992年,Green项目组最初的产品诞生。这个产品一开始被称之为“Oak”,但是后来发现,Oak已经是另外一种计算机语言的名字。于是,Oak语言更名为Java语言。

1996年,Java语言发布了第一个正式版本:1.0版本。这时,Java语言能够编写的程序称之为Applet。这种Applet只能在集成了Java环境的浏览器中运行,当时主要为浏览器来增加各种动态效果,用来美化页面和增强用户与浏览器的交互。很快的,1.1版本发布。这个版本修正了1.0版本中大量的bug, 并完善了1.0版本中的很多缺失的部分。1998年12月,Java1.2版本发布。为了表明这是一个非常重大的更新,Sun公司把Java1.2版本,也称之为Java 2 Platform,来表示这是一个全新的Java平台。对1.0和1.1扩展之后得到的部分称之为“标准版”,也就是所谓的“Java 2 Standard Edition”,简称“J2SE”。标准版可以用来写Applet,也可以用来编写脱离浏览器,独立运行的程序(Application)。除了标准版之外,Java 2还包括“企业版”(J2EE)和“微型版”(J2ME)。企业版主要提供了服务器端编程的功能,而微型版主要提供了在一些资源受限制的平台上(例如手机)运行Java的功能。之后,Java语言发布了1.3和1.4版本。这两个版本主要修正了bug,完善了Java的类库。2004年,Java推出了一个新版本。这个版本是 1.1之后,Java第一次对语言的基础类库做出重大改进的版本。Sun公司把这个版本称之为5.0。这也就意味着,这个版本与原来的Java 2平台相比有着很多不同的地方,而原来的三个平台:J2SE、J2EE、J2ME也被改名成为了Java SE、 Java EE、Java ME。

那么,Java语言究竟有什么特性,能够在众多语言中脱颖而出呢?

1)纯面向对象

相对于另一种面向对象的语言C++,Java语言是一种非常纯粹的面向对象的语言。对于C++而言,写程序除了可以使用面向对象的方式之外,还可以采用面向过程、面向模板等多种方式;而相对的,Java语言只能采用面向对象的方式进行编程。

2)简单 VS 复杂

由于Java语言相对C++来说是一种纯粹的面向对象的语言,因此Java语言在理解和学习方面,都要比C++语言更简单。Java的简单性,指的是Java语言的这种特点:1、Java语言本身的特点非常简单,没有复杂和晦涩的语法细节;2、Java语言倾向于让程序员能够简洁清晰的完成任务。 而Java语言同时也是复杂的,体现在:1、虽然Java语言本身非常简单,但是它有大量强大而扎实的类库,这些类库极大的丰富了Java语言的特性;2、Java语言最主要的阵地是企业级应用,这种应用本身,由于涉及到多线程、分布式、数据库、网络等各种各样的领域,Java语言也提供了各种对应的特性,因此从这个角度来看,Java语言是复杂的。

3)开放性

Java语言是一种开放的语言:Sun公司已经对Java语言开源,任何人都可以读到Java语言的代码;并且任何程序员都可以对Java语言未来的发展提出自己的开发和建议。现在,Java社区有大量开源、免费的东西可供下载和使用,这在一定程度上也帮助了Java语言的发展和推广。

4)跨平台性

运行Java可以在各种平台上面,包括常见的Windows系统,也包括企业级应用需要的Unix系统。这种在不同平台下运行的能力使Java语言在企业级应用中有着深远的影响。

二)下面介绍Java语言的运行机制。

直接操作计算机指令,使用的是机器语言以及汇编语言。但是,对于程序员来说,直接使用汇编语言来编写程序,开发起来非常的慢,也非常的辛苦。所以出现了计算机高级语言。所谓的计算机高级语言,实际上指的:人为的规定一些语法。然后,在遵循这些语法的前提下,写出一个文本文件,最后利用某种方式,把文本文件转化为机器指令进行执行。我们现在所谓的编程,往往指的就是编写文本文件的这个部分。这个文本文件一般我们称之为源文件。那么,应当如何把一个源文件转化为机器指令进行执行呢?在现代计算机语言中,主要有两种方式:一种是编译型,一种是解释型。编译型语言指的是,通过一个编译器软件,把源文件转化为可执行文件。可执行文件的内容,就是一些机器指令,以及相关的一些数据。在Windows中,可执行文件往往以.exe作为后缀名。在执行程序的时候,不需要源代码文件,只需要可执行文件即可。示意如下:

源文件 -- 编译器--> 可执行文件运行可执行文件 --> 机器指令

与编译型语言相对的是解释型语言。解释型语言需要一个解释器软件,这个软件会读源文件,在读文件的过程中,同时完成将源文件内容翻译成机器指令以及执行的过程。换句话说,解释器将读取源文件、翻译成机器指令、执行指令这三步同时完成。示意如下:

文本文件 --解释器--> 直接翻译成机器指令

由上可知,编译型语言在将源文件编译成可执行文件之后,运行程序只需要可执行文件,不再需要重复编译的过程。而解释型语言每次运行时必须重复翻译源文件,因此从运行效率上来说,解释型语言远远不如编译型语言。当然,解释型语言也有自己的优势:跨平台性较好。由于编译型语言运行时只需要可执行文件,而可执行文件又与平台紧密相连,这也就意味着,对于不同的平台,必须要有不同的可执行文件才行。而相对而言,解释型语言对于不同的平台,只需要有不同的解释器就可以了,源代码几乎不用进行修改。而 Java语言,则兼具有编译型和解释型两种语言的特点:Java语言运行时,采用的是先编译、后解释的方式运行。首先,Java源代码要写在后缀名为.java的源文件中。然后,通过一个编译器,编译生成.class文件,这个文件被称为“二进制字节码文件”。而.class文件并不能够直接在机器上执行。执行.class文件,需要一个解释器,这个解释器会把.class中的指令翻译成真正机器上的指令。也就是说,需要解释执行.class文件。 示意如下:

.java源文件 -- 编译 --> .class字节码文件 -- 解释执行 --> 真正的机器指令

字节码文件是平台中立的,也就是说,运行在不同平台上的.class文件内容相同,与所在平台无关。

那么.class文件中保存的是什么内容呢?这个文件中保存的也是计算机指令,所不同的是,这些计算机指令不是真实计算机所拥有的指令,而是一些虚拟的指令。在解释执行.class文件的指令时,为了能让这些虚拟的计算机指令能够转换成真正的计算机指令,我们需要一个Java虚拟机(Java Virtual Machine,简称 JVM)。JVM事实上是一个软件,这个软件为Java程序模拟出一个统一的运行环境。Java程序只需要适应这个虚拟的环境,而与底层真正的硬件环境及操作系统环境无关。换句话说,JVM的作用在于,它屏蔽了底层不同平台的差异。Java虚拟机接收.class文件中的虚拟指令,这些指令很类似于真正的汇编语言指令,但这些指令与底层的操作系统平台和硬件平台无关,完全是另外设计出的一套独立体系。而不同平台下的Java虚拟机,在执行时,会把.class文件中的虚拟机指令翻译成对应平台上真正的计算机指令。因此,我们可以修改上面的示意如下:

.java源文件 -- 编译 --> .class字节码文件 –在JVM中解释执行--> 真正的机器指令

Java 语言这种“先编译,后解释”的运行机制,使得其同时拥有了编译型语言的高效性和解释型语言的跨平台性。

三)JRE 与 JDK

JRE,也就是Java Runtime Environment的缩写,指的是Java的运行环境。包括JVM和Java解释器。但是仅仅有JRE,只能是完成从.class文件到真正的机器指令这一步,而无法把一个源文件编译成一个.class 文件。

JDK,指的是Java Development Kit,Java开发工具包。从内容上说,JDK=JRE+工具(编译器、调试器、其他工具...)+ 类库,我们进行Java开发,至少应当有JDK。JDK的下载网站(链接为:https://www.oracle.com/java/technologies/javase-java-platform-install.html )。 对于Windows系统而言,下载JDK之后,安装起来与其他的软件安装时并没有太大区别, 在此不多赘述。

四)Java 开发环境配置

当JDK安装完成之后,还需要对电脑进行一些环境变量配置,完成之后才能进行java程序开发。

以大家常用的widows系统为例:

右键点击“我的电脑” -- 选择“属性” -- 选择“高级系统设置” -- 选择“环境变量”

在系统变量中,点击“新建”,增加JAVA_HOME系统变量,这个变量的值设为JDK的安装目录。假设JDK安装在D:Javajdk。 然后,在系统变量中,查找PATH变量(不区分大小写)。在Path变量的末尾,增加一 句:“;D:Javajdkbin”。注意两个要点:1、在Path末尾增加,千万不要把原有的内容去掉;2、增加的值为Java安装目录下的bin目录。 最后,增加一个 CLASSPATH变量。值为“.”,注意不带双引号。

当所有的环境变量都配置好了之后,打开Windows中的命令行,执行java -version。如果得到正确的版本信息,则说明配置正常。

对于配置开发环境还有不了解的同学,可以自行百度。网上的图文教程很详细。下一节我们开始第一个java程序Hello World。话说程序员的道路都是从hello world开启的,请关注该篇博客的同学做好准备。

java判断读到末尾_Java Web入门之java--第一节 java 简介及开发环境安装相关推荐

  1. Java语言简介及开发环境安装

    目录 一.Java语言概述 Java是什么 Java语言发展简史 Java的重要特点 简单性 面向对象 健壮性 跨平台性 解释型语言 二.Java开发环境安装 安装 配置 检查 三.初识Java的ma ...

  2. java判断读到末尾_Flink实战:自定义KafkaDeserializationSchema(Java/Scala)

    微信公众号: 大数据开发运维架构 关注可了解更多大数据相关的资讯.问题或建议,请公众号留言; 如果您觉得"大数据开发运维架构"对你有帮助,欢迎转发朋友圈 kafka中的数据通常是键 ...

  3. java判断读到末尾_IO流如何判断读取到了流的结尾,程序中以-1来判断,是流中写入一个EOF表示流结束吗,底层实现呢?...

    -1不是流中写入的数据.read()方法返回的数据都是unsigned byte,即是[0,255].底层实现有很多,比如socket IO和文件IO,甚至你自己也可以实现. ------------ ...

  4. java 对象和类 教程_Java从入门到放弃教程三 --java的对象和类

    实例变量和方法可以通过创建对象来访问. 首先,创建一个对象: ObjectReference = new Constructor(); 现在可以访问变量了 ObjectReference.variab ...

  5. VUE入门笔记,第一节

    VUE入门笔记,第一节 一.MVVM分层思想 M:用来保存每个页面中的单独的数据 V:每个页面中的HTML结构 VM:它是M和V层的调度者,它分割了M和V层,用于处理M和V层的数据双向绑定 二.VUE ...

  6. Java基础-配置开发环境-安装JDK

    Java基础-配置开发环境-安装JDK 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.计算机基础知识 1>.计算机的组成 计算机有硬件与软件组成. 2>.硬件: 硬 ...

  7. 一个电脑的重装到java开发环境安装配置的全过程

    刚拿到一台别人用过的电脑.看着c盘爆满,而且用了还是windows7操作系统,强迫症发作马上就准备重装系统. 之前换固态使用wepe制作U盘启动盘装系统的步骤和过程全部忘记的,贼尴尬. 同事都看不过眼 ...

  8. MySQL入门学习的第一节(SQL语句)

    MySQL入门学习的第一节(SQL语句) SQL语句

  9. Scala入门_开发环境安装

    开发环境安装 学习如何编写scala代码之前,需要先安装scala编译器以及开发工具 Java程序编译执行流程 Scala程序编译执行流程 scala程序运行需要依赖于Java类库,必须要有Java运 ...

最新文章

  1. Microbiome:利用Nanopore高通量测序技术解析污水处理体系可移动抗性基因组(一作解读)
  2. go语言web开发框架_Iris框架讲解(六):Session的使用和控制
  3. 大数据最核心的关键技术——32个算法,记得收藏!
  4. apache cxf_Wildfly,Apache CXF和@SchemaValidation
  5. PHP的OB缓存(输出缓存)
  6. java 获取远程系统启动时间_从Java中的RuntimeMXBean获取系统启动时间
  7. el-table样式美化
  8. java获取本机IP地址,非127.0.0.1
  9. 怎么在WPS计算机,电脑怎么把wps热点删了?电脑永久删除wps热点的方法
  10. 苹果安装app的另一种方式(通过itms-services协议,不通过AppStore,直接安装IOS应用程序)
  11. 智源首席科学家孙茂松当选欧洲科学院外籍院士
  12. 数据,源码防泄密解决方案
  13. flutter 单、双排按钮及选择联动ui
  14. 姓张信息mysql_MySQL_数据查询
  15. 上海迪士尼将推出虎年新春全新体验
  16. LeetCode3:合并两个有序数组 给你两个有序数数组,nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组.
  17. Mysql安装(转自韩顺平教育)
  18. c++ 正则表达式验证手机号码
  19. 初入职场两件事 入对行,跟对人---Leo读 不是孙振耀写的职场感言 6
  20. 87654321盏灯!

热门文章

  1. Maven 中 plugins 和 pluginManagement的区别
  2. MySQL解析json字符串的相关问题
  3. Java调用.net开发的webService接口
  4. win10树莓派改ip_在树莓派2上安装 Windows 10
  5. Oracle用户密码使用特殊符号,例如(AND)、$(Dollar)、#(Pound)、*(Star)等
  6. php 获取css值,如何通过JS获取CSS属性值
  7. wxpython 隐藏_使用cxFreeze冻结wxPython应用程序时如何隐藏控制台窗口?
  8. python字典弱引用_python 自身遍历及弱引用的简单示例
  9. mysql 创建函数_MySQL函数,存储过程,用户管理
  10. mysqlbinlog工具_mysqlbinlog命令详解 Part 5 通过位置和时间查看日志