深挖Java基础之:变量与类型
今天我要介绍的是在Java中对变量和类型的一些相关知识点的介绍,包括对基本数据类型,引用类型,变量命名规则和类型转换以及其注意事项的解明。
java变量与类型:Java 是静态类型语言,变量必须先声明类型后使用。变量是存储数据值的容器,而类型决定了变量能存储的数据种类、内存大小及可执行的操作。
基本数据类型:(见下表表格所示)
基本数据类型八种数据类型的表格展示说明:
1. 整型(整数)
类型 | 位数 | 取值范围 | 示例 |
---|---|---|---|
byte | 8 | -128 ~ 127 | byte b = 100; |
short | 16 | -32768 ~ 32767 | short s = 500; |
int | 32 | -2³¹ ~ 2³¹-1 | int age = 25; |
long | 64 | -2⁶³ ~ 2⁶³-1 | long big = 100L; |
2.浮点型(小数)
类型 | 位数 | 精度 | 示例 |
---|---|---|---|
float | 32 | 约 6-7 位小数 | float pi = 3.14f; |
double | 64 | 约 15 位小数 | double price = 19.99; |
3.字符型(单个字符)
类型 | 位数 | 说明 | 示例 |
---|---|---|---|
char | 16 | Unicode 字符 | char c = 'A'; |
4.布尔型(逻辑值)
类型 | 位数 | 取值 | 示例 |
---|---|---|---|
boolean | 1 | true/false | boolean flag = true; |
引用类型
引用类型变量存储的是对象的内存地址(引用),而非直接的值。常见类型:
String(字符串):
String name = "Alice"; // 双引号包裹
String message = "Hello, " + name; // 拼接字符串
数组:
int[] numbers = {1, 2, 3}; // 一维数组
String[][] names = {{"Tom", "Jerry"}, {"Alice"}}; // 二维数组
注:二维数组介绍:
二维数组是由多个一维数组组成的数组,每个一维数组都可以有不同的长度。在这个例子中,names是一个二维数组,它包含两个一维数组。第一个一维数组包含两个元素 "Tom" 和 "Jerry",第二个一维数组只包含一个元素 "Alice"。可以把二维数组看作是一个表格或者是一个矩阵,其中每个元素都可以通过两个索引来访问,第一个索引表示行,第二个索引表示列。
类对象:
// 自定义类:
class Person {
String name;
int age;
}
Person p = new Person(); // 创建对象
p.name = "Bob"; // 访问成员变量
介绍:类对象是面向对象编程中的一个重要概念,它是指在程序中定义的一种数据结构,用来表示一类具有相似属性和行为的对象。类对象包含了数据成员和方法成员,数据成员用来描述对象的状态,而方法成员则定义了对象的行为。
变量命名规则
-
合法字符:字母、数字、
_
、$
,但不可以数字开头。 -
区分大小写:
age
和Age
是不同的变量。 -
驼峰命名法:如
studentName
。 - 1:驼峰命名法:CamelCase(驼峰命名法)是一种变量命名规则,其特点是在命名时使用连续的单词,并且每个单词的首字母大写,除了第一个单词之外。这种命名规则使得变量名更易阅读和理解,通常用于编程语言中的变量、函数名或类名的命名。例如,"myVariableName"就是一个使用了驼峰命名法的变量名。
-
禁止关键字:如
int
,class
不可作为变量名。
正示例:
int count = 10;
String user_name = "Lucy";
double $price = 29.99;
倒示例:
int 2num = 5; // 以数字开头
float class = 3.14f; // 使用关键字
类型转换
1. 自动类型转换(隐匿)
小范围类型 → 大范围类型时自动转换:
int a = 100;
long b = a; // 自动转为 long
double c = b; // 自动转为 double
2.强制类型转换(凸显)
大范围类型 → 小范围类型时需强制转换,可能丢失精度:
long x = 1000L;
int y = (int) x; // 强制转换
double d = 3.14;
int i = (int) d; // i = 3(小数部分丢失)
注意事项
变量初始化:局部变量得显式初始化,不然编译结果会显示报错。
int x; // 错误!未初始化
int y = 0; // 正确
注:默认值==》成员变量有默认值(如 int
默认为 0,引用类型默认为 null
)。
字符串拼接:+
可将其他类型自动转为字符串=》
String info = "价格:" + 19.99; // "价格:19.99"
代码示例:
1.基本类型 vs 包装类
基本类型高效,但无法用于泛型;包装类( 比如:Integer
)提供对象操作:
int primitive = 42;
Integer wrapper = Integer.valueOf(42); // 装箱
int unboxed = wrapper.intValue(); // 拆箱
2.字符串与类型转换
引用类型的常见操作:
String s = "123";
int num = Integer.parseInt(s); // 字符串转int
优势与劣势:
①:优势
-
类型安全:静态类型在编译时检查错误,减少运行时问题。
-
性能优化:基本类型直接存储在栈内存,访问速度快。
-
清晰的代码结构:类型声明增强代码可读性。
-
面向对象支持:引用类型支持多态、继承等特性。
②:劣势
-
冗长的类型声明:需显式声明类型,代码不够简洁(对比动态类型语言)。
-
基本类型与包装类的复杂性:需处理自动装箱/拆箱(可能引发
NullPointerException
)。 -
类型转换风险:强制转换可能导致数据丢失或运行时错误。
总结:Java 的类型系统通过严格的静态类型检查保障了代码的健壮性,但牺牲了一定的灵活性。开发者需在类型选择、转换和内存管理中权衡性能与安全性。掌握变量与类型是 Java 编程的基础,合理选择类型能提升代码效率和可读性。