Java基础必学知识点 之 语言根基(一)

欢迎来到 Java 世界!在开始写代码之前,我们需要先打好地基。这一篇讲的是基础语法,就像学英语要先学字母和单词一样,这些内容会贯穿你整个Java学习之路。不用怕,我们一步步来。

1. 注释

类型 语法 用途 注意
单行注释 // 注释内容 解释单行代码 不参与编译
多行注释 /* 注释内容 */ 多行说明 不支持嵌套
文档注释 /** 注释内容 */ 生成API文档(javadoc) 支持 @param @return 等标签
  • 文档注释:
/**
 * 拼接问候语
 * @param name 姓名,不能为null
 * @return 形如 "Hello {name}" 的问候字符串
 */
public String sayHello(String name) {
    return "Hello " + name;
}

为什么要写注释?

  • 防止自己几周后看不懂自己的代码
  • 防止别人乱改你的代码
  • 面试官就爱看你有没有注释习惯
  • 防止半夜紧急修bug时救命
  • 注释是写给“人”看的,编译器会直接忽略。别怕写注释,但别写// i++; // 让i加1这种废话。

2. 关键字、标识符规范

  • 关键字是 Java 语言预先保留的、具有特殊含义的单词,不能用作标识符(类名、方法名、变量名等)。
  • 标识符是程序员自定义的名称,用于标识类、接口、方法、变量、常量、参数等。
2.1 完整关键字列表
  • 访问控制:

private protected public

  • 类、方法、变量声明:

abstract class enum extends final implements interface native new static strictfp synchronized transient volatile

  • 流程控制:

break case continue default do else for if instanceof return switch while

  • 异常处理:

assert catch finally throw throws try

  • 基本类型:

boolean byte char double float int long short

  • 其他:

import package super this void

  • 未使用但保留:

const goto (不能使用,但会报错)

  • 上下文关键字

module requires exports opens uses provides with transitive to open

2.2 标识符合法规则(语法层面)
  • 只能由 字母(A-Z, a-z)、数字(0-9)、下划线(_)和美元符号($) 组成。
  • 不能以数字开头。
  • 不能是关键字或保留字。
  • 长度不限,但建议有实际意义。
  • Java 对标识符大小写敏感(name 与 Name 不同)。
2.3 命名规范
  • 采用骆驼命名法(camelCase)或帕斯卡命名法(PascalCase),并根据类型区分:
类型 命名风格 示例
类/接口 帕斯卡(首字母大写) UserService, Runnable
方法 骆驼(首字母小写) getUserById(), isValid()
变量 骆驼(首字母小写) studentName, count
常量 全大写 + 下划线分隔 MAX_SIZE, DEFAULT_TIMEOUT
包名 全小写 com.example.user.service
泛型类型参数 单个大写字母 T, E, K, V

3. 变量、常量(final)

  • 变量是内存中一个命名的存储单元,用于保存程序运行时可变化的数据
  • 常量是值不可变的变量,一旦赋值后不能被修改。
3.1 简要概括
  1. 变量:
    • 格式:数据类型 变量名 = 初始值;
int age;          // 声明
age = 25;         // 赋值
age = 26;         // 重新赋值
  1. 常量——使用final:
    • 命名规范:常量全大写
final double PI = 3.14159;
PI = 3.14;   // 报错,不能重新赋值

注意:
final 修饰的引用类型变量(如 final List list),不能重新指向另一个对象,但可以修改对象内部状态。初学者容易误解“常量 = 不可变”。

3.2 详细介绍

变量、常量(final)——基础语法

3.3 速查表
场景 写法 示例
局部变量 类型 变量名 = 值; int count = 0;
实例变量 private 类型 变量名; private String name;
类变量 private static 类型 变量名; private static int total;
实例常量 private final 类型 变量名 = 值; private final int id = 1;
类常量 public static final 类型 变量名 = 值; public static final double PI = 3.14;
枚举常量 enum 名 { 值1, 值2 } enum Color { RED, BLUE }

4. 数据类型

