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 中国

1736907768065

选择合适的版本后安装即可,

安装时一定要记住java的安装路径。

安装好java后就是按照惯例的配置环境变量,如果是使用win11的朋友我强烈推荐一款由微软官方开发的拓展工具:Microsoft PowerToys

1736908044515

不仅可以方便的配置环境变量,还提供了一系列方便的功能,比如:

  • 高级粘贴:将粘贴的内容自动转化为json等计算机常用格式
  • 快速查找鼠标
  • 文件批量重命名

我们需要先创建一个环境变量:JAVA_HOME

1736911162670

我们在system中的path中添加%jAVA_HOME%\bin路径

1736911227000

经过实测,如果不创建JAVA_HOME这一环境变量,直接在path中添加 C:\Program Files\Java\jdk-23\bin 这一绝对路径,虽然在vscode中可以直接运行java程序,但是当你通过手动编译运行时

1
2
javac HelloWorld.java
java HelloWorld

就会报错如下:

1
2
错误: 找不到或无法加载主类 HelloWord
原因: java.lang.ClassNotFoundException: HelloWord

接下来想要在vscode中运行java文件,只需要再安装一些扩展即可:

  1. 1736908981798
  2. 1736908994168

安装完第一个扩展和第二个扩展包后,就可以在vscode中运行java文件了。

可以用下面代码进行测试:

1
2
3
4
5
6
7
8
public class HelloWorld {
/* 第一个Java程序
* 它将输出字符串 Hello World
*/
public static void main(String[] args) {
System.out.println("Hello World"); // 输出 Hello World
}
}

classpath

在了解classpath环境变量之前,或许我们需要先了解一下java大致的运行流程:

  1. 编写java代码,存放在 .java文件中
  2. 编译java代码为字节码,存放在 .class 文件中
  3. JVM将.class 中的字节码加载到内存中,并且将字节码转化为对应平台的机器码

字节码(Bytecode)

字节码是一种介于机器码于高级语言代码的中间表示形式,它是 Java 源代码(.java 文件)经过编译器(javac)编译后生成的机器无关的代码,存储在 .class 文件中。字节码是为 Java 虚拟机(JVM)设计的,而不是直接为任何具体硬件或操作系统服务。

这一特性使得java编译后的字节码,可以在任何一个装有JVM的机器上运行,无需考虑机器的处理架构,或处理器指令集不同等硬件层面不同,由JVM负责将字节码转化为机器对应的字节码,使得可以在任何平台上运行。

现在回到正题,java中的classpath究竟是什么?

classpath环境变量用于告诉java解释器,应该在硬盘中的哪里加载 .class中的字节码,便于我们将所有编译生成的字节码与源代码分开放置,便于文件管理。

我们以上面给出的HelloWorld程序为例:

我们创建如下的项目目录:

1736946626616

使用代码:

1
javac HelloWorld\HelloWorld.java 

编译java文件,生成字节码HelloWorld.class

1736946692499

此时两个文件都在工作区中的HelloWorld目录中,此时我们直接输入

1
java HelloWorld

然后我们在终端中输入

1
2
cd HelloWorld
java HelloWorld

显示运行成功:

1736948280006

然后我们将class放到ClassPath文件夹下:

1736948356648

再次运行会显示报错:

1736948384638

这时我们就需要添加classpath环境路径:

通过参数 -cp + 绝对路径 来添加classpath参数

1736948502984

如果不显式指定 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)

命名方法:

  1. 小驼峰命名法:首字母小写,后续单词首字母大写(userName)
  2. 大驼峰命名法:包括第一个单词在内,每个单词的首字母都大写。(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
    2
    numbers = new int[5];	//创建数组
    numbers = new int[] {1, 2, 3, 4, 5}; //创建并初始化数组

通过索引访问数组元素,下标从0开始。

类(Classes)和对象(Objects)

:类是一种蓝图或者模板,用于创建对象。它定义了对象所具有的属性(数据)和行为(方法)。

1
2
3
4
5
6
7
8
9
10
public class 类名 {
// 属性 (成员变量)
数据类型 属性名;

// 方法 (成员函数)
public 返回值类型 方法名(参数列表) {
// 方法体
}
}

对象:对象是类的实例。是根据类这个模板创建出来的具体实例。

1
2
类名 name = new 类名(参数1,参数2)
ClassName name = new ClassName(parameter1, parameter2);

方法

定义方法:

1
2
3
4
5
public 返回值类型 方法名(参数列表) {
// 方法体
return 返回值;
}

调用方法: 方法名(参数列表);

方法重载: 同一个类中可以有多个方法名相同,但参数列表不同的方法 (方法签名不同)。


java入门
http://blog.ulna520.com/2025/01/15/java入门_20250115_094123/
Veröffentlicht am
January 15, 2025
Urheberrechtshinweis