更好的阅读体验:点这里 ( www.doubibiji.com
)
1 Java 简介
1.1 Java语言概述
1.1.1 Java是什么
(了解一下即可,对学习没影响,总得了解一下它是怎么来滴~)
Java是由Sun公司(已被Oracle收购)的詹姆斯·高斯林(人称 Java之父)和麦克·舍林丹等人于1990年代初开发的一种编程语言,最初被命名为Oak,Oak的目标是作为家用电器等小型系统的编程语言,用于电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展,Sun公司发现Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。伴随着互联网的迅猛发展,Java逐渐成为重要的网络编程语言。
下图这个大胡子就是Java之父,看这锃光瓦亮的脑门,就知道有多资深了。
1.1.2 Java能干什么
1.1.2.1 用于B/S架构的系统的开发
什么是B/S架构
B/S架构全称为Browser/Server,也就是浏览器/服务器架构。
Browser指的就是浏览器,用户打开浏览器就能访问或使用系统,不需要下载客户端。
我们通过浏览器访问的网站都是B/S架构的。
什么是C/S架构
C/S架构全称为Client/Server,也就是客户端/服务器架构。
用户需要下载客户端的软件,例如QQ,微信等软件,都需要下载软件进行安装,下载的就是客户端的软件。通过使用客户端的软件和服务器进行连接交互。
其实B/S架构也是基于C/S架构的,因为浏览器也是一个客户端嘛。
(说白了就是开发网站的后台服务器。以前还用于开发网站前端页面,也就是JSP页面,现在没人用了,已凉凉。如果你看到一个项目时JSP开发的,那一定是祖传项目了,所以忽略JSP)
1.1.2.2 可用于移动开发
可以用于开发Android App应用。
1.1.2.3 可用于大数据开发
Hadoop以及其他大数据处理技术很多都是用 Java。
(刚入门呢,不扯那么远了,知道就行)
1.1.2.4 其他
嵌入式系统开发,Java当初被开发出来就是为了干这个的。
(现在基本没人用,凉凉)
1.1.3 Java历史版本
(了解一下历史,说白了就是Java一直在更新,看一下标黑的重要版本,增加了很多新特性,这里知道1.5和8是两个重大更新的版本就好了,细节学习的时候就知道了)
- 1991年Green项目,开发语言最初命名为Oak (橡树)
- 1994年,开发组意识到Oak 非常适合于互联网
- 1996年,发布JDK 1.0,约8.3万个网页应用Java技术来制作
- 1997年,发布JDK 1.1,JavaOne会议召开,创当时全球同类会议规模之最
- 1998年,发布JDK 1.2,同年发布企业平台J2EE
- 1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技术诞生
- 2004年,发布里程碑式版本:JDK 1.5,为突出此版本的重要性,更名为JDK 5.0
- 2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME
- 2009年,Oracle公司收购SUN,交易价格74亿美元
- 2011年,发布JDK 7.0
- 2014年,发布JDK 8.0,是继JDK 5.0以来变化最大的版本
- 2017年,发布JDK 9.0,最大限度实现模块化
- 2018年3月,发布JDK 10.0,版本号也称为18.3
- 2018年9月,发布JDK 11.0,版本号也称为18.9
- 2019年3月20日,Java SE 12 发布。Java 12是短期支持版本。
- 2019年9月23日,Java SE 13发布,此版本中添加了“文本块”,文本块是一个多行字符串文字,避免对大多数转义序列的需要,以可预测的方式自动格式化字符串,并在需要时让开发人员控制格式。
1.1.4 Java技术体系平台
1.1.4.1 JavaSE(Java Standard Edition)标准版
(这个就是这个课程要学习的内容,就是Java基础,是学习Web开发和Android开发的基础)
支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,此版本以前称为J2SE。
1.1.4.2 JavaEE(Java Enterprise Edition)企业版
(这个是用来做Web开发的)
是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如:Servlet 、JSP等,主要针对于Web应用程序开发,版本以前称为J2EE。
1.1.4.3 Java ME(Java Micro Edition)小型版
(已凉凉,不用学,非智能手机时代还被使用)
支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,此版本以前称为J2ME。
(知道上面的JavaSE是基础,必须要学的;JavaEE是做Web开发的就好了,这里说的是不包括Android的,Android是Google公司开发的平台,不属于原生Java技术体系的)
1.1.5 Java主要特性
(很多,了解一下就好了,现在看这些文字,可能都不知道说什么,不要紧,先看一下大标题了解一下,这个需要在学习中慢慢体会,学完了课程再来看会更清楚)
1 面向对象
Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。
面向对象的三大特性:封装、继承、多态
经常说Java是一种面向对象的编程语言,那什么是面向对象呢?
这里暂时不需要追寻具体是什么含义,面向对象主要区别于面向过程思想而言,在后面的学习中,慢慢学习,慢慢理解、慢慢领会即可,在此先不必纠缠。
2 平台无关性
平台无关性的具体表现在于,Java 是“一次编写,处处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。
Java 语言使用 Java 虚拟机机制屏蔽了具体平台的相关信息,使得 Java 语言编译的程序只需生成虚拟机上的目标代码,就可以在多种平台上不加修改地运行。
3 简单性
Java 语言的语法与 C 语言和 C++ 语言很相近,使得很多程序员学起来很容易。对 Java 来说,它舍弃了很多 C++ 中难以理解的特性,如操作符的重载和多继承等,而且 Java 语言不使用指针,加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。
4 解释执行
Java 程序在 Java 平台运行时会被编译成字节码文件,然后可以在有 Java 环境的操作系统上运行。在运行文件时,Java 的解释器对这些字节码进行解释执行,执行过程中需要加入的类在连接阶段被载入到运行环境中。
5 多线程
Java 语言是多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run() 方法,要执行的方法就写在 run() 方法体内。
6 分布式
Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。
7 健壮性
Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。
8 高性能
Java 的高性能主要是相对其他高级脚本语言来说的,随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。
9 安全性
Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防止恶意代码的攻击。除了 Java 语言具有许多的安全特性以外,Java 还对通过网络下载的类增加一个安全防范机制,分配不同的名字空间以防替代本地的同名类,并包含安全管理机制。
1.1.6 Java两种核心机制
1.1.6.1 Java虚拟机(Java VirtalMachine)
什么是Java虚拟机
通俗的讲,我们接触到的操作系统一般有windows、mac、linux,在windows系统编译的C和C++程序是无法在linux系统上运行的。但是Java可以”一次编译到处运行“,为什么可以呢?就是因为有Java虚拟机。Java虚拟机就像是”鞋子“,不同的操作系统相当于不同的路面,例如windows、mac、linux像是冰面、烂泥路、水泥路,在不同的道路上需要穿不同的鞋子,Java在不同的操作系统上有不同的虚拟机,相当于针对不同路面的鞋子,Java代码是运行在Java虚拟机中,相当于你的脚是穿了鞋子的。在不同的操作系统上运行,只是虚拟机不同,相当于换了鞋子,你的脚(你编译的代码)不用变。
上面的图想说明:我们编写的代码,首先需要进行编译,编译完成,会得到.class为后缀名的字节码文件,然后执行的时候,由不同操作系统的JVM(Java虚拟机)解释执行。Java虚拟机在操作系统之上,屏蔽各个操作系统的差异,操作系统是运行在硬件之上,屏蔽了硬件的差异。
1.1.6.2 垃圾收集机制(Garbage Collection)
代码在执行的时候,需要动态的申请的内存空间存放数据,在C/C++等语言中,需要写代码去回收不用的内存空间。在Java中,由垃圾回收机制负责处理,我们在编写代码的时候,不需要考虑内存释放,解放了大脑。
- Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
- 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
虽然Java有垃圾回收机制,但是 Java程序还会出现内存泄漏和内存溢出问题!
1.2 Java开发环境搭建
本节内容主要讲解Java的开发环境的搭建。
1.2.1 JDK 和 JRE
在搭建开发环境之前,我们先明确两个概念,也就是 JDK 和 JRE。
1 什么是 JDK
JDK(Java Development Kit Java),即开发工具包,是提供给开发Java开发人员使用的,包括了很多开发工具,也包括了 JRE,所以安装了JDK,就不用在单独安装 JRE 了。其中的开发工具包括:编译工具(javac.exe))打包工具(jar.exe)等。
2 什么是 JRE
JRE(Java Runtime Environment Java),即运行环境,包括 Java虚拟机(JVM Java Virtual Machine)和 运行Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
总结:简单而言,使用JDK的开发工具完成的java程序,交给JRE去运行。
3 JDK、JRE、JVM三者的关系
-
JDK = JRE + 开发工具集(例如Javac编译工具等)
-
JRE = JVM + Java SE标准类库
1.2.2 安装 JDK
安装主要的步骤就是:下载、安装、配置环境变量。
1.2.2.1 下载 JDK
(注:不同时期,官网的页面会发生变化,视情况而定。)
-
输入下载地址:https://www.oracle.com/downloads/
-
往下拉,看到Developer Downloads ,点击 java
- 点击 Java (JDK) for Developers
- 选择系统和要下载的版本
(注:有可能会提示先登录账号,才能下载。没账号的可以注册一个。)
1.2.2.2 安装 JDK
如果上面下载的是压缩版,直接解压到一个安装的目录就好了,安装路径不要有中文或者空格等特殊符号。
- 如果上面下载的是安装版,直接双击打开,点击下一步
-
安装 JDK
选择 JDK 安装目录,安装路径不要有中文或者空格等特殊符号。
-
安装 JRE
选择JRE的安装目录。安装路径不要有中文或者空格等特殊符号。
虽然 JDK 中包含了JRE,但是这里还是需要安装,因为如果用 Eclipse 来开发的话需要用到,如果不安装会报错。
-
安装完成
1.2.2.3 配置环境变量
1 环境变量的作用是什么
打开命令行,在命令行中敲入javac,然后回车,会出现错误提示:
为什么出错呢?这是因为在上面的目录找不到 javac 这个程序、文件或命令。
那 javac 在哪里呢?
javac 命令在 JDK 安装目录下的 bin 目录中,如果要执行 javac,必须先进入到 JDK 安装目录的 bin 目录下。
我们在命令行进入 JDK 安装目录下的 bin 目录下,然后执行 javac命令,就可以了。
但是每一次使用 java 的工具都要进入bin目录下,会非常麻烦,可不可以在任何目录下都可以执行java的工具的命令呢? 这个就需要配置环境变量。
2 配置方法
-
我的电脑,右键 属性
-
点击左侧 高级系统设置 ,在弹出的窗口中选择 高级 选项卡,然后点击 环境变量
-
点击 系统变量 下面的 新建 按钮
-
在系统变量里新建一个选项,变量名为 JAVA_HOME 变量,变量值为 JDK 的安装的目录,例如:D:\ProFiles\Java\jdk1.8.0_291
(根据自己的 JDK 的安装路径填写,是 JDK 安装的目录。)
然后点击 确定 按钮。
-
在 系统变量 中找到 Path 选项,然后点击 编辑 按钮
点击编辑按钮,显示 Path 选项配置。
-
点击右侧 新建
添加:%JAVA_HOME%\bin,然后点击确定按钮。
注意事项:
如果在第五步创建环境 JAVA_HOME 的时候,在你变量值最后有斜杠,这里编辑 Path 的时候就不需要加斜杠,也就是 %JAVA_HOME%bin ;如果 JAVA_HOME 最后没有斜杠,则这里需要配置为 %JAVA_HOME%\bin。
path就是windows系统执行命令时要搜寻的路径,所以就会去JDK的bin目录下寻找,就会找到java的工具。
- 验证是否成功
重新打开命令行,直接输入 javac,然后回车。如果出现javac的参数信息,配置成功。
1.3 HelloWorld
什么是HelloWorld
一般学编程语言的时候,写的第一个最简单的程序,通常打印一句话,话的内容通常是“Hello World”,后来通常用HelloWorld 表示第一个最简单的程序。
1 创建 Java 源文件
在电脑的任意目录,例如 D:\Project\hello-java
文件夹下,右键创建一个文本文档。名称为 HelloWorld.java ,
编写代码内容如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
注意,一定要设置电脑显示文件的扩展名,否则文件名可能会是HelloWorld.java.txt,.txt扩展名被隐藏了。
注意,上面的程序都是英文输入,不要输入中文的符号。
2 编译程序
在命令行,首先进入 D盘
# 进入D盘
D:
然后依次进入 D:\Project\hello-java
文件夹
# 进入Project目录
cd Project
# 继续进入hello-java目录
cd hello-java
然后就可以使用 javac
命令来编译 Java 源程序,如下图:
编译完成,会发现文件夹下多了一个 HelloWorld.class 文件,这个也就是 Java 字节码文件。
如果程序有错误,这里编译会报错。
3 运行程序
运行程序使用 java 命令
+ 类名
。如下图:
运行程序后,会打印出 Hello World!
。这里运行的就是 Java 字节码文件,但是注意,命令后面没有 .class
。
4 程序开发步骤
通过上面可以看出程序开发的步骤:
- 将 Java 代码编写到扩展名为 .java 的文件中,也就是 Java 源文件;
- 通过 javac 命令编译 Java 源文件,生成 .class 文件;
- 使用 java 命令运行 .class 文件。
1.4 Hello World 程序解析
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
解释一下上面的代码:
- 上面的
public class HelloWorld {}
表示定义了一个类,类名为HelloWorld
,Java 中所有的代码都需要在类中,这里的类名与文件名相同; public static void main(String[] args) {}
是定义了一个方法,是程序的入口方法,程序启动,会从这里开始执行,书写格式是固定的,这么写就行了;System.out.println("Hello World!")
表示将字符串Hello World!
打印到控制台,字符串需要使用双引号""
括起来;- Java语言严格区分大小写;
- Java方法由一条条语句构成,每个语句以
;
结束,;
是英文格式的分号。 - 代码写错,编译会报错,自然也无法运行。
1.5 使用开发工具的HelloWorld
所谓工欲善其事必先利其器,我们上面使用记事本,只是了解 Java 程序运行的流程,
实际开发中,不可能使用记事本来撸代码,那纯粹是给自己找不舒服。所以要找到开发效率高的工具,当前的开发工具非 IDEA 莫属。
1 安装开发工具
IntelliJ IDEA
是收费的软件,不过你懂得。也可以下载社区版,是免费的,这里学习是够用的。
地址: https://www.jetbrains.com/idea/download/index.html
IntelliJ IDEA
安装这里就不介绍了,摸索一下,很简单。
2 创建项目
在编写代码之前,首先需要创建一个项目,在项目中编写我们的程序。
打开 IDEA,选择 New Project
填写项目信息
创建完,项目结构如下:
3 创建Java文件
项目已经创建好了,然后我们在 src 目录下项目下新建一个 Java 的文件:
填写文件名称,选择 File
类型:
创建完成,这里创建了 HelloWorld 文件:
Java 文件以 .java
结尾,但是在项目中是没显示扩展名,在电脑的磁盘中可以看到扩展名。
4 编写程序
在创建的文件中编写我们的 Hello World 程序:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
编写完成 Java 代码,IDEA 会自动编译,如果有错误,会自动飘红。
5 运行
编写代码完成,可以点击左边的箭头,选择 Run HelloWorld main()
,可以直接运行程序。
或者在文件的空白区域,右键 --> 选择 Run HelloWorld main()
,也可以运行。
运行后,在下面的 TERMINAL 终端,会显示执行结果。
6 生成的字节码文件
运行程序后,会在项目下生成一个 out 目录,在 out 目录下会发现也有一个 HelloWorld 程序,而且程序和我们写的差不多。
其实这个是我们写的代码编译成的 Java 字节码文件,可是看到扩展名为 .class
。
如果你在电脑的文件系统中找到 .class
文件,你会发现是无法打开和显示成上面的代码的,但是在 IDEA 中之所以你能看到 HelloWorld.class
中的代码,是 IDEA 工具将字节码反编译为 Java 代码,所以才重新看到 .class 字节码文件对应的 Java 代码。
当然你不用理会out目录中的内容,这个是代码编译后的目录。