前言
本专栏是Java基础的学习笔记,Java基础知识学习路线图解:
第一部分:编程语言核心结构
主要知识点:变量、基本语法、分支、循环、数组、 …
第二部分: Java面向对象的核心逻辑
主要知识点: OOP、封装、继承、多态、接口、 …
第三部分:开发Java SE高级应用程序
主要知识点:异常、集合、 I/O、多线程、反射机制、 网络编程、 ……
软件开发介绍
-
软件开发
软件:即一系列按照特定顺序组织的计算机数据和指令的集合,有系统软件和应用软件之分。 -
人机交互方式
⮚ 图形化用户界面(Graphical User Interface - GUI)
⮚ 命令行方式(Command Line Interface - CLI) -
常用的DOS命令
⮚ dir : 列出当前目录下的文件以及文件夹
⮚ md : 创建目录
⮚ rd : 删除目录,例:rd /s /q 文件夹名(删除文件夹及其子项)
⮚ cd : 进入指定目录
⮚ cd.. : 退回到上一级目录
⮚ cd /: 退回到根目录
⮚ del : 删除文件,例:del 文件名/文件夹名
⮚ exit : 退出 dos 命令行
✓ 补充:echo javase>1.doc
计算机语言的发展迭代史
- 计算机语言:人与计算机交流的方式。
- 第一代语言:机器语言,指令以二进制码的形式存在。
- 第二代语言:汇编语言,使用助记符来表示一条机器指令。
graph LR
A[(add 2,3,result)]-->B(汇编器)-->C[("机器代码文件
...
110110101001101
...")]
- 第三代语言:高级语言
⮚ 面向过程:C、 Pascal、 Fortran
⮚ 面向对象:Java、JS、Python、Scala...
⮚ 面向过程/面向对象:C++
Java语言版本迭代概述
⮚ 1991年,起源于Green项目,开发语言最初命名为Oak(橡树),即Java的前身
⮚ 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
Java平台的三大版本
Java平台分为三个主要版本,每个版本针对不同的应用场景:
-
Java SE(Standard Edition) :是Java平台的标准版,主要用于开发桌面和服务端应用程序,它提供了Java语言的核心类库(如java.lang,java.util)、虚拟机和开发工具集。
-
Java EE(Enterprise Edition) :是Java平台的企业版,基于Java SE扩展了一系列用于Web服务、组件模型、消息服务的API和工具,如Servlet、JSP、EJB、JPA和JMS等,用于开发分布式、多层次的企业级应用程序。
-
Java ME(Micro Edition) :是Java平台的微型版,专为移动设备和嵌入式设备设计,是Java SE的精简版,不过由于没有真正流行起来,没有特殊需求,不建议学习Java ME。
三者关系如下:
┌───────────────────────────┐
│Java EE │
│ ┌────────────────────┐ │
│ │Java SE │ │
│ │ ┌─────────────┐ │ │
│ │ │ Java ME │ │ │
│ │ └─────────────┘ │ │
│ └────────────────────┘ │
└───────────────────────────┘
Java语言的应用领域:
- 企业级Web应用开发:后台开发
- 大数据开发
- Android应用程序开发:客户端开发
无论怎么选择,Java SE是基础,是整个Java平台的核心,是学习Java EE、大数据、Android开发的基石。
Java语言的特点
-
面向对象
⮚ 两个要素:类、对象
⮚ 三大特性:封装、继承、多态 -
健壮性
⮚ 吸收了C/C++语言的优点,去除了指针等影响健壮性的部分。
⮚ Java拥有自动垃圾回收机制(Garbage Collection),它提供一种系统级线程跟踪存储空间的分配情况,并在JVM空闲时,检查并释放那些可被释放的存储空间,这一过程是在Java程序运行过程中自动进行的,意味着程序员不需要手动管理内存分配和释放,并且程序员无法精确控制和干预。注:仍然可能会出现内存溢出、内存泄漏。 -
跨平台性
⮚ Java程序被编译器(javac)编译成与平台无关的字节码文件(.class文件),这些字节码文件可以被安装在任何平台上的Java虚拟机(JVM)解析执行,Java虚拟机机制屏蔽了底层运行平台的差别,从而实现“编写一次,到处运行”。
flowchart LR
subgraph UNIX
sub1(JVM for UNIX)
end
subgraph Windows
sub2(JVM for Windows)
end
subgraph Other["Other Platform"]
sub3(JVM for Other)
end
A[*.java] -->|编译| B(*.class)
B -->|执行| UNIX
B -->|执行| Windows
B -->|执行| Other
Java语言环境的搭建
-
JDK、JRE、JVM的概念
JDK:Java Development Kit,Java开发工具包
JRE:Java Runtime Environment,Java运行环境
JVM:Java virtual Machine,Java虚拟机 -
JDK、JRE、JVM之间的关系
JDK = JRE + 开发工具集(例:javac.exe、javadoc.exe等)
JRE = JVM + Java SE标准类库
JDK、JRE、JVM之间的关系如下图:flowchart TD subgraph JDK subgraph JRE JVM end end style JDK fill:#b7d8eb style JRE fill:#e0f8d8 -
安装JDK
①访问Java Downloads|Oracle,找到合适版本的JDK并下载,例:Java Archive Downloads-Java SE 8
②傻瓜式安装,一直点击“下一步”即可,建议安装路径不要有中文或空格等特殊符号
③正常情况下,安装完的JDK已包含JRE,但是为了后续使用Eclipse等开发工具不报错,当提示安装JRE时,建议也根据提示安装JRE -
配置环境变量Path
①打开:我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统环境变量。
②新建JAVA_HOME环境变量,变量值为JDK所在目录,例:D:\Java\jdk1.8.0_241。
③编辑Path环境变量,在变量值开始处加上java工具集所在目录(通过JAVA_HOME环境变量表示,例:%JAVA_HOME%\bin;),后面用“;”和其它值分隔开即可。
④WIN + R,输入“cmd”,打开DOS命令行界面,输入“java -version”,正常输出SDK配置信息,则表示配置成功。C:\Users\admin>java -version java version "1.8.0_241" Java(TM) SE Runtime Environment (build 1.8.0_241-b07) Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)Path环境变量:windows操作系统执行命令时所要搜寻的路径
为什么要配置Path:希望java开发工具(javac.exe,java.exe)在任何的文件路径下都可以执行成功。PS:之所以提取并配置环境变量
JAVA_HOME,是因为许多Java开发工具、构建工具(如Maven、Gradle)和集成开发环境(IDE,如Eclipse、IntelliJ IDEA)都依赖于JAVA_HOME来找到JDK。
开发体验 - HelloWorld
- 新建文本文件,命名为HelloWorld,并更改扩展名为.java,Helloworld.java文件用于存放java代码,称为源文件。
- 通过记事本编辑器打开HelloWorld.java文件,敲入以下代码并保存。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
- 打开DOS命令行界面,进入HelloWorld.java文件所在目录,通过javac命令对该文件进行编译,并得到HelloWorld.class字节码文件。
D:\demo>javac HelloWorld.java
- 通过java命令运行生成的class文件。
D:\demo>java HelloWorld
Hello,World!
- 常见问题及解决方法
D:\demo>java Test
错误:在类 Test 中找不到主方法,请将主方法定义为:
public static void main(String[] args)
D:\demo>javac Test1.java
javac:找不到文件:Test1.java
用法:javac<options><source files)
-help 用于列出可能的选项
D:\demo>java Test1
错误:找不到或无法加载主类 Test1
D:demo>javac Test.java
Test.java:1:错误:类Test1是公共的,应在名为 Test1.java 的文件中声明
public class Test1 {
^
1 个错误
D:\demo>javac Test.java
Test.java:3: 错误:需要”;
System.out .println("hello")
^
1 个错误
以上为可能出现的常见问题,总而言之,学习编程最容易犯的是语法错误。Java要求你必须按照语法规则编写代码,如果你的程序违反了语法规则,例如:忘记了分号、大括号、引号,或者拼错了单词等,java编译器都会报语法错误,尝试着去看懂编译器报告的错误信息,根据错误信息定位并解决问题。
- 总结第一个程序
① Java程序编写 - 编译 - 运行的过程:
⮚ 编写:我们将编写的Java代码保存在以“.java”结尾的源文件中。
⮚ 编译:使用javac.exe命令编译我们的源文件,格式:javac 源文件名.java。
⮚ 运行:使用java.exe解析运行我们的字节码文件,格式:java 类名
② 在一个Java源文件中可以声明多个class,但是,最多只能有一个类声明为public,因为编译要求声明为public的类的类名与源文件名相同。
③ Java应用程序的入口是main()方法,它有固定的书写格式:④ 每一个执行语句都以“;”结束。public static void main(String[] args) {}
⑤ Java语言严格区分大小写。
⑥ 编译Java源文件以后,会生成一个或多个字节码文件,字节码文件名与Java源文件中的类名相同。
注释(comment)
① Java规范的三种注释方式:
- 单行注释
- 多行注释
- 文档注释(Java特有)
② 注释声明格式
/**
* 文档注释[功能描述]
*
* @author 作者
* @date 创建时间
* @version 源文件版本
*/
public class Comment {
public static void main(String[] args) {
// 单行注释,以“//”标识,只能注释一行内容
/*
这是多行注释
可以注释多行内容
*/
}
}
③ 注释的作用
- 对所写程序进行说明,增强可读性,方便自己,方便他人。
- 调试所写代码。
④ 特点
- 单行注释和多行注释的注释内容不参与编译,即编译后生成的.class结尾的字节码文件中不包含注释掉的内容。
- 多行注释不允许嵌套多行注释或文档注释,文档注释同理。
- 文档注释的注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档,命令行如下:
javadoc -d mydoc -author -version HelloWorld.java
Java API文档
- 下载地址:Java Development Kit 8 Documentation
- 通过查阅Java API文档,可以了解如何使用Java SE类库的类以及类所包含的方法。