4.1 8种基本数据类型
类型 字节数 默认值 注意
byte 1 0 适合节省内存,如文件流操作
short 2 0 极少使用
int 4 0 整型默认字面量,最常用
long 8 0L 赋值需加 L (如 100L)
float 4 0.0f 赋值需加 f (如 3.14f),精度低
double 8 0.0d 浮点默认字面量,精度较高
char 2 ‘\u0000’ 单引号,可存汉字 (‘中’)
boolean false 不能与任何数值类型相互转换,不像 C 语言中 0 代表 false、非0 代表 true。
  • 注:
    在 Java 中,Boolean 类型的情况比较特殊,需要区分基本类型引用类型
    基本类型boolean:

    1. 官方规范:没有明确定义字节数,其大小依赖于 Java 虚拟机(JVM)的具体实现。
    2. 实际常见情况:
    • 在HotSpot JVM中:单独的boolean变量实际占1字节,boolean数组每个元素占1字节
    • JVM规范允许不同实现有不同的映射策略。
    • 在 boolean 数组中:通常被实现为 byte 数组,每个元素占 1 个字节。

    引用类型Boolean:
    这时是一个对象,封装了boolean值。在常见 64 位 JVM 且指针压缩默认开启的情况下,总大小通常为 16 字节。(大小:对象头 + 数据)

4.2 引用类型

引用类型存储的是对象的内存地址/句柄,不是对象本身。

  • 主要包括3种 类、接口、数组。(注:在 Java 中,除了 8 种基本类型以外,其余一切皆是引用类型。)
  • null引用类型的特殊值,不属于独立类型。
分类 说明 默认值 实例
包括普通类、抽象类、枚举、注解 null String, Object, Thread, enum Color
接口 定义行为规范,不能直接实例化 null List, Runnable, Comparable
数组 存储同类型数据的容器对象 null int[], String[], Object[][]

补充

  • 局部变量(基本/引用)无默认值,必须手动初始化。
  • 存储内容:
    引用变量存储的是对象在堆内存中的地址(或句柄),而不是对象本身。

  • 存储大小固定:
    在同一个 JVM 中,无论是什么类型的引用(一个字符串引用、一个数组引用、一个对象引用),它们变量本身占用的内存大小是固定的(通常为 4 字节或 8 字节,取决于 JVM 是 32 位还是 64 位,以及是否开启指针压缩)。

  • 实际的对象数据(如 new Object() 产生的实例)存放在 堆内存(Heap) 中。举例:

String str = new String("Hello");

str 是引用类型变量,存储在栈内存中。

"Hello" 这个字符串对象存储在堆内存中。

str 的值就是堆中那个对象的内存地址。
4.3 包装类与自动装箱/拆箱

包装类与自动装箱/拆箱——基础语法

核心要点:

  • 自动装箱/拆箱:Integer i = 100;(编译器自动调用valueOf)
    缓存池:Integer 缓存 -128~127,推荐用 equals() 比较
    Integer.parseInt() 与 Integer.valueOf():前者返回 int,后者返回 Integer

5. 类型转换:自动/强制

5.1 自动类型转换(隐式)
  • 小范围->大范围(byte→short→int→long→float→double)。

  • 自动发生,无信息丢失。

int i = 100;
long l = i;      // 自动
float f = l;     // 自动但不一定精确

注:
long 转 float 不属于自动安全转换,必定丢失精度

5.2 强制类型转换(显式)
  • 大范围 → 小范围,可能丢失精度或溢出。

  • 语法:(目标类型) 值

double d = 9.99;
int i = (int) d;          // 结果 9(截断)
byte b = (byte) 130;      // 结果 -126(溢出)
  • 注意:
    布尔类型不参与数值转换。
5.3 类型转换进阶

类型转换(自动、强制)——基础语法

6. 运算符(7类)

6.1 算术运算符
+ - * / %(取模) ++ --

int a = 10 / 3;   // 3
double b = 10 / 3.0; // 3.333...
int c = 10 % 3;   // 1
6.2 赋值运算符
= += -= *= /= %=

int x = 5;
x += 3;   // 等价 x = x + 3
6.3 比较运算符
== != > < >= <=

结果为 boolean
6.4 逻辑运算符(操作boolean)
&(非短路与) |(非短路或) !(非) ^(异或)
短路:&&(短路与) ||(短路或)

if (a != 0 && 10 / a > 1) { } // 安全,不会除零
6.5 位运算符(操作整数的二进制位)
& | ^ ~ << >> >>>(无符号右移)

int a = 5 & 3;   // 1 (0101 & 0011 = 0001)
int b = 2 << 1;  // 4
6.6 三目(三元)运算符

条件 ? 表达式1 : 表达式2

int max = (a > b) ? a : b;
6.7 类型比较
instanceof
6.8 优先级(从高到低)
()  []  .  
++(后缀)  --(后缀)
++(前缀)  --(前缀)  +  -(正负号) !  ~  
*  /  %  
+  -  
<<  >>  >>>  
<  >  <=  >=  instanceof  
==  !=  
&  
^  
|  
&&  
||  
?:  
=  +=  -=  *=  /=  %=  <<=  >>=  >>>=  &=  ^=  |=
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