壹——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语言(源代码) | |||||
java | javac | javadoc | jar | javap | JPDA |
Tools & Tools APIs(工具与工具的应用程序接口) | |||||
Java Web Start | Applet/Java Plug-in | ||||
Java SE API | |||||
Java 虚拟机(JVW) | |||||
Windows | Linux | Unix | Mac 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.0 | 1996年1月 | Java 1.0 |
JDK 1.1 | 1997年2月 | Java 1.1 |
JDK 1.2 | 1998年12月 | Java 2 |
JDK 1.3 | 2000年5月 | |
JDK 1.4 | 2002年2月 | |
JDK 1.5 | 2004年9月 | J2SE 5.0 |
JDK 1.6 | 2006年12月 | Java SE 6 |
JDK 1.7 | 2011年7月 | Java SE 7 |
JDK 1.8 | 2014年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包库的大版本 |
u | update(更新)的缩写 |
5 | 5大版本下的小版本更新编号 |
编程语言趋势是一直向上升级的,只要大版本 “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!”会在控制台中打印出来。 |
行数 作用
第一行 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!
---------------------
作者:原来是松松呀~
原文链接:https://blog.csdn.net/QQ20170908/article/details/85226253
共同学习,写下你的评论
评论加载中...
作者其他优质文章