人有不为也,而后可以有为
1. 运行机制
javac HelloWorld.java -- 此命令将 HelloWorld.java 文件编译成 HelloWorld.class 文件
java HelloWorld -- 此命令将 HelloWorld.class 文件解释并执行
2. 环境搭建
2.1 JVM、JRE、JDK区别
JVM :英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心,具体的下文会详细说明。
JRE :英文名称(Java Runtime Environment),我们叫它:Java 运行时环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。如果你只是为了运行一下 java 程序的话,那么只用装 JRE 就可以了。
JDK :英文名称(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。
- bin:最主要的是编译器
- include:java 和 JVM 交互的头文件
- lib:类库
- jre:java 运行环境
显然,这三者的关系是:一层层的嵌套关系。JDK>JRE>JVM
JDK = JRE + 开发工具集
JRE = Java 系统类库 + JVM
2.2 Oracle JDK & OpenJDK
总结:复制参考 链接
- Oracle JDK 大概每 6 个月发一次主要版本,而 OpenJDK 版本大概每三个月发布一次。但这不是固定的,我觉得了解这个没啥用处。详情参见
- OpenJDK 是一个参考模型并且是完全开源的,而 Oracle JDK 是 OpenJDK 的一个实现,并不是完全开源的;
- Oracle JDK 比 OpenJDK 更稳定。OpenJDK 和 Oracle JDK 的代码几乎相同,但 Oracle JDK 有更多的类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择 Oracle JDK,因为它经过了彻底的测试和稳定。某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到 Oracle JDK 就可以解决问题;
- 在响应性和 JVM 性能方面,Oracle JDK 与 OpenJDK 相比提供了更好的性能;
- Oracle JDK 不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;
- Oracle JDK 使用 BCL/OTN 协议获得许可,而 OpenJDK 根据 GPL v2 许可获得许可。
2.3 下载与安装
为何现在使用 Java 8 的人还是很多,这个 链接 讲的很清晰。
"长期支持的版本"(Long Term Support release,简称LTS),该版本会提供为期三年的支持。Java 8 是一个LTS,当前的 LTS 是 Java 11,下一个应该是 Java 17。
所以就目前来说,可以先以 Java 8 进行学习,后面可以针对新版本的特性,再进行学习。
下载JDK:oracle 官网、目前 oracle 下载需要登陆操作,可以在网上找个登陆账户。也可以在这个地址下载:www.codebaoku.com/jdk/jdk-ind...
安装过程比较简单,下载完毕,一直下一步下一步即可
注:对于 Windows 环境可以不勾选,安装公共 JRE,因为 JDK 中已经包含了
2.4 Mca 环境变量配置
如果是第一次配置环境变量,可以使用touch .bash_profile
创建一个 .bash_profile 的隐藏配置文件
如果文件已存在,可以使用 open -e .bash_profile
命令打开文件
open 参数 -e 的作用是 Opens with TextEdit. 使用文本编辑器打开
打开 .bash_profile 后输入一下内容
bash
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:
export JAVA_HOME
export PATH
输入完毕后保存,然后执行 source .bash_profile
使配置生效
输入java -version
查看 jdk 版本
可以使用 echo $PATH
查询环境变量
PATH 的语法为如下
bash
#中间用冒号隔开
export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
分别解释下每行的意思
bash
# 配置 JAVA_HOME 地址,也就是 JDK 的安装目录下的 Home 目录
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
# 表示在保留原来的 $PATH 环境变量的基础上,再增加 $JAVA_HOME/bin 这个路径作为新的 $PATH 环境变量
PATH=$JAVA_HOME/bin:$PATH:
Linux export 命令用于设置或显示环境变量
export JAVA_HOME
export PATH
2.5 配置 Windows 环境变量
找的 Windows 环境变量,点击新建系统环境变量,输入变量名,变量值(具体的 jdk 安装路径),点击确定
- 变量名:JAVA_HOME
- 变量值:C:\Java\jdk1.8.0_311
- 然后找的 PATH 双击/编辑,新建
%JAVA_HOME%\bin
点击确认,后配置完毕 - 验证是否成功
2.6 classpath 配置说明
目前发现网上很多的博客都会让配置 classpath 环境变量,如下面的两行的几行内容,首先我们先弄明白这个 classpath 的作用是什么,作用是指定类搜索路径
- mac 系统
bash
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA\_HOME/lib/dt.jar:
export CLASSPATH
- Windows 系统
bash
.;%Java\_Home%\bin;%Java\_Home%\lib\dt.jar;%Java\_Home%\lib\tools.jar
解释一下上面两行内容的作用
Java_Home 代表了 jdk 的路径
- dt.jar是关于运行环境的类库,主要是用于swing的包,如果不使用可以不配置
- tools.jar是工具类库,它在编译和运行一个类时被使用
我们在配置 classpath 后,系统会根据我们所配置的 classpath 加载类
例如:在我们使用 javac 命令编译程序时,系统加载 tools.jar 其实就封装了下面这样一条命令
javac XXX.java
java -Classpath=%JAVA_HOME%\lib\tools.jar xx.xxx.Main XXX.java
当然 tools 的功能可不止这一点,但是确实它为我们提供了很多便利
在 JDK1.5 以后,classpath 并不是必须配置了,在 JDK1.5 之前,是没有办法在当前目录下加载类的(找不到 JDK目录下lib文件夹中的.jar文件),所以我们需要通过配置 classpath,但 JDK1.5 之后,JRE 能自动搜索目录下类文件,并且加载 dt.jar 和 tool.jar 的类
官方文档解释(JDK Tools and Utilities)
The class path tells the JDK tools and applications where to find third-party and user-defined classes that are not extensions or part of the Java platform. See The Extension Mechanism at
类路径告诉JDK工具和应用程序在哪里可以找到第三方和用户定义的类,这些类既不是Java平台的扩展,也不是Java平台的一部分。参见扩展机制
If you upgrade from an earlier release of the JDK, then your startup settings might include CLASSPATH settings that are no longer needed. You should remove any settings that are not application-specific, such as classes.zip. Some third-party applications that use the Java Virtual Machine (JVM) can modify your CLASSPATH environment variable to include the libraries they use. Such settings can remain.
如果您从JDK的早期版本升级,那么您的启动设置可能包括不再需要的类路径设置。您应该删除任何与应用程序无关的设置,比如classes.zip。一些使用Java虚拟机(JVM)的第三方应用程序可以修改类路径环境变量,以包含它们使用的库。这样的设置可以保留。
You can change the class path by using the -classpath or -cp option of some Java commands when you call the JVM or other JDK tools or by using the CLASSPATH environment variable. See JDK Commands Class Path Options. Using the -classpath option is preferred over setting the CLASSPATH environment variable because you can set it individually for each application without affecting other applications and without other applications modifying its value. See CLASSPATH Environment Variable.
在调用JVM或其他JDK工具时,可以使用一些Java命令的-classpath或-cp选项,或者使用CLASSPATH环境变量,来更改类路径。参见JDK命令类路径选项。使用-classpath选项优于设置CLASSPATH环境变量,因为您可以为每个应用程序单独设置它,而不影响其他应用程序,也不需要其他应用程序修改它的值。参见CLASSPATH环境变量。
通过官方的文档说明我们可以看到,dt.jar 和 tool.jar 这两种属于 java 平台自身的包就不需要添加到 classpath 中,只有一些第三方类或者自定义类需要,也并不推荐使用配置 classpath 的方法,更推荐使用 -classpath 选项
总结:在 JDK1.5 之后的版本,配置 Java 环境变量的时候不再需要配置 classpath,只需要配置 Java_Home 以及 path 即可!目前网上的资料过于陈旧
上述内容摘自这个链接 链接
3. HelloWorld.java
java
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World");
}
}
4. Notepad++ 配置
为了前期多练练,选择 Notepad++ 作为编辑器,Notepad++ 安装插件后可以直接编译运行 java 代码
- 在 Notepad++ 安装 NppExce 插件
- 在 Notepad++ 里面配置环境变量:选择 NppExce 下的 Execut 选项,输入以下环境变量,可保存为 "JAVA 编译加执行"
- 注意:需要勾选Follow $(CURRENT_DIRECTORY) ,不勾选编译时会提示找不到文件
- 编写代码完毕可以直接按 F6 快捷键,点击 OK 直接编译运行代码
bash
NPP_SAVE
javac.exe "$(FILE_NAME)"
java.exe "$(NAME_PART)"
5. 注释(comment)
Java 支持三种注释方式:
- 单行注释
- 格式://
- 多行注释
- 格式:/* 注释文字 */
- 文档注释
- 格式:/** 开始 */ 结束
java
/**
* @author Test Name
* @version 1.0
*/
public class HelloWorld {
// 这是个单行注释文字
public static void main(String[] args) {
/*
这是第二个 Java 程序
它将输出字符串 Hello World~!
*/
System.out.println("Hello World~!");
}
}
5.1 文档注释
在开始的 / ** 之后,第一行或几行是关于类、变量和方法的主要描述,之后,你可以包含一个或多个各种各样的 @ 标签,下面是 javadoc 工具软件可以识别的标签及说明,摘自菜鸟教程,可能不是最新的
注:很多注释都是可以定义的,后期开发工具选用 IDEA ,可以自定义成模板的形式,每次通过快捷键自动输出在方法中,节省时间,也使代码更加规范,具体设定方式在后期文档中说明
标签 | 描述 | 示例 |
---|---|---|
@author | 标识一个类的作者 | @author description |
@deprecated | 指名一个过期的类或成员 | @deprecated description |
{@docRoot} | 指明当前文档根目录的路径 | Directory Path |
@exception | 标志一个类抛出的异常 | @exception exception-name explanation |
{@inheritDoc} | 从直接父类继承的注释 | Inherits a comment from the immediate surperclass. |
{@link} | 插入一个到另一个主题的链接 | {@link name text} |
{@linkplain} | 插入一个到另一个主题的链接,但是该链接显示纯文本字体 | Inserts an in-line link to another topic. |
@param | 说明一个方法的参数 | @param parameter-name explanation |
@return | 说明返回值类型 | @return explanation |
@see | 指定一个到另一个主题的链接 | @see anchor |
@serial | 说明一个序列化属性 | @serial description |
@serialData | 说明通过writeObject( ) 和 writeExternal( )方法写的数据 | @serialData description |
@serialField | 说明一个ObjectStreamField组件 | @serialField name type description |
@since | 标记当引入一个特定的变化时 | @since release |
@throws | 和 @exception标签一样. | The @throws tag has the same meaning as the @exception tag. |
{@value} | 显示常量的值,该常量必须是static属性。 | Displays the value of a constant, which must be a static field. |
@version | 指定类的版本 | @version info |
5.2 javadoc 输出什么
javadoc 工具将你的 Java 成员源代码作为输入,输出一些包含你程序注释的 HTML 文件,每个类的信息都将在独自的 HTML 文件里,javadoc 也可以输出继承的树形结构和索引,具体 javadoc 工具格式可以通过 javadoc -help
获取帮助信息。
通过运行 javadoc 命令输出程序的 HTML 文档,如下图所示,运行完毕会生成 mydoc 文件夹,里面就是输出的 HTML 文档。
6. Mac安装多个Java版本
JDK默认安装在/Library/Java目录下,打开访达,通过shift+command+g直达文件,如果安装成功,/Library/Java/JavaVirtualMachines目录下,会有两个JDK:
接下来,打开终端,输入vim ~/.bash_profile, 编辑配置文件
在配置文件中,配置成以下内容,通过指令 jdk8 / jdk17 进行版本的切换
bash
JAVA_8_HOME=$(/usr/libexec/java_home -v 1.8.0)
JAVA_17_HOME=$(/usr/libexec/java_home -v 17)
# 设置默认JDK版本
export JAVA_HOME=$JAVA_8_HOME
# 配置alias命令动态切换JDK版本
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"
alias jdk17="export JAVA_HOME=$JAVA_17_HOME"