java入门
每日一言
Isn’t it lonely when you wake up and you don’t hear any voices? – Nako Oshimizu
from Hanasaku Iroha: Blossoms for Tomorrow
环境配置
首先我们到官网下载JDK:Java Downloads | Oracle 中国
选择合适的版本后安装即可,
安装时一定要记住java的安装路径。
安装好java后就是按照惯例的配置环境变量,如果是使用win11的朋友我强烈推荐一款由微软官方开发的拓展工具:Microsoft PowerToys 。
不仅可以方便的配置环境变量,还提供了一系列方便的功能,比如:
- 高级粘贴:将粘贴的内容自动转化为json等计算机常用格式
- 快速查找鼠标
- 文件批量重命名
我们需要先创建一个环境变量:JAVA_HOME
我们在system中的path中添加%jAVA_HOME%\bin路径
经过实测,如果不创建JAVA_HOME这一环境变量,直接在path中添加 C:\Program Files\Java\jdk-23\bin
这一绝对路径,虽然在vscode中可以直接运行java程序,但是当你通过手动编译运行时
1 |
|
就会报错如下:
1 |
|
接下来想要在vscode中运行java文件,只需要再安装一些扩展即可:
安装完第一个扩展和第二个扩展包后,就可以在vscode中运行java文件了。
可以用下面代码进行测试:
1 |
|
classpath
在了解classpath环境变量之前,或许我们需要先了解一下java大致的运行流程:
- 编写java代码,存放在
.java
文件中 - 编译java代码为字节码,存放在
.class
文件中 - JVM将.
class
中的字节码加载到内存中,并且将字节码转化为对应平台的机器码
字节码(Bytecode)
字节码是一种介于机器码于高级语言代码的中间表示形式,它是 Java 源代码(.java
文件)经过编译器(javac
)编译后生成的机器无关的代码,存储在 .class
文件中。字节码是为 Java 虚拟机(JVM)设计的,而不是直接为任何具体硬件或操作系统服务。
这一特性使得java编译后的字节码,可以在任何一个装有JVM的机器上运行,无需考虑机器的处理架构,或处理器指令集不同等硬件层面不同,由JVM负责将字节码转化为机器对应的字节码,使得可以在任何平台上运行。
现在回到正题,java中的classpath究竟是什么?
classpath环境变量用于告诉java解释器,应该在硬盘中的哪里加载 .class
中的字节码,便于我们将所有编译生成的字节码与源代码分开放置,便于文件管理。
我们以上面给出的HelloWorld程序为例:
我们创建如下的项目目录:
使用代码:
1 |
|
编译java文件,生成字节码HelloWorld.class
此时两个文件都在工作区中的HelloWorld目录中,此时我们直接输入
1 |
|
然后我们在终端中输入
1 |
|
显示运行成功:
然后我们将class放到ClassPath文件夹下:
再次运行会显示报错:
这时我们就需要添加classpath环境路径:
通过参数 -cp + 绝对路径
来添加classpath参数
如果不显式指定 CLASSPATH
,JVM 会默认将当前目录(.
)作为类路径。
基础语法
基本数据类型(Primitive Data Types)
- 整数类型:
byte
: 8 位有符号整数 (-128 到 127)short
: 16 位有符号整数 (-32768 到 32767)int
: 32 位有符号整数 (-2147483648 到 2147483647)long
: 64 位有符号整数 (-9223372036854775808 到 9223372036854775807)
- 浮点数类型:
float
: 32 位单精度浮点数double
: 64 位双精度浮点数
- 字符类型:
char
: 16 位 Unicode 字符 (用单引号括起来,如 ‘a’, ‘1’, ‘中’)
- 布尔类型:
boolean
: 表示 true 或 false
java中并没有直接提供无符号数的表示
变量(Variables)
变量的声明方式与c或c++相似:
- 声明变量:
数据类型 变量名;
例如:int age;
- 初始化变量:
数据类型 变量名 = 值;
例如:int age = 30;
变量命名规则:
- 必须以字母、下划线(_)、美元符号($),开头
- 后面可以跟字母、数字、下划线或美元符号
- 区分大小写 (age 和 Age 是不同的变量)
- 不能使用 Java 的关键字 (如
int
,class
,public
)
命名方法:
- 小驼峰命名法:首字母小写,后续单词首字母大写(userName)
- 大驼峰命名法:包括第一个单词在内,每个单词的首字母都大写。(UserName)
运算符(Operators)
java的运算符表示与c或c++完全相同:
- 算术运算符:
+
,-
,*
,/
,%
(取模) - 赋值运算符:
=
(例如:age = 30;
),+=
,-=
,*=
,/=
,%=
(例如:age += 5;
等价于age = age + 5;
) - 比较运算符:
==
(等于),!=
(不等于),>
,<
,>=
,<=
- 逻辑运算符:
&&
(逻辑与),||
(逻辑或),!
(逻辑非) - 位运算符:
&
(按位与),|
(按位或),^
(按位异或),~
(按位取反),<<
(左移),>>
(右移),>>>
(无符号右移) - 三元运算符:
条件 ? 表达式1 : 表达式2
(例如:int max = (a > b) ? a : b;
) - 自增运算符:++(自增1),–(自减1),例如:age++,++age,其使用区别与c相同
但是java中没有c或c++中的逗号表达式
控制流程(Control Flow)
- 条件语句:
if
语句:if (条件) { 代码块; }
if-else
语句:if (条件) { 代码块1; } else { 代码块2; }
if-else if-else
语句:if (条件1) { 代码块1; } else if (条件2) { 代码块2; } else { 代码块3; }
switch
语句:switch (表达式) { case 值1: 代码块1; break; case 值2: 代码块2; break; ... default: 代码块n; }
- 循环语句:
for
循环:for (初始化; 条件; 更新) { 代码块; }
while
循环:while (条件) { 代码块; }
do-while
循环:do { 代码块; } while (条件);
- 跳转语句:
break
: 跳出循环或switch
语句continue
: 跳过当前循环的剩余部分,进入下一次循环return
: 从方法中返回
文档注释(Comments)
单行注释:
1
// 这是 Java 中的单行注释
多行注释:
1
2
3
4/*
这是 Java 中的
多行注释
*/文档注释:
1
2
3
4
5/**
* 这是 Java 中的文档注释。
* 它可以用于生成 API 文档。
* @param args 命令行参数
*/文档注释可以使用特定的标签 (tag) 来提供结构化的信息,例如:
@author
:作者@version
:版本号@param
:参数描述@return
:返回值描述@throws
:抛出的异常@see
:相关链接@deprecated
:标记为已过时
数组(Arrays)
声明数组:
1
int[] numbers;
创建数组:
1
2numbers = new int[5]; //创建数组
numbers = new int[] {1, 2, 3, 4, 5}; //创建并初始化数组
通过索引访问数组元素,下标从0开始。
类(Classes)和对象(Objects)
类:类是一种蓝图或者模板,用于创建对象。它定义了对象所具有的属性(数据)和行为(方法)。
1 |
|
对象:对象是类的实例。是根据类这个模板创建出来的具体实例。
1 |
|
方法
定义方法:
1 |
|
调用方法: 方法名(参数列表);
方法重载: 同一个类中可以有多个方法名相同,但参数列表不同的方法 (方法签名不同)。