04Java SE 基础语法


✨博客主页: https://blog.csdn.net/m0_63815035?type=blog
💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

目录
一、编程语言发展简史

1.1 机器语言
机器语言是二进制代码表示的指令集合,计算机硬件直接识别和执行。不同型号的计算机使用不同的机器语言,通用性差。
1.2 汇编语言
使用英文助记符(如 ADD、SUB)代替二进制指令,仍依赖于具体硬件,可读性较差。
1.3 高级语言
以人类日常语言为基础,与具体计算机硬件无关。常见的有 Java、C、C++、Python 等。
1.4 第四代语言
非过程化语言,关注“做什么”而非“怎么做”。典型应用为数据库查询语言。
1.5 第五代语言
融合人工智能,支持使用自然语言与计算机交互。
二、Java 概述
2.1 Java 发展历史
- 1991 年,James Gosling 领导 Sun 公司团队开发面向消费电子产品的语言,最初命名为 Green,后改为 Oak,最终定名为 Java。
- 1996 年,JDK 1.0 发布。
- 2004 年,Java SE 5.0 发布(重大更新)。
- 2014 年,Java SE 8.0 发布(目前广泛使用的长期支持版本)。
- 2017 年后,Oracle 改为每半年发布一个版本,LTS(长期支持)版本包括 Java 8、11、17 等。
2.2 Java 版本体系
- Java SE(Standard Edition):标准版,用于桌面应用开发。
- Java EE(Enterprise Edition):企业版,用于服务器端开发。
- Java ME(Micro Edition):微型版,用于嵌入式设备。
2.3 Java 特性与优势
- 简单性:语法简洁,去除了 C++ 中复杂的内容(如指针、多重继承)。
- 面向对象:以对象和接口为核心。
- 可移植性:“一次编写,随处运行”(Write Once, Run Anywhere),通过 Java 虚拟机实现跨平台。
- 高性能:即时编译(JIT)技术提升执行效率。
- 动态性:支持反射机制,可在运行时动态加载类。
- 多线程:内置多线程支持。
- 安全性:提供沙箱安全机制。
- 健壮性:去除指针和手动内存管理,采用自动垃圾回收。
三、Java 运行环境与开发环境搭建
3.1 JDK、JRE、JVM 的关系
- JDK(Java Development Kit):Java 开发工具包,包含编译器、运行时环境和类库。
- JRE(Java Runtime Environment):Java 运行环境,用于执行 Java 程序。
- JVM(Java Virtual Machine):Java 虚拟机,解释执行字节码,实现跨平台。不同平台需安装不同版本的 JVM。
3.2 环境变量配置
- 设置
JAVA_HOME为 JDK 安装目录(如C:\Program Files\Java\jdk-17)。 - 将
%JAVA_HOME%\bin添加到PATH环境变量中。 - 验证:命令行执行
java -version和javac -version。
四、第一个 Java 程序:HelloWorld
4.1 编写源代码
创建 HelloWorld.java 文件,内容如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
4.2 编译与运行
- 传统方式:
javac HelloWorld.java编译生成HelloWorld.class,然后java HelloWorld运行。 - 新方式(Java 11+):
java HelloWorld.java直接运行。
4.3 常见错误
- 文件扩展名隐藏导致实际文件名为
HelloWorld.java.txt。 javac命令后需带完整文件名(含.java)。- Java 严格区分大小写。
- 所有标点符号必须为英文半角。
- 每条语句以分号结尾。
main方法签名必须为public static void main(String[] args)。
4.4 注释
// 单行注释
/*
* 多行注释
*/
/**
* 文档注释,可用于生成 API 文档
*/
五、Java 基础语法
5.1 标识符
- 组成:字母、数字、下划线
_、美元符号$,数字不能开头。 - 不能使用 Java 关键字。
- 大小写敏感。
- 命名规范:类名首字母大写(大驼峰),变量和方法名首字母小写(小驼峰),常量全大写加下划线。
5.2 关键字
Java 中有 50 多个关键字,如 public、class、static、void、int、if、else、for、while 等。goto 和 const 为保留字,未使用。
5.3 数据类型
基本数据类型(8 种)
| 类型 | 字节数 | 取值范围 |
|---|---|---|
| byte | 1 | -128 ~ 127 |
| short | 2 | -32768 ~ 32767 |
| int | 4 | -2^31 ~ 2^31-1 |
| long | 8 | -2^63 ~ 2^63-1(字面量后加 L) |
| float | 4 | 约 ±3.4E38(字面量后加 F) |
| double | 8 | 约 ±1.8E308 |
| char | 2 | 0 ~ 65535(Unicode 字符) |
| boolean | 1 位 | true / false |
引用数据类型
- 类、接口、数组、枚举、注解、字符串(String)等。
- 引用变量本身占用 4 字节(存储对象地址)。
5.4 变量作用域
- 局部变量:定义在方法或代码块内部,必须初始化后才能使用。
- 成员变量(实例变量):定义在类中、方法外,有默认初始值(数值为 0,布尔为 false,引用为 null)。
5.5 类型转换
- 自动类型转换:容量小的类型自动转换为容量大的类型(byte → short → int → long → float → double)。
- 强制类型转换:
(targetType) value,可能丢失精度或溢出。 - 整数常量可直接赋值给 byte、short、char,不超出范围即可。
5.6 运算符
算术运算符
+ - * / %(取模)
赋值运算符
= += -= *= /= %=
一元运算符
++(自增)--(自减)
- 前置:先自增再参与运算。
- 后置:先参与运算再自增。
关系运算符
> < >= <= == !=(结果为 boolean)
逻辑运算符
&&(短路与)、||(短路或)、!(非)
&&和||采用短路求值,左侧可确定结果时不再计算右侧。
位运算符(了解)
& | ^ ~ << >> >>>
条件运算符(三元)
条件 ? 表达式1 : 表达式2
字符串连接符
+ 两侧若有一个为 String,则进行字符串拼接。
5.7 运算符优先级
建议使用小括号 () 明确运算顺序,避免记忆优先级。
六、控制流程语句
6.1 顺序结构
程序按代码书写顺序依次执行。
6.2 选择结构
if 语句
if (条件) {
// 条件为 true 时执行
}
if-else 语句
if (条件) {
// true 分支
} else {
// false 分支
}
if-else if-else 多分支
if (条件1) {
// 条件1 为 true
} else if (条件2) {
// 条件1 false 且条件2 true
} else {
// 所有条件 false
}
switch 语句
switch (表达式) {
case 常量1:
// 执行代码
break;
case 常量2:
// 执行代码
break;
default:
// 默认代码
}
- 表达式支持 byte、short、int、char、String、枚举。
- 忘记
break会发生“穿透”。
6.3 循环结构
for 循环
for (初始化; 条件; 迭代) {
// 循环体
}
while 循环
while (条件) {
// 循环体
}
do-while 循环
do {
// 循环体
} while (条件);
增强 for 循环(for-each)
for (元素类型 变量名 : 数组或集合) {
// 使用变量
}
6.4 循环控制
break:强制终止整个循环。continue:跳过本次循环剩余语句,进入下一次迭代。
七、方法(Method)
7.1 方法定义
修饰符 返回值类型 方法名(形参列表) {
// 方法体
return 返回值; // 若返回值类型为 void,则可省略或写 return;
}
- 修饰符:暂时使用
public static。 - 方法不能嵌套定义。
7.2 方法调用
- 静态方法:类名.方法名(实参) 或直接 方法名(实参)。
- 有返回值的方法可被赋值给变量或直接使用。
7.3 参数传递
- Java 采用值传递(值拷贝)。基本类型传递数据值,引用类型传递对象地址值。
7.4 方法签名
方法名 + 参数列表(类型、个数、顺序)构成唯一签名,用于区分重载方法。
7.5 方法重载(Overload)
同一类中,方法名相同但参数列表不同的多个方法。返回值类型和修饰符不参与重载判断。
八、递归(Recursion)
递归是方法自身调用自身。需满足:
- 递归头:终止条件,避免无限递归。
- 递归体:将问题分解为更小规模的子问题。
示例:计算阶乘
public static int factorial(int n) {
if (n == 1) return 1;
return n * factorial(n - 1);
}
缺点:占用大量栈空间,效率低于循环。适合逻辑清晰、层次较浅的场景。
九、数组(Array)
9.1 数组定义
数组是相同类型数据的有序集合,长度固定。
声明
int[] arr; // 推荐
int arr[];
动态初始化
int[] arr = new int[5]; // 创建长度为5的数组,元素默认为0
静态初始化
int[] arr = {1, 2, 3, 4, 5};
int[] arr2 = new int[]{1, 2, 3};
9.2 访问数组
- 索引范围:0 ~ length-1,超出则抛出
ArrayIndexOutOfBoundsException。 - 获取长度:
arr.length。 - 访问元素:
arr[索引]。
9.3 数组遍历
// 普通 for
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 增强 for
for (int num : arr) {
System.out.println(num);
}
9.4 二维数组
// 动态初始化
int[][] matrix = new int[3][4];
// 静态初始化(不规则数组)
int[][] arr = {{1,2,3}, {4,5}, {6,7,8,9}};
// 遍历
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
9.5 常用排序算法
冒泡排序
两两比较,较大元素向后冒泡。
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
选择排序
每次选出最小(或最大)元素放到已排序序列末尾。
插入排序
将元素逐个插入到已有序的序列中。
9.6 数组的增删改查
- 增:在末尾或中间插入元素(需移动后续元素,通常借助集合类)。
- 删:删除末尾或中间元素(需移动后续元素)。
- 改:直接通过索引赋值。
- 查:线性查找或二分查找(要求数组有序)。
9.7 二分查找
public static int binarySearch(int[] arr, int key) {
int low = 0, high = arr.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (key < arr[mid]) high = mid - 1;
else if (key > arr[mid]) low = mid + 1;
else return mid;
}
return -1;
}
十、常用工具类
10.1 随机数生成
// Math.random() 返回 [0.0, 1.0) 的 double
double d = Math.random();
// 生成 [min, max] 的整数
int num = (int)(Math.random() * (max - min + 1) + min);
10.2 键盘输入(Scanner)
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
double salary = sc.nextDouble();
String name = sc.next(); // 以空格分隔
String line = sc.nextLine(); // 读取整行
sc.close();
十一、强化练习题目
以下为 PDF 中提供的练习题,建议独立完成。
11.1 基础循环
- 计算 1~100 所有数字的累加和。
- 计算 1~100 奇数之和与偶数之和。
- 计算 1~100 中能被 7 整除的数字之和。
11.2 图形打印
- 打印正方形、长方形、直角三角形、倒三角形、等腰三角形。
- 打印空心图形(正方形、三角形)。
- 打印菱形(实心、空心)。
- 打印九九乘法表。
11.3 经典算法题
- 百鸡百钱:公鸡 5 文,母鸡 3 文,小鸡 1 文三只,百钱买百鸡,求各几何。
- 韩信点兵:三三数剩二,五五数剩三,七七数剩二,求物几何。
- 猴子摘桃:每天吃一半加一个,第十天剩一个,求第一天摘了多少。
- 掷骰子类型判断:三个骰子,判断豹子、顺子、对子、单点。
11.4 数学专题
- 因数:输出指定数的所有因数,以及多个数的公因数。
- 回文数:判断一个整数是否为回文数;找出平方回文数。
- 水仙花数:三位数各位立方和等于自身。扩展至四位、五位等自幂数。
- 质数:判断质数,输出范围内的质数。
11.5 数组练习
- 随机生成三个数字并排序。
- 生成长度为 10 的随机数组并排序(多种方法)。
- 数字螺旋矩阵:输入 N,输出 N×N 螺旋矩阵。
- 九宫格(幻方):实现奇数阶幻方。
十二、进阶内容概要
12.1 杨辉三角
二项式系数的三角形排列,可用二维数组生成。
12.2 斐波那契数列(兔子问题)
每月兔子对数:1, 1, 2, 3, 5, 8, …,可用递归或循环实现。
12.3 数组增删改查的通用实现
为后续学习集合框架(ArrayList)奠定基础。
十三、学习建议
- 多敲代码:只看不写无法掌握。
- 调试能力:学会阅读编译错误和运行时异常信息。
- 注意规范:命名、缩进、注释要符合标准。
- 循序渐进:先掌握基本语法,再练习循环、数组,最后理解方法和递归。
本文档可作为 Java SE 入门阶段的知识手册。后续可继续学习面向对象(类、继承、多态、接口)、异常处理、集合框架、IO 流、多线程等高级内容。
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文

更多推荐


所有评论(0)