Java学习总结——下载、配置并详解Java环境及其基本注意事项

壹——Java基础知识

一、Java开发环境

学习Java的第一步就是要搭建Java开发环境(Java Development kit, JDK)。

JDK有一个处于操作系统层之上的开发环境和运行环境组成。JDK除了包括编译(javac)、解释(java)、打包(jar)等工具,还包括开发工具及开发工具的应用程序接口等。当Java程序编译完毕后,如果想运行,还需要JRE(Java Runtime Environment,Java运行环境)。

JRE试运行Java程序所必需的环境的集合,包含JVM标准实现及Java核心类库。如果仅仅想运行Java 程序,安装JRE就够了。也就是说,JRE是面向Java程序使用者的,JDK是面向Java开发者的,它们的关系是JDK包含JRE。

 

Java语言(源代码)
javajavacjavadocjarjavapJPDA
Tools & Tools APIs(工具与工具的应用程序接口)
Java Web StartApplet/Java Plug-in
Java SE API
Java 虚拟机(JVW)
WindowsLinuxUnixMac OS其他操作系统平台

 

从上面表格可以看出,Java程序开发的第一步就是编写Java语言的源代码,而编写源代码的工具可以是任何文本编辑器,如Windows下的记事本、Linux下的Vim等。也可以使用对编程语言支持较好的编辑器:Notepad++、UItraEdit、Editplus等。

Java源文件编写完毕后,就可以在命令行下通过javac命令将Java源程序编译成字节码(二进制文件),然后通过java命令来解释执行编译好的Java类文件(文件扩展名为.class)。但如果想正确使用javac和java等命令,必须自己搭建Java开发环境。

二、安装Java开发工具箱

下载官方最新JDK版本地址链接:https://www.oracle.com/technetwork/java/javase/downloads/index.html

选择相应的版本与所对应的系统版本,点击下载,根据提示安装索要安装的本地目录下。

三、Java的命名规则

在Java 1.1之前,其命名方式和传统的方式一样。但当Java 1.1升级到Java 1.2时,Sun公司的Java市场推广部门觉得,Java的内涵发生了很大的变化,应给予Java一个“新”的名称——Java 2,而它内部发行编号仍是Java 1.2。当Java 内部发行版从 1.2过渡到1.3和1.4时,Sun公司对外宣称的版本依然是Java 2。Sun公司从来没有发布过Java 3和Java 4。从Java的内部发行版的1.5开始,Java的市场推广部门又觉得Java已经变化很大,需要给予一个更“新”的称呼。于是Java 1.5直接对外宣称Java5,Java 1.6对外宣称Java 6,以此类推,Java 7,其内部版本是Java 1.7。

如下列表所示:

Java内部发行版本发布时间Java对外推广版本号
JDK 1.01996年1月Java 1.0
JDK 1.11997年2月Java 1.1
JDK 1.21998年12月Java 2
JDK 1.32000年5月
JDK 1.42002年2月
JDK 1.52004年9月J2SE 5.0
JDK 1.62006年12月Java SE 6
JDK 1.72011年7月Java SE 7
JDK 1.82014年3月Java SE 8

为了避免混淆,Oracle公司宣布改变Java版本号命名方式:自JDK 5.0起,Java以两种方式发布更新。第一种是Limited Update(有限更新)模式,其包含新功能和非安全修正。第二种方式是Critical Patch Updates(CPUs,重要补丁更新),只包含安全的重要修正。

举例说明一下,Java SE 8u5 的解释:

拆分Java SE 8 u 5
JavaSE表示JDK适用的开发领域(SE:标准版)
8表示JDK包库的大版本
uupdate(更新)的缩写
55大版本下的小版本更新编号

 

编程语言趋势是一直向上升级的,只要大版本 “8” 不变,“u” 后面的小版本号有所变化,基本上不会影响普通用户的使用。

四、环境变量的配置

在开发Java程序之前,通常需要先在操作系统中配置好有关Java的系统环境变量(Environment Variable)。

环境变量的定义:

