1. java基础

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 → 配置参数即可


补充参考

章节 原文链接
全篇 CSDN - Shane_Cheng0202
posted @ 2026-06-24 15:21  哇扣  阅读(3)  评论(0)    收藏  举报