Java 基础 基本语法——尚硅谷学习笔记
第 1 章 Java 语言概述
1.1 Java 基础阶段的学习内容
1.1.1 第 1 阶段:Java 基本语法
Java 概述、关键字、标识符、变量、运算符、流程控制(条件判断、选择结构、循环结构)、IDEA、数组。
1.1.2 第 2 阶段:Java 面向对象编程
-
类及类的内部成员。
-
面向对象的三大特征 :封装、继承、多态。
-
其它关键字的使用。
1.1.3 第 3 阶段:Java 语言的高级应用
异常处理、多线程、IO 流、集合框架、反射、网络编程、新特性、其它常用的 API 等。
书籍推荐:《Java 核心技术》、《Effective Java》、《Java 编程思想》。
1.2 软件开发相关内容
1.2.1 计算机的构成
硬件 + 软件。
1.2.2 软件
软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。
-
系统软件,即操作系统,Windows、Mac OS 、Linux、Android、ios。
-
应用软件,即 OS 之上的应用程序。
1.2.3 人机交互方式
-
图形化界面(Graphical User Interface,GUI)。
-
命令行交互方式(Command Line Interface,CLI)。
熟悉常用的 DOS(Disk Operating System,磁盘操作系统)命令:
-
进入和回退
-
盘符名称: 盘符切换。E:回车,表示切换到 E 盘。
-
dir 列出当前目录下的文件以及文件夹。
-
cd 目录 进入指定目录。
-
cd .. 回退到上一级目录。
-
cd \ 或 cd / 回退到盘符目录。
-
-
增、删
-
md 文件目录名 创建指定的文件目录。
-
rd 文件目录名 删除指定的文件目录(如文件目录内有数据,删除失败)。
-
-
其它
-
cls 清屏。
-
exit 退出命令提示符窗口。
-
↑ ↓ 调阅历史操作命令。
-
1.2.4 计算机编程语言
-
语言的分代:
-
第 1 代:机器语言
-
第 2 代:汇编语言
-
第 3 代:高级语言
-
-
面向过程的语言:C
-
面向对象的语言:C++、Java、C#、Python、Go、JavaScript
没有“最好”的语言,只有在特定场景下相对来说,最适合的语言而已。
1.3 Java 概述
1.3.1 Java 发展史
-
几个重要的版本:1996 年,发布 JDK1.0
-
里程碑式的版本:JDK5.0、JDK8.0(2014 年发布)
-
JDK11(LTS)、JDK17(LTS)long term support
-
1.3.2 Java 之父
詹姆斯·高斯林
1.3.3 Java 具体的平台划分
-
J2SE ——> JavaSE(Java Standard Edition)标准版
-
J2EE ——> JavaEE(Java Enterprise Edition)企业版
-
J2ME ——> JavaME(Java Micro Edition)小型版
Java 目前主要的应用场景:JavaEE 后端开发、Android 客户端的开发、大数据开发。
1.4. Java 环境的搭建
1.4.1 JDK、JRE、JVM 的基本概念
-
JDK(Java Development Kit):是 Java 程序开发工具包,包含 JRE 和开发人员使用的工具。
-
JRE(Java Runtime Environment) :是 Java 程序的运行时环境,包含 JVM 和运行时所需要的核心类库。
-
Java 虚拟机(Java Virtual Machine 简称 JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,它是 Java 最具吸引力的特性之一。
1.4.2 JDK、JRE、JVM 三者之间的关系
-
JDK = JRE + 开发工具集(例如 Javac 编译工具等)。
-
JRE = JVM + Java SE 标准类库。
1.4.3 安装 JDK
-
JDK 的下载:Oracle 官网(https://www.oracle.com)
-
JDK 的安装: 安装 jdk11 和 jdk17。
-
环境变量的配置: 配置 JAVA_HOME + path。
1.5. HelloWorld
1.5.1 开发步骤
Java 程序开发三步骤:编写、编译、运行。
-
将 Java 代码编写到扩展名为 .java 的源文件中。
-
通过 javac.exe 命令对该 java 文件进行编译,生成一个或多个字节码文件。格式:javac 源文件名.java
-
通过 java.exe 命令对生成的 class 文件进行运行。格式: java 字节码文件名
1.5.2 开发说明
-
格式:
类 { 方法 { 语句; } }
-
代码:
HelloWorld.java
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
-
说明:
① class:关键字,表示“类”,后面跟着类名。 ② main() 方法的格式是固定的。表示程序的入口。 ③ Java 程序,是严格区分大小写的。 ④ 从控制台输出数据的操作: System.out.println() : 输出数据之后,会换行。 System.out.print() : 输出数据之后,不会换行。 ⑤ 每一行执行语句必须以;结束。 ⑥ 编译以后,会生成 1 个或多个字节码文件。每一个字节码文件对应一个 Java 类,并且字节码文件名与类名相同。 ⑦ 我们是针对于字节码文件对应的 Java 类进行解释运行的。 ⑧ 一个源文件中可以声明多个类,但是最多只能有一个类使用 public 进行声明,且要求声明为 public 的类的类名与源文件名相同。
1.6 注释
源文件中用于解释、说明程序的文字就是注释。
1.6.1 Java 中的注释的种类
单行注释、多行注释、文档注释(Java 特有)。
1.6.2 单行注释
// 这是单行注释。
1.6.3 多行注释
/* 这是多行注释。 */
1.6.4 文档注释
/** @author 指定 Java 程序的作者 @version 指定源文件的版本 */
文档注释内容可以被 JDK 提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
1.7 API 文档
API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。
Java 语言提供了大量的基础类,因此 Oracle 也为这些基础类提供了相应的说明文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。
Java API 文档,即为 JDK 使用说明书、帮助文档。
1.8 Java 核心机制:JVM
1.8.1 Java 语言的优点
-
跨平台性:
-
原理:只要在需要运行 java 应用程序的操作系统上,先安装一个 Java 虚拟机(JVM ,Java Virtual Machine) 即可,由 JVM 来负责 Java 程序在该系统中的运行。
-
-
面向对象性: 面向对象是一种程序设计技术,非常适合大型软件的设计和开发。面向对象编程支持封装、继承、多态等特性,让程序更好达到高内聚,低耦合的标准。
-
健壮性: 吸收了 C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制。
-
安全性高: Java 适合于网络/分布式环境,需要提供一个安全机制以防恶意代码的攻击。如:安全防范机制(ClassLoader 类加载器),可以分配不同的命空间以防替代本地的同名类、字节代码检查。
-
-
简单性: Java 就是 C++ 语法的简化版,我们也可以将 Java 称之为“C++ - -”。比如:头文件,指针运算,结构,联合,操作符重载,虚基类等。
-
高性能: Java 最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java 语言本身发展中通过虚拟机的优化提升了几十倍运行效率。比如,通过 JIT(JUST IN TIME)即时编译技术提高运行效率。
-
1.8.3 JVM 功能说明
JVM(Java Virtual Machine ,Java 虚拟机):是一个虚拟的计算机,是 Java 程序的运行环境。JVM 具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。
每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也就是 Java 为什么能够跨平台的原因了 ,当一个程序从开始运行,这时虚拟机就开始实例化了,多个程序启动就会存在多个虚拟机实例。程序退出或者关闭,则虚拟机实例消亡,多个虚拟机实例之间数据不能共享。
功能 1:实现 Java 程序的跨平台性 。
我们编写的 Java 代码,都运行在 JVM 之上。正是因为有了 JVM,才使得 Java 程序具备了跨平台性
ps:linux,mac,win
功能 2:自动内存管理(内存分配、内存回收)
-
Java 程序在运行过程中,涉及到运算的数据的分配、存储等都由 JVM 来完成。
-
Java 消除了程序员回收无用内存空间的职责。提供了一种系统级线程跟踪存储空间的分配情况,在内存空间达到相应阈值时,检查并释放可被释放的存储器空间。
-
GC 的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄漏。
1.9 企业真题
-
一个“.java”源文件中是否可以包括多个类?有什么限制? 答: 一个源文件中可以声明多个类,但是最多只能有一个类使用 public 进行声明。 且要求声明为 public 的类的类名与源文件名相同。
-
Java 的优势有哪些? 答:跨平台型、安全性高、简单性、高性能、面向对象性、健壮性。
-
常用的几个命令行操作都有哪些? 答: ① 盘符名称: 盘符切换。E:回车,表示切换到 E 盘。 ② dir 列出当前目录下的文件以及文件夹。 ③ cd 目录 进入指定目录。 ④ cd .. 回退到上一级目录。 ⑤ cd \ 或 cd / 回退到盘符目录。 ⑥ md 文件目录名 创建指定的文件目录。 ⑦ rd 文件目录名* 删除指定的文件目录(如文件目录内有数据,删除失败)。 ⑧ cls 清屏。 ⑨ exit 退出命令提示符窗口。 ⑩ ↑ ↓ 调阅历史操作命令。
-
Java 中是否存在内存溢出、内存泄漏?如何解决?举例说明。 答:Java 中存在内存溢出和内存泄漏问题。
内存溢出指的是程序申请的内存超出了 JVM 所能分配的内存大小,导致程序崩溃。解决方法包括: ① 增加 JVM 内存限制:通过修改 JVM 启动参数,增加内存限制,例如 -Xmx。 ② 优化代码:检查代码中是否存在大量的无用对象或者内存泄漏,及时释放资源。 ③ 分析内存使用情况:使用工具分析内存使用情况,找到内存占用过多的地方,及时优化。 内存泄漏指的是程序中的对象在使用完毕后没有及时释放,导致内存占用不断增加。解决方法包括: ① 手动释放资源:在代码中手动释放资源,例如关闭文件、数据库连接等。 ② 使用 try-with-resources:使用 try-with-resources 管理资源,确保资源被及时释放。 ③ 检查代码:检查代码中是否存在内存泄漏的地方,及时优化。例如,如果在循环中创建对象并没有及时释放,就会导致内存泄漏。
-
如何看待 Java 是一门半编译半解释型的语言? 答:Java 是一门半编译半解释型的语言,这意味着 Java 具有一定的优点和缺点。
优点: ① 跨平台性强:Java 的半编译半解释型特性使得它能够在不同的操作系统上运行,只需在不同平台上安装 Java 虚拟机即可。 ② 安全性高:Java 的编译过程中会进行严格的类型检查和边界检查,减少了程序出错的可能性,同时 Java 还具有内存自动管理机制,防止了一些常见的安全漏洞。 ③ 灵活性好:Java 的半编译半解释型特性使得它能够在运行时进行动态加载和更新,增强了程序的灵活性。 缺点: ① 执行效率低:由于 Java 是半编译半解释型的语言,需要在运行时进行解释和编译,导致执行效率较低。 ② 内存占用大:Java 在运行时需要加载虚拟机和类库,占用的内存较大。 ③ 资源消耗多:Java 的编译和解释过程需要占用较多的 CPU 和内存资源,对于一些资源受限的设备来说可能会造成困扰。
综上所述,Java 的半编译半解释型特性使得它具有跨平台性和安全性等优点,但也存在执行效率低、内存占用大和资源消耗多等缺点。在实际应用中需要根据具体情况进行权衡和选择。