环境变量是指在操作系统指定的运行环境中的一组参数,它包换一个或多个应用程序使用的信息。环境变量一般是多值的,即一个环境变量可以有多个值,各个值之间以英文状态下的分号 “;”(即半角的分号)分隔开来。

对于Windows等操作系统来说,一般都有一个系统级的环境变量Path(路径)。当用户要求操作系统运行一个应用程序,却没有指定应用程序的完整路径时,操作系统首先会在当前路径下寻找该应用程序,如果找不到,便会到环境变量路径 “Path” 指定的路径下寻找。若找到该应用程序则执行它,否则会给出错误提示。用户可以通过设置环境变量来指定自己想要运行的程序的所在位置。

例如,编译Java程序需要用到 javac 命令,运行Java程序需要java命令。而这两个命令并不是Windows系统自带的命令,所以用户需要通过设置环境变量(JDK的安装位置)来指定这两个命令的位置。设置完成后就可以在任意目录下使用这两个命令了,而无需每次都输入这两个命令的所在的精确全路径(如C:\Program Files\Java\jdk1.8.0_05)。javac和java等命令都放在JDK安装目录的bin目录下。基于类似于环境变量“Path”相同的理由。

JDK中的3个环境变量代表的含义:

(1)JAVA_HOME:顾名思义,“JAVA的家”——该变量是指安装Java的JDK路径,它告知操作系统在哪里可以找到JDK。

(2)Path:该变量是告诉操作系统可执行文件的搜索路径,即可以在哪些路径下找到要执行的可执行文件,它仅对可执行文件有效。

(3)ClassPath:该变量是用来告诉Java解释器(即Java命令)在哪些目录下可找到所需要执行的class文件(即javac编译生成的字节码文件)。

JDK的3个环境变量的配置(Windows 7系统):

1.JAVA_HOME的配置

(1)右击【我的电脑】,在弹出的快捷菜单中选择【属性】选项。

(2)在弹出的界面左上方,选择【高级系统设置】选项。

(3)单击【高级系统设置】选项后弹出【系统属性】对话框,然后单击【高级】→【环境变量】

(4)在【环境变量】对话框中,单击【系统变量】下的【新建】按钮。

(5)在【编辑系统变量】对话框中输入,变量名为:“JAVA_HOME”,变量值为:C:\Program Files\Java\jdk1.8.0_05。(具体值需要根据安装JDK的路径而定),然后单击【确定】按钮。

注意:假设JDK安装在“C:\Program Files\Java\jdk1.8.0_05”,在设置完毕对应的环境变量JAVA_HOME后,以后再要用到这个变量时,需用两个%将其包括起来。如要设置另外一个环境变量值为“C:\Program Files\Java\jdk1.8.0_05\bin”,那么我们可以简单的用“%JAVA_HOME%\bin”替代即可。

2.Path的配置

(1)选中系统环境变量中的Path,单击【编辑】按钮。

(2)在弹出的【编辑系统变量】对话框的【变量值】文本框中,在文本框末尾添加:“;%JAVA_HOME%\bin”特别注意不要忘记前方的分号 “;” ,然后单击【确定】按钮,返回【系统属性】对话框。这个路径务必设置正确,因为诸如Java语言的编译命令javac和解释命令java等都是在这个路径下,设置失败,这些命令将无法找到。

注意:当Path有多个变量值时,一定要用半角(即英文输入法)下的 “;” 将多个变量值区分开。英文分号是1个字节大小,而中文的分号是2个字节大小。

(3)在【系统属性】对话框中单击【确定】按钮,完成环境变量的设置。

注意:检测环境变量是否配置成功,在命令行模式下,在任意目录下输入javac命令来检验,如果能输出javac的用法提示,则说明配置成功。

进入命令行模式的方法:单击Windows 7的【开始】菜单,在搜索矿中输入CMD命令,然后回车即可。

3.ClassPath的指定

如果说JAVA_HOME指定的是java命令的运行路径的话,那么ClassPath指定的就是Java加载类的路径,只有类在ClassPath中,java命令才能找到并解释它。

