什么是Java语言
Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购。Java之父是詹姆斯.高斯林(James Gosling)。1996年发布JDK1.0版。 目前最使用最多的版本是Java8。
Java技术体系平台
- JavaSE(Java Platform, Standard Edition标准版):允许您在桌面和服务器上开发和部署Java应用程序。Java提供了丰富的用户界面、性能、多功能性、可移植性和当今应用程序所需的安全性。
- JavaEE(Java Platform, Enterprise Edition企业版):是为开发企业环境下的应用程序提供的一套解决方案,主要针对于Web应用程序开发。比如说开发各种网上购物商城丶物流丶金融丶各行各业的门户网站。
- JavaME(Java Platform, Micro Edition 小型版):为互联网上的嵌入式和移动设备上运行的应用提供了一个健壮、灵活的环境:微控制器、传感器、网关、移动电话、个人数字助理(PDA)、电视机顶盒、打印机等等。JavaME包括灵活的用户界面、健壮的安全性、内置的网络协议,以及支持动态下载的网络和离线应用程序。基于JavaME的应用程序在许多设备上都是可移植的,但是利用了每个设备的本机功能。
Java语言的跨平台原理
-
跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台特性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM运行在操作系统上。Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚拟机对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的跨平台。
JDK丶JRE丶JVM
- JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境之一,也是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在JVM 之上。
- JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)
- JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发人员使用的工具。
我们想要运行一个已有的Java程序,那么只需安装JRE
即可。我们想要开发一个全新的Java程序,那么必须安装JDK
,其内部包含JRE
。三者之间的关系如下图所示:
DOS操作系统
软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。 java语言的初学者,学习一些DOS命令,会非常有帮助。DOS是一个早期的操作系统,现在已经被Windows系统取代,对于我们开发人员,目前需要在DOS中完成一些事情,因此就需要掌握一些必要的命令。进入DOS操作系统如下所示:
在DOS命令窗口中才可以输入并执行DOS命令。在最初的windows计算机中没有图形界面的,只有DOS命令窗口。也就是说通过执行DOS命令窗口可以完全完成文件的新建、编辑、保存、删除等一系列操作。
接下来我们来看几个常见的 dos 命令吧:
- dir 命令:查看当前目录下所有的子文件或子目录。
- cd 命令:切换路径,使用方法是:cd+目录路径,需要注意的是路径包括相对路径和绝对路径,对于 windows 来说从硬盘的根路径下开始的路径都是绝对路径,例如:C:Program Files、C:Program FilesJava 等,所有的相对路径都是从当前所在目录作为起点开始查找的路径。另 外 cd ..切换到上级目录,cd 切换到根目录。一个·代表当前路径,一般使用在环境变量配置。
- 切换盘符:直接输入 c:,或者 d:,然后回车即可。切换盘符不需要 cd 命令。
- del 命令:删除文件或目录,例如:del *.class,删除当前目录下所有的.class 文件。
- ipconfig 命令:ipconfig 查看 IP 地址等信息,查看更详细的信息使用 ipconfig /all。这个详细信息中包括网卡 的物理地址,例如:70-8B-CD-A7-BA-25这个物理地址具有全球唯一性。物理地址通常叫做MAC地址。
- ping 命令:查看两台计算机是否可以正常通信,例如:ping 192.168.1.100,正常情况下发送数据包和接收数据包数量相同并且没有延迟的时候表示通信正常,ping 192.168.1.100 -t 表示一直发送数据包和接收数据包,ping www.baidu.com 可以查看电脑是否可以正常上网。语法格式:ping IP地址或者ping 域名。IP地址是计算机在同一个网络当中的唯一标识。域名底层最终还是会被解析成IP地址的形式。
- cls 命令:清屏
- exit 命令:exit 退出 DOS 命令窗口,在一个DOS命令窗口中如果有一个命令一直在执行,想强行终止怎么办?ctrl + c 组合键。下图列出了我们可能使用的DOS命令:
初步了解 Java 的加载与执行
搭建好了开发环境后,在编写第一个 Java 程序之前,我们应当对 Java 的加载与执行提前有一个简单的了解,请 看下图:
- 第一步(写代码):在任意位置创建一个.java 结尾的文件,程序员在该文件中编写符合 Java 语法的源代码,这个文件被称为Java 源文件。
- 第二步(编译):使用“javac”命令对 java 源文件进行编译,如果 Java 源文件符合 Java 语法规则,则编译生成 1 个或者多个以“.class”结尾的文件。“.class”结尾的文件我们称之 为字节码文件,注意字节码文件不是普通文本文件,使用记事本等文本编辑器是无法打开的, 但该文件内容也不是二进制,如果是二进制形式的话,操作系统是可以直接执行的,这个文件 的内容我们称之为字节码。注意:这里有一个“类名”的概念,假设生成的文件是 A.class, 则表示类名为 A,B.class 则表示类名为 B。
- 第三步(运行):使用“java”命令运行已编译的 Java 程序,假设编译之后的字节码文件 是 A.class,则在 dos 命令窗口中执行 java A命令,这个时候 Java 虚拟机(JVM)就启动了, Java 虚拟机通过“类装载器 ClassLoader”从硬盘中找到 A.class 文件并装载,字节码文件被装 载到 Java 虚拟机之后,Java 虚拟机解释器对字节码进行解释,最终解释为二进制码,然后操 作系统通过执行二进制指令来和硬件平台完成交互。
以下则是 Java 程序加载与执行的过程,接下来我给大家总结 7 条规则,大家可以理解并记忆一下:
- 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 程序吧!
第一个Java程序
开发环境已经搭建完毕,可以开发我们第一个Java程序了。 步骤如下:
- 将 Java 代码编写到扩展名为 .java 的文件中。
- 通过 javac 命令对该 java 文件进行编译。
- 通过 java 命令对生成的 class 文件进行运行。
1:编写Java源程序
选择最简单的编辑器:记事本。 敲入如下代码
public class HelloWorld { public static void main(String[] args) { System.out.println("hello java "); } }
将文件保存成HelloWorld.java,这个 文件是存放java代码的文件, 称为源文件。文件名必须是 HelloWorld ,保证文件名和类的名字是一致的,注意大小写。每个字母和符号必须与示例代码一模一样。第一个 HelloWord 源程序就编写完成了,但是这个文件是程序员编写的,JVM是看不懂的,也就不能运行,因此我们必须将编写好的 Java源文件 编译成JVM可以看懂的 字节码文件 。
2:编译Java源文件
在DOS命令行中,进入Java源文件的目录,使用 javac 命令进行编译。
3:运行Java程序
在DOS命令行中,进入Java源文件的目录,使用 java 命令进行运行。
入门程序说明
- 编译:是指将我们编写的Java源文件翻译成JVM认识的class文件,在这个过程中, javac 编译器会检查我们 所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功。
- 运行:是指将 class文件 交给JVM去运行,此时JVM就会去执行我们编写的程序了。
java HelloWorld的执行过程以及原理
-
第一步:会先启动JVM(java虚拟机)
-
第二步:JVM启动之后,JVM会去启动“类加载器classloader” 。类加载器的作用:加载类的。本质上类加载器负责去硬盘上找类”对应的字节码文件。默认情况下类加载器(classloader)会从当前路径下找。我们可以设置一个环境变量,叫做:classpath环境变量告诉类加载器classloader去什么地方找字节码文件,在没有配置环境变量classpath的时候,默认从当前路径下加载。
- 第三步: 类加载器如果在硬盘上找不到对应的字节码文件,会报错,报什么错? 错误: 找不到或无法加载主类 类加载器如果在硬盘上找到了对应的字节码文件,类加载器会将该字节码文件装载到JVM当中,JVM启动“解释器”将字节码解释为“101010000...”这种二进制码,操作系统执行二进制码和硬件交互。
第一个Java程序小结:
- 在 java 编程中,一定要注意成对儿的符号要成对儿写,以上 HelloWorld 当中成对 儿的符号包括:小括号(),中括号[],大括号{},双引号""。这些符号在编写的时候建议成对编写。
- 在以下程序中 HelloWorld类名后面的大括号{ },这个大括号{ }里被称为类体。类体当中,不能直接写输出语句,例如直接写上System.out.println("hello1")是非法的。
- 程序的入口又叫做 main 方法,或者叫做主方法。大家记住固定写法即可。另外在 main 方法后面的大括号{ }我们称之为方法体,方法体也是由大括号括起来的。如果没有main方法,程序可以编译通过,而无法运行。运行会报 、错误: 找不到或无法加载主类 。不能定义多个main方法,编译不通过。对于主方法来说只有args可以改名字,其它位置不能动,不建议修改。
- 方法体由一条一条 java 语句构成,每一条 java 语句必须以“;”结束,所有的标点符号都是英文半角。
- 方法体当中的代码遵循自上而下的顺序依次逐行执行。
- 虚拟机运行的是字节码文件,没有字节码文件程序是无法运行的。对修改后的源文件需要重新编译,生成新的class文件后,再进行执行。
- 最初学习 java 编程的时候一定要注意代码的格式,要有合理的缩进,什么时候缩进 呢?大家需要记住:只要“我”这个大括号{ }包含着“你”,那么“你”就应该比“我”低一 级,此时“你”应缩进。
- Java严格区分大小写。
public class 和 class 的区别
- 一个源文件中最多只能有一个public类。其它类的个数不限,如果源文件包含 一个public类,则文件名必须按该类名命名。
- 虽然一个 java 源文件可以定义多个 class,实际上这是不规范的,我们建议大家,不管是否是public,都与源文件名保持一致,而且一个源文件尽量只写一个类,目的是为了好维护。
- 任何一个 class 中都可以设定程序入口,也就是说任何一个 class 中都可以写 main 方法(主方法),想从哪个入口进去执行,则让类加载器先加载对应的类即可。例如:想让 A类中的 main 方法执行,则执行:java A,想让 B 类中的 main 方法执行,则执行:java B。但实际上,对于一个完整的独立的应用来说,只需要提供一个入口,也就是说只需要定义一个 main 方法即可。
- 在源文件中只要有一个class的定义,那么必然会对应生成一个class文件。
- java 源文件的名字并不是类名,并且也不需要符合标识符的命名规则呢。源文件的名字 可以与 类名不一致,只要类名被 public修饰 那么源文件的名字必须和类名保持一致
- 我们编译的是类名而不是源文件