一、Java 简介
1、什么是 Java
Java 语言是美国 Sun 公司(Stanford University Network),在1995年推出的高级的编程语言,所谓编程语言,是计算机的语言,人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。
Java 是一门设计语言。
扩展:
语言:
-
-
- 自然语言:人类听懂的语言(汉语,英语....)
- 机器语言:计算机能听懂的语言(二进制 0,1)
- 程序设计语言:由字符串组成的文本文件,有固定的语法(C、C++、Java、VB、汇编.......)程序语言是我们对计算机发号施令的工具。
- 自然语言:人类听懂的语言(汉语,英语....)
-
程序(源文件)是由字符串组成的文本文件。
程序的运行:机器码文件(二进制文件)
2、Java 的历史背景
-
- Java 之父:詹姆斯.高斯林
- 1995年:Java 诞生
- 1996年:发布 1.0 版本
- 1997年:发布 1.1 版本
- 1998年:发布 1.2 版本
- 1999年:SUN公司发布 Java的三个版本:标准版,企业版和微型版(J2SE、J2EE、J2ME)
- 2000年:发布 1.3 版本
- 2002年:发布 1.4 版本
- 2004年:发布 5 版本(重大更新)
- 2006年:发布 6 版本
- 2009年:Oracle 公司收购 Sun 公司,并于 2011 年发布 Java 7版本;
- 2014年:发布 Java 8 版本(重大更新)
- 2017年:发布 Java 9 版本
- 2018年:发布 Java 10 版本
3、Java 的应用领域
Java 语言主要应用在互联网程序的开发领域,以及服务器后台处理大数据的存储,查询,数据挖掘等也有很多应用。主要应用领域有:
-
- 桌面应用开发
- 嵌入式系统开发
- 电子商务应用
- 企业级应用开发
- 交互式系统开发
- 多媒体系统开发
- 分布式系统开发
- web 应用系统开发
4、Java 的版本
按照应用范围分为 3 个版本:
(1)Java EE版(Java Standard Edition)Java 标准版
Java 的标准版,主要用于桌面应用程序的开发,同时也是 Java 的基础,包含Java 语言基础,JDBC操作,I/O操作,网络通信,多线程等技术。
(2)Java SE版(Java Enterprise Edition)Java 企业版
Java 的企业版,主要用于开发企业级分布式的网络程序,如电子商务和 ERP系统。
(3)Java ME版(Java Micro Edition)Java 小型版
该版本主要用于嵌入式系统开发,支持Java程序运行在移动终端上的平台,如手机,掌上电脑登移动通信电子设备。
5、Java API 文档
API 的全称是 Application Programming Interface,即应用程序编程接口。Java API 文档是 Java 程序开发补课缺少的编程词典,里面记录了 Java 语言中海量的 API,主要包括类的继承结构、成员变量和成员方法、构造方法,静态成员的详细说明和描述信息。 API文档
二、Java 特性
1、跨平台(可移植性)
Java 程序具有与体系结构无关的特性,可以方便地移植到网络上的不同计算机中。可以运行不同的操作系统,服务器,数据库中。
2、简单性
语法简单明了,容易掌握(相对于 C 语言,C++来说)
3、纯面向对象的语言(OOP)
Java 是一种纯面向对象的程序设计语言。Java 语言最外部的数据类型是对象,所有的元素都要通过类和对象来访问。
4、分布性
Java 的分布性包括操作分布和数据分布,可以在不同的主机上布置不同的操作和存放不同的数据。
5、解释型
Java 程序需要解释器,任何移植了Java解释器的计算机或其他设备都可以用 Java 字节码进行解释执行。字节码独立于平台,使得开发更加迅速。
6、安全性
Java 程序代码经过代码校验,指针校验等很多测试步骤才能运行,所以未经允许的 Java 程序不可能出现损害系统的行为。
7、健壮性
Java 程序在编写多方面的,可靠的应用程序,Java 将检查程序在编译和运行时的错误,并消除错误。
8、多线程
多线程机制能够使应用程序在同一时间执行多项任务,而且相应的同步机制可以保证不同线程能够正确地共享数据,使用多线程,可以带来更好的交互能力和实时行为。
9、高性能
Java 编译后的字节码是在解释器中运行的。字节码可以在程序运行时被翻译成特定平台的机器指令,从而进一步提高运行速度。
10、动态性
Java 可以动态调整库中方法和增加变量,客户不需要任何更改,在 Java 中进行动态吊证是非常简单和直接的。
三、Java 语言开发环境搭建
1、Java 虚拟机 ——— JVM
-
- JVM(Java Virtual Machine):Java 虚拟机,简称 JVM,是运行所有 Java 程序的假想计算机,是Java程序的运行环境,是 Java 最具有吸引力的特性之一,编写的 Java 代码,都允许在 JVM 之上。
- 跨平台:任何软件的运行,都必须运行在操作系统之上,而我们用 Java 编写的软件可以运行在任何的操作系统上,这个特性称为 Java 语言的跨平台特性。该特性是又 JVM实现的,我们编写的程序运行在 JVM 上,而 JVM运行在操作系统上。
- JVM(Java Virtual Machine):Java 虚拟机,简称 JVM,是运行所有 Java 程序的假想计算机,是Java程序的运行环境,是 Java 最具有吸引力的特性之一,编写的 Java 代码,都允许在 JVM 之上。
如果所示,Java 虚拟机本身不具备跨平台的功能,每个操作系统都有不同版本的虚拟机。
2、JRE 和 JDK
-
- JRE(Java Runtime Environment):是Java 程序的运行时环境,包含 JVM 和运行所需要的核心类库。(JRE = JVM + 核心类型)
- JDK (Java Development Kit):是Java 程序开发工具包,包含 JRE 和 开发人员使用的工具。(JDK = JRE + 开发工具集)
Tips:想要运行一个已有的 Java程序,只需按照 JRE 即可,想要开发一个全新的 Java 程序,必须安装 JDK。
Tips:JDK > JRE > JVM
3、JDK 安装图解
(1) 点击下一步进行安装
(2)更改安装路径
(3)选择安装路径
(4)点击确定,安装完成。
Tips :安装路径中,不要包含中文和空格。
4、配置环境变量
(1)Java_HOME 环境变量的配置
配置环境变量作用:
开发 Java 程序,需要使用 JDK 中提供的工具,工具在 JDK 安装目录的 bin 目录下。如果想使用这些工具,就要先进入到bin 目录下,这个过程就会非常的麻烦。如果不进入目录,这些工具就不能使用,会报错。
为了开发方便,想在任意的目录下都可以使用 JDK 的开发工具,则必须配置环境变量,配置环境变量的意义,在于告诉操作系统,我们使用的 JDK开发工具在哪个目录下。
配置环境变量步骤:(win10版本)
1、文件资源管理器--> 此电脑鼠标右键-->选择 属性
2、选择 高级系统设置 --> 选择环境变量
3、点击下方系统变量的 新建,创建新的环境变量,变量名输入 JAVA_HOME ,变量值输入 JDK 的安装目录。
4、选择 Path 环境变量,双击或点击编辑
5、点击新建,输入 %JAVA_HOME%in;%JAVA_HOME%jrein; , 必须是英文格式,选中该行,上移到最上方,点击确定。
6、环境变量配置完成,重新开启 DOS命令行,在任意目录输入 javac / java 命令查看是否配置成功。
Tips:Java 1.5 版本之后不需要设置 classpath环境变量,如果需要设置环境变量,新建变量 Classpath,变量值为 .;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar; 注意不要漏掉变量值中的符号,最后点击确定。
Classpath ->到哪里找需要执行的.class文件.前面是一个点[.]再加一个分号[;]再以分号结束[;]
为什么要加点[.]在编译java文件时,如javac xxx.java 即会在当前目录下生成xxx.class文件,
然后再用java xxx执行,系统会在当前目录下找xxx.class文件,所以要加点,代表是在当前目 录下找class文件来执行。
四、Java 运行机制及运行过程
1、Java 语言最主要的特点
(1)特点一:面向对象
两个基本概念:类、对象
三大特性:封装、继承、多态(抽象)
(2)特点二:健壮性
吸收了 C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制。
(3)特点三:跨平台性
程序员使用程序设计语言所写的文件称为源文件,而提交给计算机,运行的时候是机器码文件。
转换机制:
-
-
- 编译型:将源文件直接编程成机器码,一次编译,多次执行。执行效率高,不可跨平台。(C语言,C++)
- 解释型:将源文件一行一行解释,一行一行执行。不同的操作系统具备不同的解释器。运行效率低,可以跨平台。(Python,jJavaScript,shell)
- 半编译半解释型:Java语言。先编译,后解释。
- 将源文件编译成字节码文件(平台中独立文件 .class文件)(可跨平台)
- 将字节码文件进行解释执行
- 编译型:将源文件直接编程成机器码,一次编译,多次执行。执行效率高,不可跨平台。(C语言,C++)
-
由java源文件编译成的字节码文件可以在任意平台上运行。Java之所以有这种跨平台的特性,归功于java虚拟机,java虚拟机屏蔽了底层操作系统的差异。
跨平台:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”一次编写,处处运行。
任何软件的运行,都必须运行在操作系统之上,而我们用 Java 编写的软件可以运行在任何的操作系统上,这个特性称为 Java 语言的跨平台特性。
该特性是又 JVM实现的,我们编写的程序运行在 JVM 上,而 JVM运行在操作系统上。
原理:Java程序不是直接运行在操作系统上,而是运行在JVM(Java Virtual Machine)。不同的操作系统平台,可以安装不同的JVM,程序员不用管,程序员只要关注自己的Java程序就可以。
2、Java 两种核心机制
(1)Java 虚拟机(Java Virtal Machine)
JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
对于不同的平台,有不同的虚拟机。
Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
(2)垃圾收集机制(Garbage Collection)
1)不再使用的内存空间应回收—— 垃圾回收
在C/C++ 等语言中,由程序员负责回收无用内存。
在 Java 语言中消除了程序员回收无用内存空间的责任,它提供一种系统级线程跟踪存储空间的分配情况,并在 JVM 空闲时,检查并释放那些可被释放的存储空间。
2)垃圾回收在 Java 程序运行过程中自动进行,有自己的一套算法,程序员无法精确控制和干预。
五、第一个 Java 文件
1、编写第一个 Java 程序文件,新建一个文本文件,完整的文件名修改为 HelloWorld.java,其中文件名为 HelloWorld,后缀名为 .java。
2、用记事本打开,在文件中输入以下文本并保存。
1 public class HelloWorld {
2 public static void main(String[] args) {
3 System.out.println("Hello world!");
4 }
5 }
3、每一个 Java 文件都是一个 Java类,一个类的组成主要由下面几部分组成:
-
- 关键字 class
- 类名: HelloWorld ,文件名必须和类的名字是一致的,注意大小写。
- 内容:{}
- 主函数: main函数,主函数是一个程序的入口函数,程序执行就是执行主函数,主函数执行完了,程序也就执行完了。JVM在运行的时候,都是从 main 方法开始执行的。(可以没有主函数一个类中)
- 一个源文件中可以定义多个类,编译之后都会生成一个 .class 文件,但是只能定义一个公开类,且公开类的类名和文件名完全一致,公开类用 public 修饰。
- Java 程序的基本组成单元是类,类中又包括属性与方法两部分,每一个应用程序都必须包含一个 main() 方法,含有 main() 方法的类称为主类。
- 关键字 class
4、编译:编写好的 Java 文件 JVM 看不懂,也就不能运行,需要将写好的 Java 源文件,编译成 JVM可以看懂的 字节码文件。
在 DOS 命令行中,进入 Java 源文件的目录,使用 javac 命令进行编译。(源文件名不区分大小写,但是建议注意大小写)
命令:
javac Java源文件名.java
编译成功后,命令行没有任何提示,在源文件的目录中就会有一个和 源文件同名的 .class 文件,这个文件就是编译后的文件,是Java的可运行文件,称为字节码文件。
5、运行程序
在 DOS 命令行中,进入 java 源文件的目录,使用 java 命令进行运行。(字节码文件名(类名),严格区分大小写。)
命令:
java 类名(类名与源文件不一致,非公开类)
java 源文件名(类名与源文件名一致,公开类)
运行的时候切记不要给文件添加后缀名
Tips: 编译和运行
编译:是指将编写的 java 源文件翻译成 JVM 认知的 class 文件,在这个过程中,javac 编译器会检查我们所写的程序时候错误,有错误就会提示出来,如果没有错误就会编译成功。
运行:是指将 class 文件交给 JVM 去运行,此时 JVM就会执行我们写的程序。
6、包
(1)包的作用
① 避免类的重名问题
有了包后,类的名称就比较长了,类的全名称就变成了: 包.类名
java.util.Scanner :Scanner类的全名称
java.lang.String:String类的全名称
java.lang.System:System类的全名称
java.lang.Math:Math类的全名称
② 分类组织管理众多的类
java.io:和IO(输入输出)有关
java.util:和各种常用工具类有关
java.lang:核心系统类
java.net:和网络编程有关
java.sql:和数据库编程有关
③ 用于访问权限控制
如果某个类或某个方法的权限修饰符省略,那么就仅限于本包使用。
(2)如何声明包
语法格式:
package 包名;
注意:
① 一个 .java 源文件只能有一句
② 必须在源文件的代码首行
③ package 关键字:类似于文件夹,用于管理字节码文件,必须写在源文件的第一行。并且可以有多层包。(0~1个包)
包名的命名规范:
① 所有单词都小写,每个单词之间用 . 分割
② 习惯上用公司的域名倒置 + 模块名
(3)如何编译带包的类
编译带包的类语法:
javac -d . 源文件名.java (自动生成目录结构)
(4)如何运行带包的类
运行带包的类语法:
java 包名.类名(全限定名)
(5)如何使用其他包的类
前提:被使用的类或成员的权限修饰符的允许跨包使用
语法:
使用全名称:包.类名
使用import语句 + 简名称
说明:
① import 语句是写在 package 语句与 class 声明之间的
② 导包语句可以很多句,导入不同包的类
③ java.lang 包中的类可以不适用 import 语句,直接使用简名称
④ 可以同时导入一个包中的很多类,如 import 包.*;
⑤ 如果出现了不同的包,但是类名相同
例如: java.util.Date 与 java.sql.Date;
此时只能一个选择使用全名称,一个使用简名称,不能同时使用简名称
import 关键字:当一个类中需要引用另外一个类的方法,需要引用对应的包。(0~n个包)
注意:如果有多个包结构是相同的,用 * 代替该包结构下的所有类。