Java是一种面向对象的编程语言,具有严格的语法规范。本章将详细介绍Java的基础语法,包括程序结构、命名规则、数据类型、运算符等核心概念。
让我们从一个最简单的Java程序开始,这个程序将在控制台输出"Hello World"。
/**
* 我的第一个Java程序
* 这是一个经典的Hello World程序
* 程序功能:在控制台输出Hello World
*/
public class MyFirstJavaProgram {
/**
* main方法是Java程序的入口点
* 每个Java应用程序都必须包含main方法
* @param args 命令行参数数组
*/
public static void main(String[] args) {
// 使用System.out.println()方法在控制台输出文本
System.out.println("Hello World");
// 也可以使用print()方法,但不会自动换行
System.out.print("Welcome to ");
System.out.print("Java Programming");
}
}
MyFirstJavaProgram.java(注意:文件名必须与类名完全一致)javac MyFirstJavaProgram.javaMyFirstJavaProgram.class字节码文件java MyFirstJavaProgram.class扩展名Hello World# 编译Java源文件
C:\Users\YourName> javac MyFirstJavaProgram.java
# 运行编译后的程序
C:\Users\YourName> java MyFirstJavaProgram
# 输出结果
Hello World
Welcome to Java Programming
编写Java程序时,必须遵守以下语法规则:
| 规则类型 | 说明 | 示例 |
|---|---|---|
| 大小写敏感 | Java区分大小写,标识符Hello与hello是不同的 |
String name = "John"; ≠ String Name = "John"; |
| 类名规范 | 类名首字母应大写,若由多个单词组成,每个单词首字母大写(帕斯卡命名法) | MyFirstJavaClass, StudentRecord, BankAccount |
| 方法名规范 | 方法名首字母小写,后续单词首字母大写(驼峰命名法) | calculateTotal(), getUserName(), isValid() |
| 源文件名 | 源文件名必须与公共类名完全一致,包括大小写,扩展名为.java |
类MyClass → 文件名MyClass.java |
| 主方法入口 | Java应用程序从main方法开始执行,必须是public static void main(String[] args) |
public static void main(String[] args) { ... } |
| 语句结束符 | 每条Java语句必须以分号;结束 |
int x = 10; |
| 代码块 | 使用花括号{}定义代码块,用于类、方法、控制语句等 |
if (x > 0) { System.out.println("Positive"); } |
标识符是程序中用于命名类、方法、变量等的名称。Java标识符必须遵循以下规则:
123abc(以数字开头)my-name(包含连字符)class(Java关键字)my name(包含空格)@variable(以@开头)public(Java关键字)小写字母开头,驼峰命名法,描述性名称
int studentCount;
double accountBalance;
String firstName;
boolean isActive;
全部大写,单词间用下划线分隔
final double PI = 3.14159;
final int MAX_SIZE = 100;
final String DEFAULT_COLOR = "blue";
动词开头,驼峰命名法,描述方法功能
void calculateTotal();
String getUserName();
boolean isValidInput();
Java修饰符用于修改类、方法、变量的访问权限和行为特性。主要分为两类:
| 修饰符 | 作用范围 | 说明 |
|---|---|---|
public |
全局可见 | 任何类都可以访问 |
protected |
包内及子类可见 | 同一包内或子类可以访问 |
default(无修饰符) |
包内可见 | 同一包内的类可以访问 |
private |
类内可见 | 只有当前类可以访问 |
| 修饰符 | 用途 | 示例 |
|---|---|---|
final |
不可继承/不可修改 | final class, final variable |
abstract |
抽象类/方法 | abstract class, abstract method |
static |
类级别成员 | static method, static variable |
synchronized |
线程同步 | synchronized method |
public class Student {
// 公共静态常量
public static final int MAX_SCORE = 100;
// 私有实例变量
private String name;
private int age;
// 受保护的变量(子类可访问)
protected String studentId;
// 包级私有变量
String department; // 默认访问修饰符
// 公共方法
public String getName() {
return name;
}
// 私有方法
private void validateAge() {
if (age < 0) age = 0;
}
// 静态方法
public static void displayInfo() {
System.out.println("Student Information");
}
// final方法(不能被子类重写)
public final void register() {
System.out.println("Student registered");
}
}
Java中有三种主要的变量类型:
在方法、构造函数或代码块中声明的变量
public void calculate() {
int result = 0; // 局部变量
int x = 10, y = 20;
result = x + y;
}
在类中声明的变量,但在方法、构造函数或代码块之外
public class Student {
// 实例变量
private String name;
private int age;
public Student(String n, int a) {
name = n; // 使用实例变量
age = a;
}
}
使用static关键字声明的变量
public class Car {
// 类变量
public static int carCount = 0;
public Car() {
carCount++; // 所有Car对象共享
}
}
// 访问方式
System.out.println(Car.carCount);
Java 5.0引入了枚举类型,用于定义一组命名的常量。枚举提高了代码的可读性和类型安全性。
// 定义一个枚举类型
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
// 使用枚举
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println("Mondays are bad.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
case SATURDAY: case SUNDAY:
System.out.println("Weekends are best.");
break;
default:
System.out.println("Midweek days are so-so.");
}
}
}
// 高级枚举示例
enum Size {
// 枚举常量,调用构造函数
SMALL("S", "小杯"),
MEDIUM("M", "中杯"),
LARGE("L", "大杯"),
EXTRA_LARGE("XL", "超大杯");
// 枚举属性
private String abbreviation;
private String description;
// 枚举构造函数(必须是私有的)
private Size(String abbreviation, String description) {
this.abbreviation = abbreviation;
this.description = description;
}
// 枚举方法
public String getAbbreviation() {
return abbreviation;
}
public String getDescription() {
return description;
}
// 静态方法:根据缩写获取枚举
public static Size fromAbbreviation(String abbr) {
for (Size size : Size.values()) {
if (size.getAbbreviation().equals(abbr)) {
return size;
}
}
return null;
}
}
// 使用示例
public class FreshJuice {
Size size;
public static void main(String[] args) {
FreshJuice juice = new FreshJuice();
juice.size = Size.MEDIUM;
System.out.println("Size: " + juice.size);
System.out.println("Abbreviation: " + juice.size.getAbbreviation());
System.out.println("Description: " + juice.size.getDescription());
}
}
Java关键字是Java语言保留的具有特殊含义的单词,不能用作标识符名称。
booleanbytechardoublefloatintlongshortvoid
ifelseswitchcasedefaultwhiledoforbreakcontinuereturn
publicprivateprotecteddefaultfinalstaticabstractsynchronizedvolatiletransient
classinterfaceextendsimplementsnewthissuperinstanceoftrycatchfinallythrowthrowsenumpackageimport
const和goto是Java保留字,但目前未使用var作为局部变量类型推断的关键字true、false、null虽然看起来像关键字,但实际上是字面量注释用于解释代码,提高可读性。Java编译器会忽略注释。Java支持三种注释:
以//开头,到行尾结束
// 这是一个单行注释
int x = 10; // 这是行尾注释
// int y = 20; // 这行代码被注释掉了
以/*开头,以*/结尾
/* 这是一个多行注释
可以跨越多行
用于较长的说明 */
int x = 10;
/*
也可以注释掉
多行代码
int y = 20;
int z = 30;
*/
以/**开头,以*/结尾,用于生成API文档
/**
* 这是一个文档注释
* 可以使用HTML标签和Javadoc标签
* @param name 用户名
* @return 欢迎消息
*/
public String welcome(String name) {
return "Hello, " + name;
}
x = x + 1; // 将x加1这样的注释下面是一个综合示例,展示Java基础语法的实际应用:
/**
* 学生类
* 演示Java基础语法的综合应用
*/
public class Student {
// 类变量:所有学生共享的计数器
private static int studentCount = 0;
// 常量:使用final关键字
public static final int MAX_AGE = 100;
// 实例变量:每个学生对象都有自己的值
private String name;
private int age;
private String studentId;
// 枚举:成绩等级
enum Grade {
A, B, C, D, F
}
/**
* 构造函数
* @param name 学生姓名
* @param age 学生年龄
*/
public Student(String name, int age) {
// 使用this关键字区分实例变量和参数
this.name = name;
// 使用条件语句验证年龄
if (age >= 0 && age <= MAX_AGE) {
this.age = age;
} else {
this.age = 0;
System.out.println("年龄无效,已设置为0");
}
// 生成学生ID
this.studentId = "STU" + (++studentCount);
}
/**
* 获取学生信息
* @return 学生信息字符串
*/
public String getInfo() {
return "学生ID: " + studentId +
", 姓名: " + name +
", 年龄: " + age;
}
/**
* 根据分数计算等级
* @param score 分数
* @return 等级
*/
public Grade calculateGrade(double score) {
// 使用switch表达式(Java 14+)
return switch ((int)(score / 10)) {
case 10, 9 -> Grade.A;
case 8 -> Grade.B;
case 7 -> Grade.C;
case 6 -> Grade.D;
default -> Grade.F;
};
}
/**
* 主方法:程序入口
*/
public static void main(String[] args) {
// 创建学生对象
Student student1 = new Student("张三", 20);
Student student2 = new Student("李四", 22);
// 访问实例方法
System.out.println(student1.getInfo());
System.out.println(student2.getInfo());
// 访问类变量
System.out.println("学生总数: " + Student.studentCount);
// 使用枚举
Grade grade = student1.calculateGrade(85.5);
System.out.println("成绩等级: " + grade);
// 使用常量
System.out.println("最大允许年龄: " + Student.MAX_AGE);
}
}
int x = 10 → int x = 10;System.out.println ≠ system.out.printlnMyClass必须保存在MyClass.java中assert x > 0 : "x必须大于0";