Java 基础语法笔记
参考: CSDN - Shane_Cheng0202
一、创建项目与模块
// 一个 Java 源文件的基本结构
public class Hello {
public static void main(String[] args) {
System.out.println("hello, world!");
}
}
public class 声明公共类,类名必须与文件名一致
main 方法是程序入口,签名固定为 public static void main(String[] args)
- Java 区分大小写
二、注释
单行注释
// 这是单行注释
int x = 10; // 也可以在语句末尾
多行注释
/*
* 这是多行注释
* 可以跨越多行
*/
文档注释 (JavaDoc)
/**
* 这是文档注释,用于生成 API 文档
* @author ShaneCheng
* @version 1.0
* @param args 命令行参数
* @return 返回值说明
*/
三、标识符和关键字
标识符规则
- 由字母、数字、下划线
_、美元符 $ 组成
- 不能以数字开头
- 不能使用 Java 关键字/保留字
- 大小写敏感
- 建议使用驼峰命名法(类名首字母大写,方法/变量首字母小写)
常用关键字
| 类别 |
关键字 |
| 访问控制 |
public, private, protected |
| 类/方法/变量修饰 |
static, final, abstract, synchronized |
| 类相关 |
class, interface, extends, implements, new |
| 数据类型 |
byte, short, int, long, float, double, char, boolean, void |
| 流程控制 |
if, else, switch, case, for, while, do, break, continue, return |
| 包相关 |
package, import |
| 异常处理 |
try, catch, finally, throw, throws |
四、数据类型
Java 数据类型分为两大类:基本类型 和 引用类型。
基本数据类型 (8种)
| 类型 |
大小 |
默认值 |
范围 |
示例 |
byte |
1 字节 |
0 |
-128 ~ 127 |
byte b = 100; |
short |
2 字节 |
0 |
-32768 ~ 32767 |
short s = 1000; |
int |
4 字节 |
0 |
-2^31 ~ 2^31-1 |
int i = 100000; |
long |
8 字节 |
0L |
-2^63 ~ 2^63-1 |
long l = 100000L; |
float |
4 字节 |
0.0f |
单精度 |
float f = 3.14f; |
double |
8 字节 |
0.0d |
双精度 |
double d = 3.14159; |
char |
2 字节 |
'' |
0 ~ 65535 (Unicode) |
char c = 'A'; |
boolean |
1 位 |
false |
true / false |
boolean flag = true; |
引用数据类型
- 类 (class)
- 接口 (interface)
- 数组 (array)
- 字符串
String
- 枚举 (enum)
String str = "hello";
int[] arr = {1, 2, 3};
五、数据类型拓展及常见面试题
进制表示
int bin = 0b10; // 二进制: 0b 开头 → 2
int oct = 010; // 八进制: 0 开头 → 8
int dec = 10; // 十进制
int hex = 0x10; // 十六进制: 0x 开头 → 16
浮点数精度问题
// 浮点数存在精度损失,应避免直接比较
float a = 0.1f;
double b = 1.0 / 10;
System.out.println(a == b); // false!
// 正确做法:使用 BigDecimal 进行精确计算
import java.math.BigDecimal;
BigDecimal bd1 = new BigDecimal("0.1");
BigDecimal bd2 = new BigDecimal("0.1");
Unicode 编码
char c1 = 'A';
char c2 = '\u00061'; // Unicode 表示 A
System.out.println(c1 == c2); // true
字符串比较
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1 == s2); // true (同一常量值)
System.out.println(s1 == s3); // false (不同对象)
System.out.println(s1.equals(s3)); // true (内容相同)
六、类型转换
自动类型转换(隐式)
规则: 小类型 → 大类型,自动完成
byte → short → int → long → float → double
char → int
int i = 100;
long l = i; // int → long,自动转换
double d = l; // long → double,自动转换
强制类型转换(显式)
语法: (目标类型) 值
double d = 3.14;
int i = (int) d; // 3,丢失小数部分
// 内存溢出问题
int money = 10_0000_0000; // 10亿
int years = 20;
long total = money * years; // 溢出! 计算时仍为 int
long total2 = (long) money * years; // 正确,先转换再运算
七、变量、常量、作用域
变量分类
public class Demo {
// 类变量 (静态变量): 属于类,所有实例共享
static double salary = 2500;
// 实例变量: 属于对象,每个实例各自拥有
String name;
int age;
public void method() {
// 局部变量: 定义在方法内,必须初始化才能使用
int localVar = 10;
}
}
| 类型 |
存储位置 |
生命周期 |
默认值 |
| 类变量 |
方法区 |
类加载→类卸载 |
有(0/false/null) |
| 实例变量 |
堆内存 |
对象创建→对象回收 |
有(0/false/null) |
| 局部变量 |
栈内存 |
方法调用→方法结束 |
无,必须手动初始化 |
常量
// final 修饰,值不可改变
static final double PI = 3.1415926;
// 命名规范:全大写 + 下划线分隔
八、基础运算符
算术运算符
| 运算符 |
说明 |
+ |
加 / 字符串连接 |
- |
减 |
* |
乘 |
/ |
除(整数除法返回整数,舍弃小数) |
% |
取模(取余数) |
int a = 10;
int b = 20;
// 运算时存在自动类型提升:
// 有 long → 结果为 long
// 有 double → 结果为 double
// 默认 int 以下提升为 int
扩展赋值运算符
a += b; // a = a + b
a -= b; // a = a - b
a *= b; // a = a * b
a /= b; // a = a / b
a %= b; // a = a % b
字符串连接符 +
String s = "hello" + "world";
int a = 10;
int b = 20;
System.out.println("" + a + b); // 1020 (字符串)
System.out.println(a + b + ""); // 30 (先计算再拼接)
九、自增自减运算符 & Math 类
自增自减
int a = 3;
int b = a++; // b = 3, a = 4 (先用后加)
int c = ++a; // c = 5, a = 5 (先加后用)
int d = a--; // 先用后减
int e = --a; // 先减后用
Math 类常用方法
Math.pow(2, 3); // 8.0 (2的3次方)
Math.sqrt(16); // 4.0 (平方根)
Math.abs(-5); // 5 (绝对值)
Math.max(3, 7); // 7 (最大值)
Math.min(3, 7); // 3 (最小值)
Math.random(); // [0.0, 1.0) 随机数
Math.round(3.5); // 4 (四舍五入)
Math.floor(3.8); // 3.0 (向下取整)
Math.ceil(3.2); // 4.0 (向上取整)
十、逻辑运算符 & 位运算符
逻辑运算符
boolean a = true, b = false;
a && b; // false (逻辑与,短路)
a || b; // true (逻辑或,短路)
!a; // false (逻辑非)
// 短路与 && vs 普通与 &
// a && b: a 为 false 时不再计算 b
// a & b: 总是计算两边
位运算符(直接操作二进制位)
int a = 0b1100; // 12
int b = 0b1010; // 10
a & b; // 0b1000 (按位与)
a | b; // 0b1110 (按位或)
a ^ b; // 0b0110 (按位异或)
~a; // 按位取反
// 位移
a << 2; // 左移,低位补0
a >> 2; // 右移,高位补符号位
a >>> 2; // 无符号右移,高位补0
// 位运算效率极高
// a * 2 等价于 a << 1
// a / 2 等价于 a >> 1
十一、三元运算符
// 语法: 条件 ? 表达式1 : 表达式2
int score = 80;
String result = score >= 60 ? "及格" : "不及格";
// 运算符优先级: () > 算术 > 关系 > 逻辑 > 三元 > 赋值
// 不确定时使用括号明确优先级
十二、包机制
package 声明
// 定义包(必须在文件第一行)
package com.example.demo;
public class MyClass {
// ...
}
import 导入
// 导入单个类
import java.util.Date;
// 导入包下所有类(不导入子包)
import java.util.*;
// 使用类时可以直接写全限定名,无需 import
java.util.Scanner scanner = new java.util.Scanner(System.in);
包的命名规范
- 全部小写
- 使用域名的倒写:
com.company.project.module
- 例如:
com.alibaba.fastjson
十三、JavaDoc 生成文档
文档注释标签
| 标签 |
说明 |
@author |
作者 |
@version |
版本 |
@param |
方法参数说明 |
@return |
返回值说明 |
@throws |
异常说明 |
@see |
参考链接 |
@since |
起始版本 |
@deprecated |
已废弃 |
示例
/**
* 计算两个整数的和
*
* @param a 第一个加数
* @param b 第二个加数
* @return 两数之和
* @throws IllegalArgumentException 参数为负时抛出
*/
public int add(int a, int b) {
if (a < 0 || b < 0) {
throw new IllegalArgumentException("参数不能为负");
}
return a + b;
}
生成 JavaDoc
命令行:
javadoc -d doc -author -version MyClass.java
# -d: 输出目录
# -encoding UTF-8 -charset UTF-8: 处理中文
IDEA: Tools → Generate JavaDoc → 配置参数即可
补充参考