在Java中可以使用“set classpath”命令指定Java类的执行路径。

例:假设现在的“Hello.class”类位于“C:\”目录下。在“D:\”目录下的命令行窗口执行“set classpath=c:”,之后在"D:\"目录下执行"java Hello"命令,可以成功输出文件运行结果。

之所以会成功,是因为在“D:\”目录中使用了“set classpath”命令,它把类的查找路径指向了“C:\”目录,在运行java时,会从ClassPath中查找这个Hello类文件,而ClassPath中包括了“C:\”,所以会运行成功。

注意:在设置classpath时,最好将classpath指向当前目录,即所有的class文件都从当前文件夹中开始查找:“set classpath=.”。在命令行输入命令时,不包括上面的引号“ ”。在Windows及Linux等操作系统下,一个点“.”代表当前目录,两个点“..”代表上一级目录

但是这样操作会造成一种局限,每一次所设置的命令行命令都只针对当前窗口有效。一旦重开或系统重启,临时设置的ClassPath中的变量值都会丢失,所以要将ClassPath设置为环境变量。

设置步骤:

(1)在【环境变量】对话框中,单击【系统变量】下的【新建】按钮。新建一个环境变量,变量名为:CLASSPATH,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar。注意不要忽略前面的 “.” ,这里的小点 “.” 代表的是当前路径,既然是路径,也需要用分号“;”隔开。JDK的库所在包即tools.jar,所以也要设置进ClassPath中。

注意:Windows系统环境下,一般只要设置好JAVA_HOME就可以正常运行Java程序。默认的ClassPath是当前路径(即一个点“.”)。有些第三方的开发包,需要使用到环境变量ClassPath,只有这样才能使用JDK的各种工具。在Windows系统环境下,不区分大小写,ClassPath和CLASSPATH是等同的,而在Linux/UNIX/Mac系统环境下,大小写是完全区分开的。

(2)在按照步骤(1)设置好后,如果在Java类(即.class)文件所存储的当前路径下,那么用“java类名”方式解释执行用户类文件,这是可以的。但如果更换了路径,现在的“当前路径”并没有包括.class文件的所在文件夹,那么“java”就无法找到这个类文件。所以如果想在任意路径下执行用户的类文件,就必须把自己编译出的类文件所在路径也加入到ClassPath中,并用分号 “;” 与前一个变量隔开。

(3)最后,参照环境变量Path的配置,将环境变量CLASSPATH添加到Path的最后。CLASSPATH是环境变量,在另外一个地方作为变量使用时,要用两个%将该变量前后包括起来,即在Path后添加";%CLASSPATH%"。

如果原来的命令行窗口一直开启,则需要重启,这是因为需要重新更新命令行窗口的环境变量。之后,就可以在任意路径下执行用户自己的类文件。

五、Java程序的运行流程及代码模块解析

Java程序运行的流程:所有的Java源代码(以.java为扩展名),通过Java编译器javac(javac命令中字母c来自于compiler的首字母)编译成字节码,也就是以.class为扩展名的文件。然后利用命令java将对应的字节码通过Java虚拟机(JVM)解释为特定操作系统(如Windows、Linux等)能理解的机器码,最终Java程序的得以执行。

示例小程序:

01      public class Hello

02      {

03        //main是程序的起点,所有程序由此开始运行

04        public static void main(String args[])

05        {

06            //下面语句表示向屏幕上打印输出“Hello World!”字符串

07            System.out.println("Hello World!");

08        }

09      }

代码模块解析表:

 

