作者:IvanCodes
发布时间:2025年4月28日
专栏:Java教程
哈喽,各位 CSDN 的小伙伴们! 这部分内容虽然基础,但 极其重要,是后续学习所有高级特性的基石。准备好了吗?让我们一起稳扎稳打,拿下这些核心概念!
想象一下,你在看一本复杂的书,如果作者在旁边贴了一些“便利贴”解释难点,是不是会好懂很多?Java 的注释就是 代码中的“便利贴”!
它们的作用:
Java 主要有三种注释:
//
)
//
开始,到这一行的末尾,都是注释内容。// 这是一条单行注释,用来解释下面这行代码的作用
int age = 25; // 定义一个表示年龄的变量
/* ... */
)
/*
开始,以 */
结束,中间的所有内容都是注释。/*
这是
一段
多行注释。
它可以用来详细解释一个方法或一段复杂的逻辑。
*/
int calculateSum(int a, int b) {
/*
int temp = a; // 临时注释掉的调试代码
a = b;
b = temp;
*/
return a + b;
}
/** ... */
) ✨
/**
开始,以 */
结束。javadoc
工具提取出来,自动生成程序文档 (API 文档)。@
标签,如 @param
, @return
, @author
, @version
等。/**
* 这是一个计算两个整数之和的工具类。
* @author IvanCodes
* @version 1.0
*/
public class MathUtils {
/**
* 计算两个整数的和。
* @param num1 第一个整数。 (参数说明)
* @param num2 第二个整数。 (参数说明)
* @return 两个整数的和。 (返回值说明)
*/
public int add(int num1, int num2) {
// 方法体
return num1 + num2;
}
}
养成写注释的好习惯,未来的你会感谢现在的自己!
1. 关键字 (Keywords)
public
, class
, static
, void
, int
, float
, if
, else
, for
, while
, new
, this
, super
, package
, import
, final
, abstract
, interface
等等。true
, false
, null
虽然看起来像关键字,但严格来说它们是字面量 (Literals),但你同样不能把它们用作标识符。记忆技巧: 关键字就像编程语言里的“专用词汇”,有固定用法,不能乱用。
2. 标识符 (Identifiers) ️
标识符就是你 自己起的名字,用来标识程序中的各个元素,比如:
MathUtils
, SuperMan
)Flyable
, Logger
)add
, fly
, logInfo
)age
, num1
, consoleLogger
)MAX_USERS
, DEFAULT_THEME
)java.util
, com.mycompany.project
)命名规则 (必须遵守!否则编译不通过 ❌):
_
)、美元符号 ($
) 组成。age
和 Age
是两个不同的标识符)。命名规范 (强烈建议遵守!代码更专业、易读 ✅):
.
分隔 (e.g., com.ivan.utils
)。MyClass
, Flyable
, UserService
)。getUserName
, calculateTotalAmount
, studentAge
)。_
分隔 (e.g., MAX_CONNECTIONS
, DEFAULT_ENCODING
)。记住: 好的命名是好代码的开始!要做到 见名知意。
程序需要处理各种各样的数据,比如数字、文字、真假值等。数据类型就是用来定义这些数据 可以存储哪种类型的数据 以及 占用多少内存空间。
Java 的数据类型分为两大类:
1. 基本数据类型 (Primitive Types)
这是 Java 语言 内置的、最基础 的数据类型。它们直接存储 数据值 本身。
共有 8 种:
类型 | 关键字 | 大小 (字节) | 范围/描述 | 例子 | 常用场景 |
---|---|---|---|---|---|
字节型 | byte |
1 | -128 到 127 | byte b = 100; |
处理字节流、节省空间 |
短整型 | short |
2 | -32,768 到 32,767 | short s = 30000; |
较少使用,节省空间 |
整型 | int |
4 | 约 -21 亿 到 21 亿 | int i = 123456; |
最常用 的整数类型 |
长整型 | long |
8 | 非常大的整数范围 | long l = 99L; |
需要表示很大整数时 |
单精度 | float |
4 | 大约 6-7 位有效数字的浮点数 | float f = 3.14f; |
需要小数,精度要求不高 |
双精度 | double |
8 | 大约 15 位有效数字的浮点数 | double d = 3.14159; |
最常用 的小数类型 |
字符型 | char |
2 | 单个 Unicode 字符 | char c = 'A'; |
表示单个字符 |
布尔型 | boolean |
1 (逻辑上) | 只有 true 或 false 两个值 |
boolean flag = true; |
条件判断、逻辑运算 |
❗❗ 注意:
long
类型的值后面要加 L
或 l
(推荐 L
,避免与数字 1 混淆)。float
类型的值后面要加 F
或 f
。int
类型,小数默认是 double
类型。char
使用单引号 ' '
包裹。2. 引用数据类型 (Reference Types)
String
, Scanner
, 我们自己定义的 SuperMan
, MathUtils
等。Flyable
, Runnable
, List
等。int[]
, String[]
, double[][]
等。new
关键字来创建对象实例(String
有特殊处理)。null
,表示不指向任何对象。String name = "IvanCodes"; // String 是一个类 (引用类型)
int[] scores = new int[10]; // 数组是引用类型
Flyable flyer = new SuperMan(); // 接口类型变量引用实现类的对象
Scanner input = new Scanner(System.in); // Scanner 是一个类
核心区别: 基本类型存 值,引用类型存 地址。
1. 变量 (Variables)
// 声明变量 (预定盒子)
int age;
double salary;
String username;
// 初始化变量 (第一次放东西)
age = 18;
salary = 5000.50;
username = "Alice";
// 也可以声明和初始化合并在一行
char gender = 'F';
boolean isStudent = true;
// 变量的值可以改变 (更换盒子里的东西)
age = 19; // 年龄增长了
salary = salary + 1000; // 涨工资了
System.out.println("年龄: " + age); // 输出: 年龄: 19
2. 常量 (Constants)
final
关键字定义常量。// 定义常量 (声明并初始化一个封死的盒子)
final double PI = 3.14159;
final int MAX_LOGIN_ATTEMPTS = 5;
final String COMPANY_NAME = "My Awesome Company";
// 尝试修改常量的值会导致编译错误 ❌
// PI = 3.14; // Error: Cannot assign a value to final variable 'PI'
System.out.println("圆周率约等于: " + PI);
使用场景: 当某个值在程序运行期间是不变的,并且具有明确含义时,应定义为常量,可以提高代码的可读性和可维护性(比如修改时只需要改一处定义)。
有时候,我们需要将一种数据类型的值赋给另一种数据类型的变量,这就需要进行类型转换。
1. 自动类型转换 (Implicit Conversion / Widening Conversion)
byte
-> short
-> int
-> long
-> float
-> double
char
-> int
… (char 可以转换为 int 等整数类型)byte b = 10;
short s = b; // byte -> short (自动)
int i = s; // short -> int (自动)
long l = i; // int -> long (自动)
float f = l; // long -> float (自动,可能损失精度)
double d = f; // float -> double (自动)
char c = 'A';
int charValue = c; // char -> int (自动, 'A' 对应的 ASCII/Unicode 值 65)
System.out.println("Double value: " + d); // 输出: Double value: 10.0
System.out.println("Char to int: " + charValue); // 输出: Char to int: 65
2. 强制类型转换 (Explicit Conversion / Narrowing Conversion) ⚠️
(目标类型) 值;
double preciseValue = 99.99;
// int integerPart = preciseValue; // 编译错误!不能自动从 double 转 int ❌
int integerPart = (int) preciseValue; // 强制转换 (显式告知编译器我要转)
System.out.println("Integer part: " + integerPart); // 输出: Integer part: 99 (小数部分被截断,数据丢失!)
long bigNum = 10000000000L; // 一个很大的 long 值
// int smallNum = bigNum; // 编译错误!❌
int smallNum = (int) bigNum; // 强制转换
System.out.println("Small num: " + smallNum); // 输出: Small num: 1410065408 (数据溢出导致结果错误!)
int number = 65;
char letter = (char) number; // 强制转换 int -> char
System.out.println("Letter: " + letter); // 输出: Letter: A (这里转换是符合预期的)
❗❗ 强制转换需谨慎! 只有在你明确知道转换是安全的,或者能够接受可能的数据丢失时才使用。
今天我们系统地学习了 Java 的几个基石概念:
这些基础知识是你学习 Java 后面更复杂内容(如流程控制、面向对象、集合框架等)的必备前提。一定要花时间理解透彻,多动手练习!敲代码!敲代码!敲代码!重要的事说三遍!⌨️️
下一篇,我们将深入探讨 Java 的运算符和流程控制语句,让你的程序真正“动”起来!敬请期待!
觉得这篇笔记对你有帮助吗?别一键三连哦! 你的支持是我最大的动力! 有任何问题或想法,欢迎在评论区留言交流!