1. Java基础语法概述
Java作为一门面向对象的编程语言,其基础语法构成了整个Java生态的根基。对于初学者而言,掌握这些基础概念就像学习一门新语言的字母和单词一样重要。Java语法融合了C++的许多特性,但摒弃了指针、多重继承等复杂概念,使得它更易于上手。
Java程序的基本结构由类(class)和方法(method)组成。每个Java程序至少包含一个类,而每个类中可以包含多个方法。其中,main方法是程序的入口点,Java虚拟机(JVM)从这里开始执行程序。这种结构设计使得Java程序具有很好的组织性和可读性。
提示:Java严格区分大小写,类名首字母通常大写,方法名首字母小写,这是Java编程规范的基本要求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据类型与变量声明
2.1 基本数据类型
Java定义了8种基本数据类型,分为四大类:
- 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
- 浮点型:float(4字节)、double(8字节)
- 字符型:char(2字节,Unicode编码)
- 布尔型:boolean(1位,true/false)
这些数据类型的选择直接影响程序的内存使用和计算效率。例如,对于年龄这样的数值,使用byte就足够了,而不用int,可以节省内存空间。
2.2 引用数据类型
除了基本类型,Java还有引用类型,包括类、接口、数组等。引用类型变量存储的是对象的引用(内存地址),而不是对象本身。这与基本类型直接存储值有本质区别。
java复制// 基本类型示例
int age = 25;
double price = 99.99;
boolean isStudent = true;
// 引用类型示例
String name = "张三";
int[] scores = {90, 85, 95};
2.3 变量声明与初始化
Java是强类型语言,变量必须先声明后使用。声明格式为:数据类型 变量名 [= 初始值]。变量命名应遵循驼峰命名法,且要有意义。
java复制int count; // 声明
count = 10; // 初始化
double pi = 3.14159; // 声明并初始化
注意:局部变量使用前必须初始化,否则编译会报错。而类成员变量会有默认值(如int为0,对象为null)。
3. 运算符与表达式
3.1 算术运算符
Java支持标准的算术运算符:+、-、*、/、%(取模)。特别要注意整数相除会截断小数部分:
java复制int a = 5 / 2; // 结果为2,不是2.5
double b = 5.0 / 2; // 结果为2.5
3.2 关系与逻辑运算符
关系运算符(>、<、>=、<=、==、!=)用于比较,返回boolean值。逻辑运算符(&&、||、!)用于组合多个条件。
java复制int age = 20;
boolean isAdult = age >= 18; // true
boolean canVote = isAdult && hasIDCard; // 需要同时满足
3.3 位运算符与三元运算符
位运算符(&、|、^、~、<<、>>、>>>)直接操作二进制位,在底层编程中很有用。三元运算符(?:)是if-else的简写形式:
java复制int max = (a > b) ? a : b; // 返回较大的值
4. 流程控制结构
4.1 条件语句
if-else语句根据条件执行不同代码块。switch-case适用于多分支选择,从Java 7开始支持String类型。
java复制// if-else示例
if(score >= 90) {
grade = 'A';
} else if(score >= 80) {
grade = 'B';
} else {
grade = 'C';
}
// switch示例
switch(day) {
case "Monday":
System.out.println("工作日");
break;
case "Sunday":
System.out.println("休息日");
break;
default:
System.out.println("未知");
}
4.2 循环结构
Java提供了三种循环:for、while、do-while。for循环适合已知迭代次数的情况,while适合条件控制,do-while至少执行一次。
java复制// for循环打印1-10
for(int i=1; i<=10; i++) {
System.out.println(i);
}
// while循环计算和
int sum = 0, n = 1;
while(n <= 100) {
sum += n;
n++;
}
// do-while保证至少执行一次
int input;
do {
input = getInput();
} while(input != 0);
4.3 跳转语句
break用于退出循环或switch,continue跳过当前迭代,return从方法返回。带标签的break可以跳出多层嵌套循环。
java复制outer: for(int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
if(i*j > 50) break outer; // 跳出外层循环
}
}
5. 数组与字符串
5.1 数组基础
数组是相同类型元素的集合,长度固定。声明格式为:数据类型[] 数组名 = new 数据类型[长度]。
java复制int[] numbers = new int[5]; // 声明并创建长度为5的整型数组
numbers[0] = 10; // 下标从0开始
// 初始化简写
int[] primes = {2, 3, 5, 7, 11};
5.2 多维数组
Java支持多维数组,最常见的是二维数组,可以看作数组的数组。
java复制int[][] matrix = new int[3][3]; // 3x3矩阵
matrix[0][0] = 1; // 第一行第一列
// 不规则数组
int[][] triangle = new int[3][];
triangle[0] = new int[1];
triangle[1] = new int[2];
triangle[2] = new int[3];
5.3 字符串处理
String类提供了丰富的字符串操作方法。字符串是不可变的,任何修改都会创建新对象。
java复制String s1 = "Hello";
String s2 = new String("World");
String s3 = s1 + " " + s2; // 字符串拼接
// 常用方法
int len = s3.length(); // 长度
char c = s3.charAt(1); // 获取字符
String sub = s3.substring(0, 5); // 子串
boolean eq = s1.equals("hello"); // 比较内容
6. 方法与参数传递
6.1 方法定义
方法是一段完成特定功能的代码块,定义格式为:
[修饰符] 返回类型 方法名(参数列表)
java复制public static int add(int a, int b) {
return a + b;
}
6.2 参数传递机制
Java只有值传递:基本类型传递值副本,引用类型传递引用副本(仍指向同一对象)。
java复制void changeValue(int x) { x = 100; } // 不影响原始值
void changeArray(int[] arr) { arr[0] = 100; } // 修改原数组
6.3 方法重载
同一类中允许同名方法,只要参数列表不同(类型、数量或顺序)。
java复制int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
int add(int a, int b, int c) { return a + b + c; }
7. 面向对象基础
7.1 类与对象
类是对象的模板,对象是类的实例。使用new关键字创建对象。
java复制class Person {
String name;
int age;
void introduce() {
System.out.println("我叫" + name + ", " + age + "岁");
}
}
Person p = new Person();
p.name = "张三";
p.age = 20;
p.introduce();
7.2 构造方法
构造方法用于初始化对象,与类同名,无返回类型。不定义时编译器提供默认构造方法。
java复制class Person {
Person(String n, int a) {
name = n;
age = a;
}
}
Person p = new Person("李四", 25);
7.3 封装与访问控制
通过private保护数据,提供public的getter/setter方法控制访问。
java复制class Person {
private String name;
public String getName() { return name; }
public void setName(String n) { name = n; }
}
8. 常用工具类
8.1 Scanner输入
Scanner类可以方便地从控制台或文件读取输入。
java复制Scanner sc = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = sc.nextLine();
System.out.print("请输入年龄:");
int age = sc.nextInt();
8.2 Math数学运算
Math类提供了各种数学函数和常量。
java复制double pi = Math.PI;
double root = Math.sqrt(25); // 平方根
double power = Math.pow(2, 3); // 2的3次方
int max = Math.max(10, 20); // 较大值
8.3 Random随机数
Random类用于生成伪随机数。
java复制Random rand = new Random();
int num = rand.nextInt(100); // 0-99随机数
double d = rand.nextDouble(); // 0.0-1.0随机小数
9. 异常处理基础
9.1 try-catch-finally
捕获和处理异常,finally块无论是否异常都会执行。
java复制try {
int result = 10 / 0;
} catch(ArithmeticException e) {
System.out.println("除数不能为零");
} finally {
System.out.println("计算结束");
}
9.2 异常类型
Java异常分为检查型异常(必须处理)和非检查型异常(运行时异常)。
java复制// 检查型异常
try {
FileReader fr = new FileReader("file.txt");
} catch(FileNotFoundException e) {
e.printStackTrace();
}
// 非检查型异常
int[] arr = new int[5];
System.out.println(arr[10]); // ArrayIndexOutOfBoundsException
10. 基础语法常见问题
10.1 类型转换问题
自动类型转换(小转大)和强制类型转换(大转小)可能导致精度损失。
java复制int i = 100;
long l = i; // 自动转换
double d = 3.14;
int n = (int)d; // 强制转换,n=3
10.2 ==与equals区别
==比较引用(地址),equals比较内容(需重写)。
java复制String s1 = "hello";
String s2 = new String("hello");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
10.3 数组越界与空指针
常见运行时错误,需注意边界检查和null判断。
java复制int[] arr = new int[5];
System.out.println(arr[5]); // ArrayIndexOutOfBoundsException
String s = null;
System.out.println(s.length()); // NullPointerException
在实际开发中,我发现很多初学者容易混淆基本类型和引用类型的区别,特别是在参数传递时。理解"值传递"和"引用传递"的本质对掌握Java编程至关重要。另外,良好的编码习惯如变量命名规范、适当的注释、异常处理等,虽然不属于语法范畴,但对写出高质量的Java代码同样重要。
