这是一个面向有编程基础,又急需快速上手java的人群的教程。
这个大章节是入门篇,将会使用最简单最高效的方式让你学会如何编写java代码,从零开始到成为一名及格的cruder!
java版本选择
截止到发稿日,java最高版本是26。其中目前的LTS版本分别为8,11,17,21,25。
对于这些版本不得不说的一个点是,版本已经发展这么多了,但是8依然很坚挺。
首先是因为,java8可以说是一个重要分水岭版本,引入了lambda表达式、Stream流、函数式编程等特性,使java从传统的命令式编程逐步向函数式编程范式转变。
从目前国内的情况来看,很多公司仍然在使用java8进行开发,这主要是由于历史项目沉淀较多、升级成本较高,以及生态和框架对java8的支持已经非常稳定。
当然新版本也带来了很多的优化和新特性,比如G1垃圾收集器的持续优化、ZGC等低延迟垃圾回收器,以及虚拟线程的引入,一些语法糖的引入等。不过这些都是后话。
这个教程将会以java8来写。因为搞懂了最基本的java8,新版本的java只需要学习一下新特性就可以运用自如了。
安装java
一笔带过了,网上一大堆,下面是gemini写的教程,看着装吧:
展开查看安装教程
Windows 篇
1. 下载与安装
- 前往 Oracle 官网 或 Adoptium 下载 Windows 版安装包(推荐
.msi或.exe)。 - 运行安装程序,建议保持默认安装路径:
C:\Program Files\Java\jdk-<版本号>。
2. 配置环境变量
- 打开设置:右键点击“此电脑” -> 属性 -> 高级系统设置 -> 环境变量。
- 新建系统变量
JAVA_HOME:- 点击“系统变量”下的“新建”。
- 变量名:
JAVA_HOME - 变量值:
C:\Program Files\Java\jdk-21(请根据你的实际版本路径填写)。
- 编辑
Path变量:- 在“系统变量”列表中找到
Path,点击“编辑”。 - 点击“新建”,输入:
%JAVA_HOME%\bin。 - 点击“确定”保存所有窗口。
- 在“系统变量”列表中找到
3. 验证安装
打开命令提示符 (CMD) 或 PowerShell,输入:
java -version
javac -version
macOS 篇
1. 下载与安装
- 根据你的芯片类型(Intel 或 Apple Silicon/M1/M2/M3/M4)下载对应的
.dmg安装包。 - 双击运行
.pkg文件,按照提示完成安装。
2. 配置环境变量
macOS 默认使用 Zsh 终端,配置步骤如下:
-
打开终端,执行以下命令打开配置文件:
nano ~/.zshrc -
添加配置内容: 在文件末尾添加以下两行(利用 macOS 内置工具动态获取路径):
export JAVA_HOME=$(/usr/libexec/java_home) export PATH=$JAVA_HOME/bin:$PATH -
保存并生效:
- 按下
Ctrl + O,回车保存。 - 按下
Ctrl + X退出。 - 执行生效命令:
source ~/.zshrc。
- 按下
3. 验证安装
在终端中输入:
java -version
💡 常用提示
- 多版本管理:如果你安装了多个版本的 JDK,macOS 可以通过
/usr/libexec/java_home -V查看所有路径。 - IDE 关联:在 IntelliJ IDEA 或 VS Code 中,通常需要手动指定
JAVA_HOME路径以确保项目编译环境一致。
java的基础语法
本着Talk is cheap. Show me the code.原则,后面将会大部分通过代码来说明。
类
首先要说明的是,java是一个强面向对象的语言,无论你做什么事情,都必须通过编写类来做。
比如hello world应该这么写:
// 通过class关键字定义类,Hello为类名
public class Hello {
// main方法的定义,所有java程序都需要通过这样一个main方法作为起点来调用
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
以上代码保存为Hello.java,注意文件名必须跟类名一致。之后就可以运行了。
运行方式如下,在命令行输入以下命令:
# 编译Hello.java文件
javac Hello.java
# 编译成功后会生成一个Hello.class文件
# 然后运行
java Hello
来,动手写起来。执行成功后就能看到显示Hello world!字样了。
对象
下面的例子是通过创建对象调用对应的方法(函数)
// 定义Cat.java文件
public class Cat {
// 类属性定义,一般类属性都会加上private作为修饰符,通过private修饰的属性只能通过自身修改或读取。这么写的用意主要是做一些权限的控制。
private String name;
private Integer age;
// 构造方法,当通过new来创建对象时,会调用这个方法
public Cat(String name, Integer age) {
this.name = name;
this.age = age;
}
// 对象方法,创建对象后,就可以通过对象来调用了。
public void introduce() {
System.out.println("My name is " + name + ", and I'm " + age + " years old. Meow~");
}
}
// 定义Main.java文件
public class Main {
public static void main(String[] args) {
// 通过new来构造Cat类的对象
// 其中要通过Cat cat这样的方式来定义对象名来接收new Cat(...)所构造的对象。
Cat cat = new Cat("小叮当", 1000);
// 调用introduce()方法
cat.introduce();
}
}
然后老样子执行命令:
# 编译Main.java
javac Main.java
# 把这两个类放一起,因为Main类里用到了Cat类,它会同时编译Main和Cat,会同时生成Main.class和Cat.class
# 运行
java mains
好了,最基础的语法你已经懂了,接下来就是各种乱七八糟的循环啊,条件判断啊,那些了,就简单以代码形式介绍一遍:
展开查看
变量与常量
int num = 10; // 变量
final int MAX = 100; // 常量(不可修改)
运算符
int a = 10;
int b = 3;
// 算术运算
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3
System.out.println(a % b); // 1
// 自增
a++;
++a;
// 比较运算
System.out.println(a > b);
System.out.println(a == b);
// 逻辑运算
System.out.println(true && false);
System.out.println(true || false);
System.out.println(!true);
流程控制
if-else
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
switch
int day = 3;
switch (day) {
case 1:
System.out.println("周一");
break;
case 2:
System.out.println("周二");
break;
default:
System.out.println("其他");
}
循环
for
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
while
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
数组
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
int[] arr2 = {1, 2, 3};
// 遍历
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
// 增强 for
for (int num : arr2) {
System.out.println(num);
}
面向对象基础
继承
class Animal {
void eat() {
System.out.println("吃东西");
}
}
class Dog extends Animal {
void bark() {
System.out.println("汪汪");
}
}
多态
Animal a = new Dog();
a.eat(); // 调用父类方法
String 常用操作
String str = "hello";
System.out.println(str.length());
System.out.println(str.charAt(0));
System.out.println(str.substring(1, 3));
System.out.println(str.equals("hello"));
集合(常用)
List
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
for (String s : list) {
System.out.println(s);
}
Set
Set<String> set = new HashSet<>();
set.add("A");
set.add("A"); // 不会重复
Map
Map<String, String> map = new HashMap<>();
map.put("name", "Tom");
System.out.println(map.get("name"));
异常处理
try {
int a = 1 / 0;
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("一定执行");
}
Lambda
List<String> list = Arrays.asList("a", "b", "c");
// 传统
for (String s : list) {
System.out.println(s);
}
// Lambda
list.forEach(s -> System.out.println(s));
Stream 流
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
// 过滤 + 遍历
list.stream()
.filter(x -> x > 3)
.forEach(System.out::println);
常见工具类
// Arrays
Arrays.sort(arr);
// Math
Math.max(1, 2);
// System
System.currentTimeMillis();
好了,动手写起来吧,当你都写一遍,你就学会基础了。
下一集将会巩固这些教学内容,写一个简单的文字小游戏。
気に入ったならばコメントを残してくださいね~