Java基础语法记录(第一期):数据类型与面向对象基石
本文聚焦Java核心基础语法,从数据类型体系、变量常量、运算符到面向对象基础,结合源码案例与实战演练,夯实Java编程根基,同时融入AI辅助语法学习技巧,助力高效掌握Java基础核心。
一、Java数据类型体系全解析
Java是强类型编程语言,数据类型的定义严格规范,整体分为基本数据类型和引用数据类型两大类,这是Java内存管理、数据存储的核心基础,也是面试与开发中高频涉及的知识点。
1.1 基本数据类型(四类八种)
Java基本数据类型共四类八种,分别为数值型(整数、浮点)、字符型、布尔型,不同类型的内存占用、取值范围存在明确差异,JVM会为其分配固定大小的内存空间,存储在栈内存中,访问效率极高。
| 数据类型 | 关键字 | 内存占用(字节) | 取值范围 | 默认值 | 适用场景 |
|---|---|---|---|---|---|
| 字节型 | byte | 1 | -128 ~ 127 | 0 | 网络传输、文件流操作 |
| 短整型 | short | 2 | -32768 ~ 32767 | 0 | 节省内存的小数值存储 |
| 整型 | int | 4 | -2³¹ ~ 2³¹-1 | 0 | 通用整数存储(最常用) |
| 长整型 | long | 8 | -2⁶³ ~ 2⁶³-1 | 0L | 大数值整数存储 |
| 单精度浮点型 | float | 4 | 1.4e-45 ~ 3.4e38 | 0.0f | 精度要求较低的小数 |
| 双精度浮点型 | double | 8 | 4.9e-324 ~ 1.8e308 | 0.0d | 高精度小数存储(最常用) |
| 字符型 | char | 2 | 0 ~ 65535 | '\u0000' | 单个字符、Unicode编码 |
| 布尔型 | boolean | 1 | true / false | false | 逻辑判断、条件控制 |
核心特性:
-
基本数据类型无继承关系,直接存储数据值,不属于对象;
-
整数默认类型为
int,小数默认类型为double,声明long需加L,float需加f; -
char类型本质是Unicode编码,可存储中文、英文、符号等单个字符。
// 基本数据类型声明与赋值
public class BasicDataTypeDemo {
public static void main(String[] args) {
// 整数类型
byte b = 100;
short s = 2000;
int i = 100000;
long l = 10000000000L;
// 浮点类型
float f = 3.14f;
double d = 3.1415926535;
// 字符类型
char c = 'A';
char ch = '中';
// 布尔类型
boolean flag = true;
// 控制台输出
System.out.println("byte值:" + b);
System.out.println("char中文:" + ch);
System.out.println("boolean状态:" + flag);
}
}
1.2 引用数据类型
引用数据类型以对象为核心,存储的是数据在堆内存中的内存地址,而非数据本身,主要包括类、接口、数组、枚举、注解等。
核心特性:
-
引用变量存储在栈内存,实际对象存储在堆内存;
-
默认值为
null,未初始化时不能调用方法/属性; -
所有引用数据类型最终都继承自
Object类。
// 引用数据类型示例:String类、数组
public class RefDataTypeDemo {
public static void main(String[] args) {
// String引用类型
String str = "Java基础语法";
// 数组引用类型
int[] arr = {1, 2, 3, 4, 5};
// 输出引用类型的内容
System.out.println("字符串内容:" + str);
System.out.println("数组第一个元素:" + arr[0]);
}
}
1.3 包装类与自动装箱拆箱
Java为8种基本数据类型提供了对应的包装类,将基本类型转为对象,支持泛型、集合存储等场景,JDK 1.5后引入自动装箱、自动拆箱机制,简化基本类型与包装类的转换。
| 基本类型 | 包装类 | 核心方法 |
|---|---|---|
| byte | Byte | parseByte()、valueOf() |
| short | Short | parseShort()、valueOf() |
| int | Integer | parseInt()、valueOf() |
| long | Long | parseLong()、valueOf() |
| float | Float | parseFloat()、valueOf() |
| double | Double | parseDouble()、valueOf() |
| char | Character | isDigit()、toUpperCase() |
| boolean | Boolean | parseBoolean()、valueOf() |
| 自动装箱/拆箱源码原理: |
以Integer为例,自动装箱底层调用Integer.valueOf(),自动拆箱底层调用intValue(),JVM通过缓存池优化常用数值(-128~127),避免重复创建对象。
// 自动装箱与拆箱实战
public class WrapperClassDemo {
public static void main(String[] args) {
// 自动装箱:int → Integer
Integer num1 = 100;
// 自动拆箱:Integer → int
int num2 = num1;
// 包装类方法调用
int num3 = Integer.parseInt("123");
System.out.println("字符串转整数:" + num3);
// 缓存池验证:-128~127复用对象
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true
}
}
二、变量与常量的定义与使用
变量与常量是Java存储数据的核心载体,二者的核心区别在于值是否可修改,合理定义变量与常量是规范编码的基础。
2.1 变量的分类与作用域
根据定义位置不同,变量分为局部变量、成员变量(实例变量)、静态变量(类变量),作用域与生命周期存在明显差异。
| 变量类型 | 定义位置 | 修饰符 | 生命周期 | 作用域 | 默认值 |
|---|---|---|---|---|---|
| 局部变量 | 方法/代码块内部 | 无 | 方法/代码块执行期间 | 方法/代码块内部 | 无,必须手动赋值 |
| 成员变量 | 类内、方法外 | 无static | 对象创建到销毁 | 整个类 | 数据类型默认值 |
| 静态变量 | 类内、方法外 | static | 类加载到卸载 | 整个类、所有对象共享 | 数据类型默认值 |
// 变量分类实战
public class VariableDemo {
// 成员变量(实例变量)
private int instanceVar = 10;
// 静态变量(类变量)
public static String staticVar = "静态变量";
public void test() {
// 局部变量:必须赋值才能使用
int localVar = 20;
System.out.println("局部变量:" + localVar);
System.out.println("成员变量:" + instanceVar);
System.out.println("静态变量:" + staticVar);
}
public static void main(String[] args) {
new VariableDemo().test();
}
}
2.2 常量的定义与使用
常量使用final关键字修饰,一旦赋值不可修改,分为局部常量、成员常量、静态常量,开发中常用于固定配置、枚举值等场景。
规范:常量命名采用全大写+下划线分隔,如MAX_VALUE、DEFAULT_SIZE。
// 常量定义实战
public class ConstantDemo {
// 静态常量(最常用)
public static final int MAX_COUNT = 100;
// 成员常量
private final double PI = 3.1415926;
public static void main(String[] args) {
// 局部常量
final String VERSION = "JDK 17";
System.out.println("最大数量:" + MAX_COUNT);
System.out.println("圆周率:" + new ConstantDemo().PI);
System.out.println("版本号:" + VERSION);
}
}
三、Java运算符全维度精讲
运算符是Java执行运算、逻辑判断的核心工具,共分为6大类,掌握运算符优先级与使用场景,是编写高效代码的关键。
### 3.1 运算符分类与核心用法
-
算术运算符:
+、-、*、/、%、++、--,用于数值运算; -
赋值运算符:
=、+=、-=、*=、/=、%=,简化变量赋值; -
比较运算符:
==、!=、>、<、>=、<=,返回布尔值; -
逻辑运算符:
&&(短路与)、||(短路或)、!(非),用于逻辑判断; -
位运算符:
&、|、^、~、<<、>>、>>>,操作二进制位; -
三元运算符:
条件表达式 ? 表达式1 : 表达式2,简化if-else判断。
运算符优先级:单目运算符 > 算术运算符 > 移位运算符 > 比较运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符。
// 运算符实战
public class OperatorDemo {
public static void main(String[] args) {
// 算术运算符
int a = 10;
int b = 3;
System.out.println("取余运算:" + a % b); // 1
System.out.println("自增运算:" + a++); // 10(后自增,先赋值再+1)
// 逻辑运算符(短路特性)
boolean flag1 = false && (++a > 0);
System.out.println("短路与后a的值:" + a); // 11,右侧未执行
// 三元运算符
int max = a > b ? a : b;
System.out.println("最大值:" + max);
}
}
3.2 短路运算符核心特性
&&和||具备短路特性:
-
&&:左侧为false,右侧不执行; -
||:左侧为true,右侧不执行。
该特性可避免空指针、越界等异常,是开发中高频使用的优化技巧。
四、面向对象基础:类与对象
Java是纯面向对象编程语言,类是对象的模板,对象是类的实例,封装、继承、多态是面向对象三大特性,本期先聚焦类与对象的定义、封装特性。
4.1 类的定义与对象创建
类使用class关键字定义,包含属性(成员变量)和方法(成员函数),对象通过new关键字实例化,分配堆内存空间。
// 定义类:学生类
public class Student {
// 成员属性
private String name;
private int age;
// 成员方法
public void study() {
System.out.println(name + "正在学习Java");
}
// getter/setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// 实例化对象
class ObjectDemo {
public static void main(String[] args) {
// 创建Student对象
Student stu = new Student();
// 给对象赋值
stu.setName("张三");
stu.setAge(20);
// 调用对象方法
stu.study();
}
}
4.2 封装特性
封装是面向对象的核心特性,通过private修饰私有属性,提供public的getter/setter方法访问属性,实现数据隐藏、安全访问,避免外部直接修改属性导致数据异常。
封装优势:
-
保护数据安全,限制非法访问;
-
简化代码,外部无需关注内部实现;
-
提升代码可维护性,便于修改内部逻辑。
4.3 构造方法与this关键字
构造方法:与类名同名、无返回值,用于对象初始化,无参构造是默认提供的,可自定义有参构造;
this关键字:代表当前对象,用于区分局部变量与成员变量,调用本类构造方法、属性、方法。
// 构造方法与this关键字
public class User {
private String username;
private String password;
// 无参构造
public User() {}
// 有参构造
public User(String username, String password) {
// this区分局部变量与成员变量
this.username = username;
this.password = password;
}
// 打印用户信息
public void showInfo() {
// this调用当前对象属性
System.out.println("用户名:" + this.username + ",密码:" + this.password);
}
}
class ConstructorDemo {
public static void main(String[] args) {
User user = new User("admin", "123456");
user.showInfo();
}
}
五、AI辅助Java基础语法学习实战
在AI时代,借助大模型工具可大幅提升Java语法学习效率,快速排查错误、生成案例、理解原理,以下是高频实用场景:
5.1 AI语法错误排查
将报错代码复制给AI,快速定位语法问题,例如:
问题:int a = 10; int b = 0; int c = a/b; 运行报错,帮忙分析原因
AI会直接指出除零异常,并给出解决方案。
5.2 AI生成语法测试案例
输入需求,自动生成符合规范的代码案例,例如:
生成Java基本数据类型+包装类的测试代码,包含自动装箱拆箱
5.3 AI讲解底层原理
针对复杂知识点,如包装类缓存池、自动装箱拆箱,输入:
讲解Java Integer包装类缓存池的实现原理,-128~127为什么复用对象
AI会结合源码、JVM机制详细解析,比死记硬背更高效。
六、实战练习与知识点总结
6.1 综合实战案例
结合本期知识点,编写综合代码,巩固数据类型、变量、运算符、类与对象:
// 综合实战:计算器类
public class Calculator {
// 静态常量
public static final double PI = 3.1415926;
// 加法运算
public int add(int a, int b) {
return a + b;
}
// 圆面积计算
public double circleArea(double r) {
return PI * r * r;
}
public static void main(String[] args) {
Calculator cal = new Calculator();
// 调用加法
System.out.println("10+20=" + cal.add(10, 20));
// 计算圆面积
System.out.println("半径为5的圆面积:" + cal.circleArea(5));
}
}
6.2 知识点总结
-
Java数据类型分为基本类型(8种)和引用类型,包装类实现基本类型与对象的转换;
-
变量分局部、成员、静态,常量用final修饰,命名遵循全大写规范;
-
运算符6大类,短路逻辑运算符可提升代码效率;
-
类是对象模板,封装通过private+getter/setter实现,构造方法用于对象初始化;
-
AI工具可辅助语法学习、错误排查、原理理解,大幅提升学习效率。
本期Java基础语法精讲覆盖Java编程根基,下期将深入流程控制、数组、字符串等核心知识点,持续夯实Java基础,为框架学习与项目开发做好铺垫。