JVM与垃圾收集机制
Java语言的特点:跨平台性
原因:因为可以在每个不同平台下载jvm
核心机制-Java虚拟机
JVM是一个虚拟机的计算机,具有指令集并使用不同的储存区域。负责执行指令,管理数据,内存,寄存器。
对于不同的平台的平台,有不同的虚拟机
只有某平台提供了对应了java虚拟机,Java程序才可以在此平台运行
Java虚拟机机制屏蔽了底层运行平台的差别,实现了"一次编译,到处运行"
核心机制-垃圾回收
不在使用的内存空间应回收-垃圾回收
在C/C++等语言中,由程序员负责回收无用内存。
Java语言消除了程序员回收无用内存空间的责任,它提供了一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
Java程序还会出现内存泄漏和内存溢出问题吗?Yes!
JDK、JRE、JVM的关系
什么是JDK、JRE
JDK
JDK是提供Java开发人员使用的,其中包含了java的开发工具,也包括了JJRE。所以安装了JDK,就不用在单独安装JRE了
其中的开发工具:编译工具(javac.exe)打包工具(jar.exe)等
JRE
包括Java虚拟机和java程序所需要的核心类库等。如果想要运行一个开发的Java程序,计算机只想要安装JRE即可。
JDK、JRE、JVM的关系
JDK=JRE+开发工具集
JRE=JVM+Java SE标准类库
官方网址:
www.oracle.com
java.sun.com
安装JDK
傻瓜式安装,下一步即可。
建议:安装路径不要有中午或者空格等特殊符号
如果操作系统是64位的,软件尽量选择支持64位的
当前提示安装JRE时,正常在JDK安装的时候已经安装过了,但是为了后续使用Eclipse等开发工具不报错,建议也根据提示安装JRE。
JDK的安装
下载JDK
下载路径:
链接:Java Downloads | Oracle
根据电脑的系统选择对应的版本,其中x86表示32位系统,x64表示64位系统。
JDK安装步骤
双击下载下来的安装文件, 点下一步
这里我们可以选择安装路径,也可以默认安装。如果更改路径最好不要放在中文或者带空格的目录下,以免将来出现不必要的麻烦。
点击下一步就开始安装了
设置环境变量
桌面“我的电脑”右击,选择“属性”打开“系统控制面板”选择“高级系统设置”
进入之后选择高级系统设置,然后选择环境变量
在打开的环境变量对话框后,单击下方【系统变量】下的【新建】按钮;
然后输入JAVA_HOME,对应的变量值为你jdk安装的目录。
点击确定。
然后新建变量名:classpath 变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar点确定
然后在系统变量中找到名为“Path”的变量并双击,新建变量为 %JAVA_HOME%\bin
确定以后,分别输入“java”、“java -version”(java -version代表你安装的java的版本)和javac,若都正常运行则代表java已经正确安装。
验证jdk
点击【开始】菜单,收入cmd进入命令模式,输入“java -version”可以查看安装版本
注释
java规范有三种注释方式
单行注释
多行注释
文档注释
什么是单行注释和多行注释
//这是单行注释
/*
*这是多行注释
*/
单行注释和多行注释的作用
1.对说写的程序进行解释说明,增强可读性,方便自己,方便别人
2.调试所写的代码
单行注释和多行注释的特点:
单行注释和多行注释,注释了的内容不参与编译。换句话说,编译以后生产的.class结尾的字节码文件中不包含注释掉的文字或者信息
文档注释(java特有)
文档注释格式
/**
@author 指定java程序的作者
@version指定源文件的版本
**/
注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。
操作方式(小黑窗口)
javadoc -d myHello -author -version Helloava.java
多行注释使用的注意点
多行注释不能嵌套使用
Java API的文档
API是JAVA提供的基本编程接口
JAVA语言提供了大量的基础类,因此Oracle也为这些基础类提供了相应的API文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。
下载API
https://www.oracle.com/technetwork/javase/downloads/index.html
JDK8的下载地址:Java Development Kit 8 Documentation
JDK17离线下载地址为:https://www.oracle.com/java/technologies/javase-jdk17-doc-downloads.html
点击 Download
进行下载离线版本。
解压之后, 可以看到文档详细内容。 进入到 docs 目录。 index.html 就是文档主页。 直接用浏览器打开就好了。
打开之后的效果, 和上面在线的 API 文档是一致的。推荐使用该方式进行查看 API。用于开发和调试。
我们学习的时候, 不可能是从 API 文档的最顶部往下学习。 这样学习的效率太低。 就相当于你要背单词从 abandon 开始。然后再也走不出去。
从 JDK 9 开始,JDK 都是模块化的工程。 所以 Java 开发者就根据功能而已进行了模块化的划分。
学习任何一个技术, 首先就是要看技术的相关介绍, 并且是大局观的介绍。 只有这样你才能知道这个技术是什么, 能做什么, 能做成什么样。 看文档也是。
我们简单的翻译一下文档:
一开始说了本文档主要包含两部分的内容。
一部分是 Java SE,另一个部分是:JDK
Java SE
Java 平台标准版 (Java SE) API 定义了用于通用计算的核心 Java 平台。 这些 API 位于名称以 java 开头的模块中。
Java SE 主要包含以下模块:
JDK
Java 开发工具包 (JDK) API 特定于 JDK,需要注意的是该模块不一定在 Java SE 平台的所有实现中都可用。也就是说不同版本的 JDK 针对这些模块接口实现是不一致的。使用的时候需要注意。 这些 API 位于名称以 jdk 开头的模块中。
JDK 主要包含以下模块:
除了这两部分, 还有一部分是只有一个内容就是和智能卡相关的。
需要注意的是:当前描述适用于 JDK 11+ 的版本。 主要以 JDK 17 的版本进行讲解描述。
几种检索方式:
index: 这里可以查看指定字符开头的类和接口。
如果想看所有的。 可以使用 All Classes and Interfaces 。
打开之后的页面为:
这个时候, 可以通过右侧的 search 进行搜索。 如果只记得某个类的开头, 或者其中一部分。 可以使用这个快速的定位到你需要的内容上。
我们看一下之前错误的提示异常类。 NoClassDefFoundError
从这可以看到他是在 java.lang 的下面。 并且 java.lang 是在 java.base 的模块下, 一次记不住没关系, 多看多练几次就熟能生巧了。
第一个Java程序的总结
1.java程序编写-编译-运行的过程
编写:我们将编写的java代码保存在“.java”结尾的源文件中
编译:使用javac.exe命令编写我们的java源文件。格式:javac源文件名.java
运行:使用java.exe命令解释运行我们的字节码文件。格式:java 类名
2.在一个java源文件中可以声明多个class。但是,只能最多有一个类声明为public的。
而且要求声明为public的类的类名必须与源文件名相同。
3.程序的入口main()方法。格式都是固定的。
public static void main(String[]args){
//public static void main(String a[]){//arguments:参数
}
4.输出语句
System.out.print();//只输出数据
System.out.println();//先输出数据,然后换行
5.每一行的执行语句都会以";"结束
6.编译过程:编译以后,会生成一个或者多个字节码文件。字节码文件的文件名与java源文件中的类名相同。