Java 变量、运算符与表达式详解
1. 注释的使用
在 Java 编程中,多行注释的行数没有限制。选择哪种类型的注释取决于具体情况。优秀的 Java 程序员会在代码中大量使用注释,以添加额外的解释、见解或上下文。例如:
/*
下周六的中奖彩票号码是
9,7,12,34,29,22
但你还是想开发安卓应用吗?
*/
2. 变量的存储与使用
可以将变量看作是一个命名的存储盒。我们为其选择一个名称,比如
variableA
,这些名称就像是我们访问用户安卓设备内存的窗口。变量是内存中的值,必要时可以通过其名称进行使用或修改。
计算机内存有一个高度复杂的寻址系统,但我们无需与之交互。Java 变量允许我们为程序所需处理的所有数据设计方便的名称。以下是可以对变量进行的一些操作:
- 为
variableA
赋值
- 将
variableA
与
variableB
相加
- 测试
variableB
的值并根据结果采取行动
在典型的应用中,可能会有一个名为
unreadMessages
的变量,用于存储用户未读消息的数量。当新消息到达时可以增加其值,用户阅读消息时减少其值,并在应用布局中显示该值。可能出现的情况如下:
- 用户收到 3 条新消息,将 3 加到
unreadMessages
的值上。
- 用户登录应用,使用 Toast 显示一条消息以及
unreadMessages
中存储的值。
- 用户发现一堆消息来自她不喜欢的人,删除 6 条消息,从
unreadMessages
中减去 6。
变量命名时,如果不使用 Java 限制的字符或关键字,可以随意命名。但在实践中,最好采用命名约定,使变量名保持一致。常见的命名约定是驼峰命名法,即变量名以小写字母开头,若名称中有多个单词,第二个及后续单词首字母大写。例如:
-
unreadMessages
-
contactName
-
isFriend
3. 变量的类型
即使是简单的应用也会有很多变量。为了存储和操作不同类型的数据,Java 提供了多种类型。
3.1 基本类型
基本类型是 Java 中最常用的内置类型,它们使用预定义的内存量。以下是主要的基本类型:
| 类型 | 描述 | 内存使用 | 示例 |
| ---- | ---- | ---- | ---- |
|
int
| 用于存储整数 | 32 位 |
int unreadMessages;
|
|
long
| 用于存储更大的整数 | 64 位 |
long millisecondsElapsed;
|
|
float
| 用于存储浮点数 | - |
float accountBalance;
|
|
double
| 当
float
的精度不够时使用 | - | - |
|
boolean
| 只能取
true
或
false
| - |
boolean isFriend;
|
|
char
| 用于存储单个字母数字字符 | - |
char contactFirstInitial;
|
每个基本类型在使用前必须告知 Java 编译器其类型,否则会导致错误。例如,如果尝试将联系人姓名存储在用于存储数字的
int
类型变量中,程序会出错。
3.2 引用类型
引用类型与基本类型不同,它们不定义具体的内存量。因为在程序运行之前,我们通常不知道需要存储多少数据。
- 字符串(Strings) :字符串是一种特殊的引用类型,用于存储字母数字数据,如联系人姓名。可以将其看作是不断扩展和收缩的存储盒。例如:
String messageText = "Hi reader, I just thought I would let you know that Charles Babbage was an early computing pioneer and he invented the difference engine. If you want to know more about him, you can click this link www.charlesbabbage.net.";
- 数组(Arrays) :数组是一种存储大量相同类型变量的方式,便于快速高效地访问。可以将数组想象成仓库中的一个通道,所有相同类型的变量按精确顺序排列。
- 类(Classes) :类也是一种引用类型,后续会详细介绍。
4. 变量的声明与初始化
在使用变量之前,必须先声明其类型和名称。声明变量的语法很简单,只需指定类型,然后留一个空格,再输入变量名,并以分号结尾。例如:
int unreadMessages;
long millisecondsElapsed;
float accountBalance;
boolean isFriend;
char contactFirstInitial;
String messageText;
初始化是为变量赋予初始值的过程。可以分别进行声明和初始化,也可以将两者结合。例如:
// 分别声明和初始化
int unreadMessages;
unreadMessages = 10;
// 结合声明和初始化
int unreadMessages = 10;
需要注意的是,使用变量前必须同时进行声明和初始化,否则会导致编译错误。例如:
int a;
// 尝试将 a 输出到控制台
Log.i("info", "int a = " + a);
// 错误:变量 a 可能未初始化
5. 使用运算符修改变量的值
在程序中,我们通常需要对变量的值进行操作,这可以通过运算符来实现。以下是一些常见的 Java 运算符:
5.1 赋值运算符
赋值运算符
=
用于将运算符右侧的值赋给左侧的变量。例如:
unreadMessages = newMessages;
5.2 加法运算符
加法运算符
+
用于将运算符两侧的值相加,通常与赋值运算符结合使用。例如:
unreadMessages = newMessages + unreadMessages;
5.3 减法运算符
减法运算符
-
用于从运算符左侧的值中减去右侧的值,通常也与赋值运算符结合使用。例如:
unreadMessages = unreadMessages - 1;
5.4 除法运算符
除法运算符
/
用于将左侧的数字除以右侧的数字,同样常与赋值运算符结合使用。例如:
fairShare = numSweets / numChildren;
5.5 乘法运算符
乘法运算符
*
用于将变量和数字相乘,也常与赋值运算符结合使用。例如:
answer = 10 * 10;
5.6 递增运算符
递增运算符
++
是一种快速给某个值加 1 的方法。例如:
myVariable = myVariable + 1;
// 可以简化为
myVariable++;
通过合理使用这些运算符,可以对变量进行各种操作,实现程序的逻辑功能。
下面是一个简单的流程图,展示了变量声明、初始化和使用运算符操作的基本流程:
graph TD;
A[声明变量] --> B[初始化变量];
B --> C[使用运算符操作变量];
C --> D[继续其他操作];
Java 变量、运算符与表达式详解(续)
6. 运算符的优先级和结合性
在一个表达式中,可能会同时使用多个运算符。为了确定运算的顺序,Java 为每个运算符定义了优先级和结合性。优先级决定了哪个运算符先执行,而结合性决定了具有相同优先级的运算符的执行顺序。
以下是常见运算符的优先级和结合性:
| 运算符 | 优先级 | 结合性 |
| ---- | ---- | ---- |
|
()
| 最高 | 从左到右 |
|
++
,
--
| 高 | 从右到左 |
|
*
,
/
,
%
| 中 | 从左到右 |
|
+
,
-
| 中 | 从左到右 |
|
=
,
+=
,
-=
,
*=
,
/=
| 低 | 从右到左 |
例如,在表达式
2 + 3 * 4
中,由于乘法运算符
*
的优先级高于加法运算符
+
,所以先计算
3 * 4
,结果为 12,然后再加上 2,最终结果为 14。如果想要先计算加法,可以使用括号改变运算顺序,如
(2 + 3) * 4
,先计算括号内的
2 + 3
得到 5,再乘以 4,结果为 20。
7. 表达式
表达式是由变量、常量、运算符和方法调用组成的序列,它可以计算出一个值。例如:
int result = 2 + 3 * 4;
在这个例子中,
2 + 3 * 4
就是一个表达式,它计算出一个整数值 14,并将其赋值给变量
result
。
表达式可以嵌套,例如:
int a = 2;
int b = 3;
int c = 4;
int result = (a + b) * (b + c);
在这个例子中,
(a + b)
和
(b + c)
是两个子表达式,它们分别计算出值 5 和 7,然后将这两个值相乘,得到最终结果 35。
8. 类型转换
在 Java 中,不同类型的数据之间可以进行转换。类型转换分为隐式转换和显式转换。
8.1 隐式转换
隐式转换是指在不需要程序员干预的情况下,Java 自动进行的类型转换。当一个较小范围的数据类型赋值给一个较大范围的数据类型时,会发生隐式转换。例如:
int a = 10;
long b = a; // 隐式转换,int 类型转换为 long 类型
8.2 显式转换
显式转换是指程序员通过强制类型转换运算符来进行的类型转换。当需要将一个较大范围的数据类型转换为较小范围的数据类型时,需要进行显式转换。例如:
long a = 10L;
int b = (int) a; // 显式转换,long 类型转换为 int 类型
需要注意的是,显式转换可能会导致数据丢失。例如,如果将一个超出
int
范围的
long
类型值转换为
int
类型,会发生溢出。
9. 总结与示例代码
通过前面的介绍,我们了解了 Java 变量、运算符和表达式的基本概念和使用方法。下面是一个完整的示例代码,展示了变量的声明、初始化、运算符的使用和类型转换:
public class VariableOperatorExample {
public static void main(String[] args) {
// 声明并初始化变量
int unreadMessages = 10;
int newMessages = 5;
float accountBalance = 100.5f;
float deposit = 20.5f;
// 使用运算符操作变量
unreadMessages = unreadMessages + newMessages;
accountBalance = accountBalance + deposit;
// 输出结果
System.out.println("未读消息数量: " + unreadMessages);
System.out.println("账户余额: " + accountBalance);
// 类型转换
long milliseconds = 1000L;
int seconds = (int) (milliseconds / 1000);
System.out.println("秒数: " + seconds);
}
}
在这个示例代码中,我们声明并初始化了一些变量,使用运算符对变量进行了操作,并进行了类型转换。最后,我们将结果输出到控制台。
下面是一个 mermaid 格式的流程图,展示了整个示例代码的执行流程:
graph TD;
A[声明并初始化变量] --> B[使用运算符操作变量];
B --> C[输出结果];
C --> D[进行类型转换];
D --> E[输出转换结果];
通过本文的介绍,我们深入了解了 Java 变量、运算符和表达式的相关知识。掌握这些知识对于编写高效、正确的 Java 程序至关重要。希望本文能对你有所帮助。

1078

被折叠的 条评论
为什么被折叠?



