Java 编程语言是 Sun Microsystems 公司的 James Gosling 在 1990 年创建的,于 1995 年公布于世(一般说 Java 诞生于 1995 年)。Java 是一门面向对象的编程语言,不仅吸收了 C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
目前在世界各地都有 Java 程序员的存在,你走到哪里也不再孤单,因为有你的 Java 编程小 伙 伴 在 陪 伴 着 你 。 我 们 一 起 来 看 看 世 界 编 程 语 言 排 行 榜 TIOBE(https://www.tiobe.com/tiobe-index/)给出的统计数据。
我们知道的 Java 包括三大块,分别是 JavaSE、JavaEE、JavaME,这三
者之间存在什么样的关系呢?请看下图你就明白了:
图 1-2:JavaSE、JavaEE、JavaME 三者关系
如上图所示,JavaEE 和 JavaME 都包含 JavaSE。实际上,这三大块就是 Java 的三大版本,JavaSE 是 Java 的标准版,是学习 JavaEE 和 JavaME 的基础,JavaEE 是企业版,JavaME 是微型版。
综上所述,我们用几句话简单概括一下它们之间的区别。
在学习 Java 之前,我们需要对一些专业术语有一定的了解,在 Java 中常见的专业术语包括:JDK、JRE、JVM 等,它们分别是什么,它们之间的关系又是怎样的呢,请看下图:
从上图中我们可以看到,JDK、JRE、JVM 之间存在这样的包含关系:JDK包含 JRE,JRE又包含 JVM。换句话说,只要安装了 JDK,JRE 和 JVM 则自动就安装了。那么它们分别代表什么呢:
① JDK:JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。它是每一个 Java 软件开发人员必须安装的。JDK 安装之后,它会自带一个 JRE,因为软件开发人员编写完代码之后总是要运行的。注意:如果只是在这台机器上运行 Java 程序,则不需要安装 JDK,只需要安装 JRE 即可(JRE 是有独立安装包的,这个大家可以从 Oracle 官网上找一下)。
② JRE:JRE(Java Runtime Environment,Java 运行环境),运行 JAVA程序所必须的环境的集合,包含 JVM 标准实现及 Java 核心类库。
③ JVM:JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 是实现 Java 语言跨平台的法宝。在这里我需要重点强调一下,不同的操作系统需要安装不同版本的 JDK,有专门的 windows版 JDK,Linux 版 JDK,Mac 版 JDK 等,当然不同版本的 JDK安装之后会对应不同版本的 JRE和 JVM。
图1-9:Java的加载与执行
● Java程序从开发到运行包括编译和运行两个阶段,这两个阶段可以在不同的操作系统中完成,例如在windows环境下进行编译,在Linux环境下运行,这是因为有JVM机制的存在,做到了一次编译到处运行(跨平台/可移植)。
● 编译阶段需要使用javac.exe(安装JDK之后该命令就存在了)命令,运行阶段需要使用java.exe(安装JRE之后该命令就存在了)命令。
● 一个java源文件可能会编译生成多个class文件。
● java源文件中的源代码如果不符合java的语法机制则编译时编译器会提示错误信息,并且无法生成class文件。反之则生成class文件,而class文件才是最终要执行的程序,此时将java源文件删除是不会影响java程序运行的(当然,我们也不必删除java源文件,因为在运行class文件之后,如果没有达到预期的运行效果,这个时候还需要将java源代码修改,重新编译,以达到最终的运行效果)。
● 若生成的字节码文件名为A.class,那么我们称A为一个类的名字(这个先记住就行,后面的内容会讲)。
● 当编译阶段完成之后,我们可以使用JRE中的java.exe命令运行程序,例如执行命令“java A”,该命令执行后会启动类加载器,类加载器去硬盘上搜索A.class文件,找到该字节码文件之后,将其加载到JVM当中,JVM中的解释器会将A.class字节码文件解释为操作系统可以执行的二进制码,然后操作系统通过执行二进制码和硬件平台交互。
● 运行java程序的前提是当前操作系统上已经安装了对应版本的JVM(JVM不是单独安装的,安装JRE即可,不同的操作系统需要安装不同版本的JRE,不同版本的JRE对应不同版本的JVM)。
java源文件要求扩展名必须为.java,不能使用其他扩展名,有些操作系统默认不显示文件扩展名,大家可按照以下步骤,将文件的扩展名显示出来(以win7系统为例):
图1-10:打开桌面上的计算机,菜单栏上的“工具”
图1-11:文件夹选项
图1-12:点击“查看”,把上图红框的对勾去掉
● 打开DOS命令窗口,使用快捷键:win + r,输入cmd,回车。
● dir命令:查看当前目录下所有的子文件或子目录。
● cd命令:切换路径,使用方法是:cd+目录路径,需要注意的是路径包括相对路径和绝对路径,对于windows来说从硬盘的根路径下开始的路径都是绝对路径,例如:C:\Program Files、C:\Program Files\Java等,所有的相对路径都是从当前所在目录作为起点开始查找的路径。另外cd ..切换到上级目录,cd \切换到根目录。
图1-13:cd命令使用办法
● 切换盘符:直接输入c:,或者d:,然后回车即可。切换盘符不需要cd命令。
● del命令:删除文件或目录,例如:del *.class,删除当前目录下所有的.class文件。
● ipconfig命令:查看IP地址等信息,查看更详细的信息使用ipconfig /all。
● ping命令:查看两台计算机是否可以正常通信,例如:ping 192.168.1.100,正常情况下发送数据包和接收数据包数量相同并且没有延迟的时候表示通信正常,ping 192.168.1.100 -t表示一直发送数据包和接收数据包,ping www.baidu.com可以查看电脑是否可以正常上网。
● shutdown命令:设置定时关机,例如:shutdown -s -t 7200表示2个小时之后自动关机。
● mkdir命令:创建目录,例如:mkdir abc表示在“当前目录”下新建abc目录。
● cls命令:清屏。
● exit命令:退出DOS命令窗口。
这里安装的EditPlus版本为:
双击之后,一直点击下一步就可以了。
以下主要说一下对该工具的配置:取消自动备份、设置字体大小、设置缩进长度:
图1-14:菜单栏“工具”,然后“首选项”
图1-15:设置字体和取消自动备份
图1-16:设置缩进长度
图1-17:这里设置缩进长度为3
使用快捷键可以大大提高开发效率,从现在起你应该尽可能使用快捷键来代替鼠标,以下先列举出通用的文本编辑快捷键。当然,如果大家想熟练掌握,还是需要后期不断的使用:
● ctrl+c 复制
● ctrl+v 粘贴
● ctrl+x 剪切
● ctrl+s 保存
● ctrl+z 撤销
● ctrl+y 重做
● ctrl+a 全选
● home 光标回到行首
● end 光标回到行尾
● ctrl + home 光标回到文章开始
● ctrl + end 光标回到文章末尾
● shift + home 或 end 选中一行
● 鼠标双击 (选中一个单词)
● ctrl + shift + 右箭头或左箭头 (选中一个单词
● ctrl + f 查找
Java语言由Sun(Sun Microsystems)公司开发,2009年时被Oracle(甲骨文)公司收购,所以目前JDK需要从Oracle下载,Oracle官网地址是https://www.oracle.com,这里我们学习Java10版本,所以下载JDK10,具体下载过程如下图所示:
图1-18:选择JavaSE
图1-19:点击“Download Java SE...”
图1-20:点击“DOWNLOAD”
注意:JDK10要求windows操作系统必须是64bit的。下载完成之后,直接双击进行安装,具体步骤如下所示:
图1-22:点击“下一步”
图1-23:选择JDK10的安装目录,点击下一步
图1-24:正在安装JDK10
图1-25:选择JRE10的安装目录,点击“下一步”
图1-26:正在安装JRE10
图1-27:点击关闭,安装结束
图1-28:java和javac命令的存放位置
javac.exe命令用来完成java程序的编译,java.exe命令用来完成java程序的运行。
该程序大家目前不需要理解,照抄就行,包括大小写以及标点符号,这只是一个测试Java环境的程序,后期学习的过程中会让大家理解该程序的含义。首先新建文件,具体代码如下所示:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("动力节点-口口相传的Java黄埔军校");
}
}
编译java程序需要使用JDK bin目录下的javac.exe命令,首先我们来看看这个命令是否可以在DOS命令窗口中使用,如下图所示:
图1-29:测试javac命令
根据以上测试结果,说明在“C:\Users\Administrator”目录下javac命令是无法使用的,那么我们来切换到另外一个目录“C:\Program Files\Java\jdk-9.0.4\bin”再来测试,如下图所示:
图1-30:切换到bin目录下再次测试javac命令
根据测试结果可以得出:windows操作系统默认是从当前路径下查找可执行命令文件的。但每一次使用javac命令的时候都需要切换到bin目录下,显然是很麻烦的,有什么比较方便的方法吗?我们先来研究一下ipconfig命令是怎么执行的,如下图所示:
图1-31:测试ipconfig命令
ipconfig.exe文件实际上在“C:\Windows\System32”目录下,如下图所示:
图1-32:ipconfig.exe在这里
ipconfig命令为什么在命令窗口可以直接执行而不需要切换到命令所在目录呢?实际上是因为windows系统中的环境变量path在起作用。如下图所示,windows操作系统有这样的默认配置:
图1-33:windows自带的path环境变量配置
我们来做一个实验,把上图path环境变量当中的“C:\Windows\System32;”删掉。怎么删除呢?鼠标双击Path,将“C:\Windows\System32;”删除,注意:System32路径后面的半角分号也需要删除,然后点击确定。将所有的DOS命令窗口全部关闭(注意:修改了任何环境变量,DOS命令窗口都需要关闭之后重新打开,这样新的环境变量才会生效),打开一个新的DOS命令窗口,测试ipconfig,如下图所示:
图1-34:测试ipconfig命令
根据以上测试,windows操作系统已经找不到ipconfig.exe文件了,接下来我们再重新恢复path环境变量的配置,配置环境变量path的步骤是这样的:在电脑桌面图标上点击鼠标右键,继续点击,在弹出的窗口上选择然后在弹出的窗口上点击,此时会弹出以下窗口:
图1-35:配置环境变量的窗口
在上图的系统变量当中找到path环境变量,点击“编辑”,将“C:\Windows\System32;”添加到path环境变量当中(注意:环境变量path当中有很多路径,路径和路径之间必须使用半角的英文分号进行分隔),然后点击确定,重新配置了环境变量需要关闭所有DOS命令窗口,打开一个新的DOS窗口测试ipconfig命令,如下图所示:
图1-36:测试ipconfig命令
根据以上讲解,我们怎么让javac命令可以使用呢?很简单,我们只要把“C:\Program Files\Java\jdk-9.0.4\bin;”路径配置到环境变量path当中即可,配置完成之后,再次测试javac命令,如下图所示:
图1-37:测试javac命令
在javac命令后面添加“-version”参数可以查看编译器的版本,如下图所示:
图1-38:查看编译器版本
到这里,大家应该掌握环境变量path的配置了吧?通过以上内容的学习,大家应该思考这样一个问题:path环境变量是隶属于java的吗,它和java有关系吗?答案是:path环境变量隶属于windows操作系统,不属于java范畴,是windows操作系统搜索某个命令文件的路径依据。windows操作系统到底是如何搜索命令文件的呢?实际上它会先在当前路径下找,找不到的时候会自动去环境变量path的路径中查找,找到则执行该命令,找不到则在DOS窗口中提示错误信息。希望大家以后遇到类似的“在DOS命令窗口中输入某个命令时出现找不到命令”这样的问题都能够独立的解决。
通过以上的配置,javac命令已经可以使用了,那么它具体怎么使用才能编译java程序呢,接下来我们详细的讲解一下javac命令的具体使用办法。
javac命令的语法格式是:“javac java源文件路径”,非常简单,就是javac命令后面加上java源文件的路径,当然,之前我们说过,路径包括绝对路径和相对路径。也就是说javac后面的java源文件路径可以是绝对的也可以是相对的,如下图所示:
图1-39:编译之前
图1-40:编译之后(绝对路径方式)
图1-41:编译之后(相对路径方式)
我们把HelloWorld.java文件中的程序故意修改让其出现错误,再次编译,如下图所示:
public class HelloWorld {
public static void main(Strin[] args) {//String修改为Strin
System.out.println("动力节点-口口相传的Java黄埔军校");
}
}
图1-42:编译器报错测试
通过以上的测试,可以得出这样的结论:java源代码中存在语法错误,在编译的时候编译器会提示错误消息,并且不会生成class字节码文件。在以后的学习过程当中,编译的时候尽可能将错误信息记录起来,并且给出该错误的解决方案,久而久之不断积累,大家就会成为改错高手。
小结:通过本小节的学习,每位同学都必须掌握path环境变量的作用,以及它是怎么配置的,还有怎么使用javac编译java源程序
运行java程序的前提是已经正常生成了class字节码文件,本课程中生成的class文件是,我们称HelloWorld为类名。那么怎么运行呢,这个时候就需要借助JDK bin目录下的java.exe命令了,我们先来测试这个命令是否可以在DOS窗口中使用,如下图所示:
图1-43:测试java.exe是否可
经过测试,我们看到java.exe命令是可以在DOS窗口中直接使用的,其实只要javac.exe可以使用,那么java.exe就一定可以使用,因为javac.exe和java.exe都在JDK的bin目录下,之前的课程中这个目录已经配置到环境变量path当中,所以这里java.exe肯定也是可以使用的。
那么java.exe具体怎么使用呢,语法是:“java 类名”,需要注意的是java命令后面是类名,而不是class文件的名字,也不是class文件的路径,不能这样写java HelloWorld.class,也不能这样写java E:\course\JavaProjects\01-JavaSE\chapter01\HelloWorld.class,只能这样写:java HelloWorld,它的运行原理是:在命令窗口中输入“java HelloWorld”回车之后,先启动的是类加载器,类加载器从硬盘上查找HelloWorld.class字节码文件,默认情况下类加载器只从当前路径下查找,查找到之后则将HelloWorld.class文件加载到JVM并执行,如果没有查找到则会出现错误信息(如果输入的是“java A”那么类加载器会从硬盘上查找A.class字节码文件,以此类推),如下图所示:
图1-44:运行HelloWorld类(正常)
由于默认情况下类加载器只从当前所在的路径下加载字节码文件,如果该字节码文件不存在会提示什么错误信息呢?请看下图:
图1-45:运行A类(错误)
类加载器默认从当前路径下加载,那么可以指定让类加载器从指定的目录下加载class文件吗?答案是可以的,这个时候就需要借助classpath这个环境变量了(classpath环境变量隶属于java语言,专门给类加载器指路的),接下来我们来设置一下classpath环境变量,此处把classpath设置为E:\,如下图所示:
图1-46:设置环境变量classpath
设置完成后关闭所有DOS窗口,重新开启新窗口,接下来看下图
图1-47:测试环境变量classpath
通过以上的测试得知,当环境变量classpath=E:\之后,chapter01目录下虽然有HelloWorld.class,并且当前目录就在chapter01下,但运行的时候却出现了以上错误信息,可见类加载器不再从当前路径下加载了。那我们把HelloWorld.class文件放到E:\目录下呢?请看下图:
图1-48:测试环境变量classpath
通过以上的测试可以得出,当设置环境变量classpath=E:\的时候,类加载器只去E:\目录下加载class文件了,不再从当前目录下加载,也不会去其它目录下加载。这样对于以后的开发来说反而更麻烦了,因为每一次编译生成的class文件都要放到E:\目录下类加载器才能找到,所以目前来说classpath环境变量是不需要配置的,因为classpath在没有配置的情况下,类加载器默认会从当前所在的目录下加载class,也就是说以后要想运行class首先要将DOS窗口的目录切换(cd命令)到class文件所在的位置,然后再运行。当然我们也可以把环境变量classpath配置为:classpath=.,因为.代表当前路径。
小结:通过以上内容的学习,我们知道classpath环境变量不属于windows操作系统,是java编程语言当中的一种机制,这种机制是专门为类加载器加载class文件时提供路径依据的。最终的结论是classpath环境变量目前是不需要配置!当然,随着后面内容的学习,大家会知道classpath环境变量总有一天是需要配置的,到那个时候大家可别忘了将“当前路径.”配置到classpath当中,例如:classpath=.;path1;path2;,如果没有把.配置到classpath当中,那么类加载器就不再从当前路径下加载class了。到此为止大家必须掌握两个重要环境变量,一个是windows操作系统的path环境变量,另一个是java语言的classpath环境变量。至于有些参考资料上还提到了JAVA_HOME等环境变量,其实这些环境变量对于我们目前来说是不需要配置的,以后用到的时候再说吧。
注释是对代码的解释和说明,其目的是让程序员能够更加快速的理解代码。它是编写程序时,写程序的人给一个语句、程序段等的解释或提示,能提高程序代码的可读性。注释在编译的时候不会生成到class字节码文件当中,它只在java源文件中停留。
Java语言的注释包括三种方式,请看以下程序:
/**
* (javadoc注释,写在这里的注释信息会被JDKbin
* 目录下的javadoc.exe工具提取并生成帮助文档)
* 以下程序实现打印九九乘法表功能
* @author bjpowernode-dujubin
* @version 1.0
* @since 1.0
*/
public class NineByNine {
/*
这是程序的入口,也称为主方法(多行注释)
类加载之后,程序从这里进来开始执行
*/
public static void main(String[] args) {
for( int i = 1 ; i <= 9 ; i ++ ){ //外层循环9次,九九乘法表共9行
for( int j = 1 ; j <= i ; j ++ ){
System.out.print( j + "*" + i + "=" + i * j + " ");
}
System.out.println(); //换行(单行注释)
}
}
}
养成编写注释的好习惯,要有编写注释的意识(编写注释是程序员最基本的素质),当然,写注释也是有技巧的,不是所有位置都写,不是把写的代码原版翻译过来,高手往往在写注释的时候,不多不少,能够做到恰到好处,几句话就可以描述清楚程序的核心功能。记住:注释的作用不在于表示代码的含义,而在于表示代码的功能。希望在以后的课程当中通过慢慢的培养,能够写一手漂亮的注释,当然,目前大家只需要掌握注释有哪几种,分别写到什么符号里就行了。
使用注释对HelloWorld程序进行解释说明,这里的描述大家先有个印象就行,后面的课程大家会理解的:
//public关键字表示公开的
//class关键字用来定义类
//HelloWorld是类名
public class HelloWorld {//定义一个公开类,起名HelloWorld
//大括号要成对儿写
//这里的大括号括起来的是“类体”
//这是程序的入口,从这里进来执行
//static表示静态的
//void表示main方法执行结束之后不返回任何数据
//以下行代码除了args可以修改为其它名字之外,剩下的都是固定写法
//编写代码从现在养成好习惯:合理缩进
//(你包含着我,或者说我比你低一级,就要缩进)
public static void main(String[] args) {
//这里的大括号括起来的是“方法体”
//向控制台输出一句话
//小括号里面的双引号必须是半角的,不能采用中文
//这是一条java语句,java语句以“;”结尾,这里的“;”也是半角
System.out.println("动力节点-口口相传的Java黄埔军校");
}
//类体中不能直接编写以下语句
//System.out.println("动力节点-口口相传的Java黄埔军校");
}
图1-49:一个java源文件中可定义多个class
通过以上的测试可以得出:一个java源文件中可以定义多个class,并且在编译的时候一个class会对应编译生成一个class字节码文件。还有,public的class可以没有。
图1-50:public class的类名要求和java源文件名一致
通过以上的测试可以得出:如果定义public class的类,只能定义一个,并且要求此类名必须和java源文件名保持一致。(这是规则记住就行,学计算机编程语言有很多知识点在学习的时候很难理解,只能靠记忆,随着后面内容的学习,大家会对以前困惑的知识点有所理解)
图1-51:每个类中都可以定义main方法
通过以上的测试可以得出:任何一个class中都可以设定程序入口,也就是说任何一个class中都可以写main方法(主方法),想从哪个入口进去执行,则让类加载器先加载对应的类即可,例如:想让A类中的main方法执行,则执行:java A,想让B类中的main方法执行,则执行:java B。但实际上,对于一个完整的独立的应用来说,只需要提供一个入口,也就是说只需要定义一个main方法即可。
还有,在实际的开发中,虽然一个java源文件可以定义多个class,实际上这是不规范的,比较规范的写法是一个java源文件中只定义一个class。