09_Java 基础语法
Java 基本语法、标识符、关键字、注释、继承与接口概述
public class demo {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
![[java-基础语法1.png]]
- 在命令行窗口输入 javac HelloWorld.java 按下回车键编译代码。如果代码没有错误,cmd 命令提示符会进入下一行(假设环境变量都设置好了)。
- 再键输入 java HelloWorld 按下回车键就可以运行程序了
基本语法
编写 Java 程序时,应注意以下几点:
- 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
- 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
- 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
- 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
- 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
Java 标识符
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关于 Java 标识符,有以下几点需要注意:
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 关键字不能用作标识符
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary
Java修饰符
像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:
- 访问控制修饰符 : default, public , protected, private
- 非访问控制修饰符 : final, abstract, static, synchronized
Java 变量
Java 中主要有如下几种类型的变量
- 局部变量
- 类变量(静态变量)
- 成员变量(非静态变量)
Java 数组
数组是储存在堆上的对象,可以保存多个同类型变量。
Java 枚举
Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug。
例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。
class FreshJuice {
enum FreshJuiceSize{ SMALL, MEDIUM , LARGE }
FreshJuiceSize size;
}
public class FreshJuiceTest {
public static void main(String[] args){
FreshJuice juice = new FreshJuice();
juice.size = FreshJuice.FreshJuiceSize.MEDIUM ;
}
}
注意:枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。
Java 关键字
下面列出了 Java 关键字。这些保留字不能用于常量、变量、和任何标识符的名称。
| 类别 | 关键字 | 说明 |
|---|---|---|
| 访问控制 | private | 私有的 |
| protected | 受保护的 | |
| public | 公共的 | |
| default | 默认 | |
| 类、方法和变量修饰符 | abstract | 声明抽象 |
| class | 类 | |
| extends | 扩充、继承 | |
| final | 最终值、不可改变的 | |
| implements | 实现(接口) | |
| interface | 接口 | |
| native | 本地、原生方法(非 Java 实现) | |
| new | 创建 | |
| static | 静态 | |
| strictfp | 严格浮点、精准浮点 | |
| synchronized | 线程、同步 | |
| transient | 短暂 | |
| volatile | 易失 | |
| 程序控制语句 | break | 跳出循环 |
| case | 定义一个值以供 switch 选择 | |
| continue | 继续 | |
| do | 运行 | |
| else | 否则 | |
| for | 循环 | |
| if | 如果 | |
| instanceof | 实例 | |
| return | 返回 | |
| switch | 根据值选择执行 | |
| while | 循环 | |
| 错误处理 | assert | 断言表达式是否为真 |
| catch | 捕捉异常 | |
| finally | 有没有异常都执行 | |
| throw | 抛出一个异常对象 | |
| throws | 声明一个异常可能被抛出 | |
| try | 捕获异常 | |
| 包相关 | import | 引入 |
| package | 包 | |
| 基本类型 | boolean | 布尔型 |
| byte | 字节型 | |
| char | 字符型 | |
| double | 双精度浮点 | |
| float | 单精度浮点 | |
| int | 整型 | |
| long | 长整型 | |
| short | 短整型 | |
| 变量引用 | super | 父类、超类 |
| this | 本类 | |
| void | 无返回值 | |
| 保留关键字 | goto | 是关键字,但不能使用 |
| const | 是关键字,但不能使用 |
注意:Java 的 null 不是关键字,类似于 true 和 false,它是一个字面常量,不允许作为标识符使用。
Java注释
类似于 C/C++、Java 也支持单行以及多行注释。
注释中的字符将被 Java 编译器忽略。
public class HelloWorld {
/* 这是第一个Java程序
* 它将输出 Hello World
* 这是一个多行注释的示例
*/
public static void main(String[] args){
// 这是单行注释的示例
/* 这个也是单行注释的示例 */
System.out.println("Hello World");
}
}
继承
在 Java 中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。
利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(sub class)。
接口
在 Java 中,接口可理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。
接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。
Java 源程序与编译型运行区别
如下图所示:
Java 源文件先由 javac 编译为字节码(.class),再由 JVM 加载并执行;JVM 可解释执行或将热点代码即时编译为机器码。
注解(Annotation)
注解是以 @ 开头的标记,用于向编译器或运行时传递额外信息,本身不改变程序逻辑。
内置常用注解
| 注解 | 作用 |
|---|---|
@Override |
告诉编译器"这是重写父类方法",写错方法名时编译器会报错 |
@Deprecated |
标记方法 / 类已过时,调用时 IDE 会划删除线并警告 |
@SuppressWarnings |
压制指定类型的编译警告 |
@FunctionalInterface |
标记接口是函数式接口(只有一个抽象方法),Lambda 的前提 |
class Animal {
void makeSound() {
System.out.println("...");
}
}
class Dog extends Animal {
@Override // 如果拼写错误,编译器立刻报错
void makeSound() {
System.out.println("汪汪!");
}
@Deprecated // 标记为过时
void oldMethod() { }
}
@FunctionalInterface
interface Calculator {
int compute(int a, int b); // 只能有一个抽象方法
}
// 使用 Lambda 实现函数式接口
Calculator add = (a, b) -> a + b;
System.out.println(add.compute(3, 5)); // 8
var 类型推断(Java 10+)
Java 10 引入 var 关键字,让编译器自动推断局部变量的类型,减少冗长的类型声明:
// 传统写法
ArrayList<String> names = new ArrayList<String>();
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
// var 写法:类型由右侧表达式推断
var names = new ArrayList<String>(); // 推断为 ArrayList<String>
var map = new HashMap<String, List<Integer>>();
// 在 for 循环中同样适用
for (var name : names) {
System.out.println(name.toUpperCase());
}
注意事项:
var只能用于局部变量,不能用于方法参数、返回类型或成员变量- 声明时必须立刻初始化(编译器需要右侧的表达式来推断类型)
var不是关键字,可以作为变量名(但强烈不建议)
var x = 10; // int
var msg = "hello"; // String
var pi = 3.14; // double
var ambiguous; // ❌ 编译错误!没有初始化,无法推断类型
Text Blocks(文本块,Java 15+)
Text Blocks 用三引号 """ 定义多行字符串,不需要手动拼接 \n 和转义引号,常用于内嵌 JSON、HTML、SQL:
// 传统写法:拼接麻烦,可读性差
String json = "{\n" +
" \"name\": \"Alice\",\n" +
" \"age\": 30\n" +
"}";
// Text Block:所见即所得
String json = """
{
"name": "Alice",
"age": 30
}
""";
// 内嵌 SQL
String sql = """
SELECT *
FROM users
WHERE age > 18
ORDER BY name
""";
System.out.println(json);