行数作用
第一行public是一个关键字,用于声明类的权限,表明这是一个共有类(class),其他任何类都可以直接访问它。class也是Java的一个关键字,用于类的声明,其后紧跟的Hello是类名,可以自定义。
第二行、第九行这一对大括号标明了类的区域,在这个区域内的所有内容都是类的一部分。
第三行、第六行这两行为注释,可以提高程序的可读性。注释部分不会被执行。这种注释属于单行注释,要求以双斜线//开头,后面的部分均为注释。eclipse中的快捷键为:Ctrl+/。
第四行这是一个main方法,它是整个Java程序的入口,所有的程序都是从public static void main(String args[])开始运行的,该行的代码格式是固定的。String args[]如果漏掉在某些编辑器中将不能被识别。String args[]也可以写成String []args,String为参数类型,表示为字符串型,args是arguments(参数)的缩写。public和static都是Java关键词,它们一起表明main是够用的静态方法。void也是Java的关键词,表示该方法没有返回值。
第五行、第八行是main方法的开始和结束标志,它们声明了该方法的区域,在 { } 之内的语句都属于main方法。
第七行System.out.println是Java内部的一条输出语句。引号内部的内容“Hello World!”会在控制台中打印出来。

 

六、Java虚拟机(JVM)

Java编译器——javac仅仅将源代码编译成.class文件,然后通过命令java将.class文件送往Java虚拟机(JVM),变成最终可执行的程序。

Java中的虚拟机,可以看做是在机器和编译程序之间加入了一层抽象的虚拟机器,这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码(半成品),然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机却是相同的。

Java程序得以执行的环境称之为Java运行时环境(Java Runtime Environment,简称JRE),它由Java的虚拟机JVM和Java的API构成。一个Java程序若想运行在Java虚拟机之中,源代码的语句需由Java编译器编译成字节码。字节码本质上是一种标准化的可移植的二进制格式。该格式以Java类文件(.class)的形式存在。一个Java程序可有多个不同的.class文件构成。在早期发布大型的Java程序,通常把多个.class文件打包成一个发布文件.jar,其扩展名来自于“java archive”(java 归档文件)的简写。

Java虚拟机在执行.class或jar文件时,使用到“即时编译器”(JIT compiler,just-in-time comiler)。“即时编译器”是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器(processor)指令的程序。本质上“即时编译器”是Java程序的第二个编译器,它能把通用的字节码编译成特定系统的机器指令代码,它存在但我们无需感知。

扩展:Python语言也可以通过jpython(Python的纯Java实现版本)编译后,同样也生成Java编译生成一样的字节码,从而也大大提供了该类程序的可移植性。

Java虚拟机(JVM),JVM才是Java生态系统的核心,因为它可以跨平台,把所有东西都联系在一起。

七、Java的特性及基本注意事项

1.Java相对于C++的一些特性

Java语言是比C++语言“更加面向对象”的一种编程语言,Java语言的语法结构与C++语言的语法结构十分相似

(1)提供了对内存的自动垃圾回收(Garbage Collection),程序员无需在程序中进行分配、释放内存。

(2)抛弃了C++语言中容易出错的“指针”,而是用诸如“引用(reference)”的方法来取而代之。避免了赋值语句(如a=6)与逻辑运算语句(如a == 3)的混淆。

(3)取消了多重继承这一复杂的概念。多重继承会导致类中数据成员的“二义性”等问题,从而使得类的访问结构非常复杂。

2.重视Java官网的文档

Java 8 的语言规范(The Java® Language Specification Java SE 8 Edition)是公开的,可在Oracle官方网站(http://docs.oracle.com/javase/specs/jls/se8/jls8.pdf)上下载。阅读Java语言的规范是提高技术水平的好方法。

3.如何在命令行模式下正确运行Java类文件

使用javac编译java源代码生成对应的.class文件,然后用java来运行这个类文件,有时会得到如下错误信息:

    Error:Could not find or load main class 类名.class

产生这种错误的原因通常有两个:

    (1)Java环境变量JAVA_HOME及ClassPath设置不正确。

    (2)未省略类名后的.class,也就是说,java操作的对象虽然是类文件,但是却无需类文件的扩展名.class。

4.正确保存Java的文件名

共有类名名称与这个类所在的源文件必须保存为相对应的名称加.java。

对于没有包括public类的源文件,源文件的名称和非public类的名称可以不相同。

八、本文自我总结

今日事,今日毕。加油,Java!

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值