- 变量、数据类型、表达式和运算符
一、标识符
1、标识符的概念
Java所有的组成部分都需要名字,如类名、变量名以及方法名,所有这些名称所使用的字符串序列即被称为标识符。
2、标识符的规则
2.1、基本规则
关于Java标识符,有以下几点强制性的规则需要注意:
- 所有的标识符都应该以字母(
A
-Z
或者a
-z
)、美元符($
)、或者下划线(_
)开始。 - 首字符之后可以是字母(
A
-Z
或者a
-z
)、美元符($
)、下划线(_
)或数字的任何字符组合。 - 关键字不能用作标识符。
- 标识符是大小写敏感的。
2.2、常见约定
在强制性的规则之外,开发过程中,一般需要遵循以下约定:
- 标识符要符合语义信息,即见名知意。
- 包名所有字母小写。
- 类名每个单词首字母大写,其它小写,如:CollegeStudent。
- 变量和方法的第一个单词小写,从第二个单词开始首字母大写,如:collegeStudent。
- 类名和变量通常为名词或名词性短语,方法名通常为动词或动宾短语。
- 常量的所有字母大写,每个单词之间用下划线(_)连接。
2.3、Java中的关键字汇总
下面将列出了Java关键字(保留字),共50个,这些保留字不能用于任何标识符。
二、基本数据类型
1、数据类型的概念
数据是描述客观事物的数字、字母以及能够输入到计算机中的符号。例如“武松”
、“软件一班”
、28
、170
等都是数据。数据可根据其特点进行分类,例如“武松”
和“软件一班”
可以归为字符串类,28
和170
可归为数字类。在Java中数据类型分为两大类:基本数据类型和引用数据类型。
2、基本数据类型
Java提供的基本数据类型包括八种,分别是byte
、short
、int
、long
、float
、double
、boolean
、char
,如下:
具体说明如下表:
3、引用数据类型
Java中,除了以上提到的8种基本数据类型外,其他的数据类型都是引用数据类型,包括数组、接口、类等。
三、字面量
字面量即我们所能看到的真实具体的字面值。如:
- 整型字面量:10,123,2147483648L,0144,0x64
- 浮点型字面量:3.14,6.18F
- 布尔型字面量:true,false
- 字符型字面量:‘a’,‘A’,’\u6C49’
- 字符串型字面量:“gansu”
- Null型字面量:值为null,代表什么都没有
注意:
- 长整型(
long
)的字面量后面必须有字母l
或L
,为了和数字1
区分,一般使用大写字母L
。 - 单精度浮点型(
float
)的字面量后面必须有字母f
或F
,一般使用大写字母F
。 - 字符型(
char
)的字面量必须使用单引号。 - 字符串型的字面量必须使用双引号。
四、变量
1、变量的概念
变量是指在程序运行过程中其值可以改变的量。本质上,变量就是计算机内存中存放数据的单元,定义变量的本质就是分配内存。当把数值赋给变量时,实际上就是将数值存储到变量代表的内存单元中。
2、Java中的变量
声明变量并初始化的基本语法为:
[修饰符] 数据类型 变量名称 [= 值] [, 变量名称 [= 值] ...];
例如:
public class Test {
public static void main(String[] args) {
int num1 = 10;
short num2 = 15, num3 = 20;
byte num4, num5;
num4 = 25;
int num6 = num2 * num3;
long num7 = 3000000000L;
double num8 = 2.5;
float num9 = 6.18F;
String str = "hello";
System.out.println(str);
}
}
说明:
- 变量必须先声明,然后初始化(赋值),最后才能使用。变量只在申明它的
{}
内有效。 - 初始化
byte
、int
、long
、和short
类型的变量时,均可以用十进制、八进制以及十六进制的数字,前缀0
表示 八进制数字,前缀0x
代表 十六进制数字, 例如:
public class Test {
public static void main(String[] args) {
int decimal = 100; // 十进制数100
int octal = 0144; // 八进制数0144,即十进制数100
int hexa = 0x64; // 十六进制数0x64,即十进制数100
}
}
五、常量
常量是指不可改变的变量,通常用final
修饰。程序运行期间,固定不变的量
下面是一个示例:
public class Test {
public static void main(String[] args) {
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
}
}
六、表达式和运算符
1、表达式
对数据进行加工和处理称为运算,表示各种运算的符号称为运算符,参与运算的数据称为操作数。
表达式是运算符和操作数的有效组合,操作数可以是变量、常量、方法调用的返回值等。例如表达式 z = x + y
中z
、x
、y
是操作数,=
、+
是运算符。如图:
2、运算符
表示各种运算的符号称为运算符,Java中运算符大致分为赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、复合赋值运算符等等。
2.1、赋值运算符
赋值运算符的作用即是为变量赋值,比如int a = 3
。这里不再赘述。
2.2、算术元素符
算术运算符用来完成数学上的加、减、乘、除四则运算。
public class Test {
public static void main(String[] args) {
int num1 = 10;
int num2 = 25;
System.out.println("num1 + num2 = " + (num1 + num2));
System.out.println("num1 - num2 = " + (num1 - num2));
System.out.println("num1 * num2 = " + (num1 * num2));
System.out.println("num1 / num2 = " + (num1 / num2)); // 两个整型的操作数进行除法运算,结果也会是整型,小数部分会丢失
System.out.println("num1 % num2 = " + (num1 % num2));
}
}
说明
- 两个整型的操作数进行除法运算,结果也会是整型,小数部分会丢失。
自增运算符++
和自减运算符--
出现在操作数前面或者后面时会有所不同。
下面是另一个示例:
public class Test {
public static void main(String[] args) {
int num1 = 10;
int num2 = 10;
int num3 = 25;
int num4 = 25;
System.out.println("num1 ++ = " + (num1 ++));
System.out.println("num1 = " + num1);
System.out.println("++ num2 = " + (++ num2));
System.out.println("num2 = " + num2);
System.out.println("num3 -- = " + (num3 --));
System.out.println("num3 = " + num3);
System.out.println("-- num4 = " + (-- num4));
System.out.println("num4 = " + num4);
}
}
说明:
表达式num ++和表达式++ num都会使num的值加上1,区别在于表达式num ++的返回值为num,而表达式++ num的返回值为num + 1。
表达式num --和表达式-- num都会使num的值减去1,区别在于表达式num --的返回值为num,而表达式-- num的返回值为num - 1。
### 2.3、关系运算符
关系运算符用于操作数之间的比较。例如:
![](https://img-blog.csdnimg.cn/img_convert/fd8bc0ed8fdda2ffc4e89b4a1522ad59.png)
下面是一个示例:
public class Test {
public static void main(String[] args) {
int num1 = 15;
int num2 = 30;
System.out.println("num1 == num2 = " + (num1 == num2));
System.out.println("num1 != num2 = " + (num1 != num2));
System.out.println("num1 > num2 = " + (num1 > num2));
System.out.println("num1 < num2 = " + (num1 < num2));
System.out.println("num2 >= num1 = " + (num2 >= num1));
System.out.println("num2 <= num1 = " + (num2 <= num1));
}
}
### 2.4、逻辑运算符
逻辑运算符是对布尔类型的操作数进行与、或、非的运算。
public class Test {
public static void main(String[] args) {
// 逻辑运算符基本示例
boolean b1 = true;
boolean b2 = false;
System.out.println("(b1 && b2) = " + (b1 && b2));
System.out.println("(b1 || b2) = " + (b1 || b2));
System.out.println("!(b1 && b2) = " + !(b1 && b2));
// 逻辑运算符和关系运算符一起使用的例子
int num1 = 15;
int num2 = 10;
int num3 = 30;
System.out.println("(num1 > num2 && num1 > num3) = " + (num1 > num2 && num1 > num3));
System.out.println("(num1 > num2 || num1 > num3) = " + (num1 > num2 || num1 > num3));
System.out.println("!(num1 > num2 && num1 > num3) = " + !(num1 > num2 && num1 > num3));
}
}
### 2.5、位运算符
位运算是对整数类型的操作数进行的二进制运算,总共7个,
![](https://img-blog.csdnimg.cn/img_convert/e3e464ec50a47bbc1317ce4e35b1d4cc.png)
### 2.6、复合赋值运算符
复合赋值运算符是将算术运算和赋值运算同时进行的计算。
### 2.7、条件运算符(三元运算符)
条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要作用是决定哪个值应该赋值给变量。
条件运算符的语法如下:
数据类型 变量名称 = ? 值 if true : 值 if false;
public class Test {
public static void main(String[] args) {
int num1 , num2, num3;
num1 = 10;
// 如果 num1 等于 1 成立,则设置 num2 为 20,否则为 30
num2 = (num1 == 1) ? 20 : 30;
System.out.println( "Value of num2 is : " + num2 );
// 如果 num1 等于 10 成立,则设置 num3 为 20,否则为 30
num3 = (num1 == 10) ? 20 : 30;
System.out.println( "Value of num3 is : " + num3 );
}
}
## 3、运算符的优先级
当表达式中有多个运算符参与运算时,必须为每种运算符规定一个优先级,以决定运算符在表达式中的运算次序。优先级高的先运算,优先级低的后运算,优先级相同的由结合性确定计算次序。运算符的优先级及结合性如下表所示:
![](https://img-blog.csdnimg.cn/img_convert/4eab229475afa7e0ce1e48c958a790a8.png)
## 4、案例
下面是一个接收控制台输入数据,并综合运用表达式和运算符的案例。
下面是一个示例:
```Java
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int xb_java;
int xb_html;
int lb_java;
int lb_html;
System.out.println("请输入张三的java成绩");
xb_java = input.nextInt();
System.out.println("请输入张三的html成绩");
xb_html = input.nextInt();
System.out.println("请输入李四的java成绩");
lb_java = input.nextInt();
System.out.println("请输入李四的html成绩");
lb_html = input.nextInt();
System.out.println("张三的平均成绩是:" + (xb_java + xb_html) / 2);
System.out.println("李四的平均成绩是:" + (lb_java + lb_html) / 2);
System.out.println("张三java成绩追上李四了吗? " + ((xb_java >= lb_java) ? "是的" : "没有"));
System.out.println("张三html成绩超过李四了吗? " + ((xb_html > lb_html) ? "是的" : "没有"));
System.out.println("张三的平均成绩追上李四了吗? " + ((((xb_java + xb_html) / 2) >= ((lb_java + lb_html) / 2)) ? "是的" : "没有"));
System.out.println("张三每门课成绩都追上李四了吗? " + (((xb_html > lb_html) && (xb_java > lb_java)) ? "是的" : "没有"));
}
}
说明:
- 本例中涉及了如何从键盘上输入数据。JDK中提供了很多已经开发好的类库,在程序开发过程中可以直接使用。
java.util.Scanner
类提供了获取用户在控制台中输入的数据的功能。使用时分为两步:
// 1.创建Scanner对象,该对象用于接收用户在控制台中输入的数据
java.util.Scanner input = new java.util.Scanner(System.in);
// 2.使用Scanner对象提供的方法获取用户输入的数据
int score = input.nextInt();
ava > lb_java)) ? “是的” : “没有”));
}
}
说明:
- 本例中涉及了如何从键盘上输入数据。JDK中提供了很多已经开发好的类库,在程序开发过程中可以直接使用。`java.util.Scanner`类提供了获取用户在控制台中输入的数据的功能。使用时分为两步:
```Java
// 1.创建Scanner对象,该对象用于接收用户在控制台中输入的数据
java.util.Scanner input = new java.util.Scanner(System.in);
// 2.使用Scanner对象提供的方法获取用户输入的数据
int score = input.nextInt();
数据类型转换
数据类型的从高到低的排序:
double float long int short byte
高级别---------------------------->低级别
自动转换与强制转换
赋值运算中,数据类型转换的规则如下:
1:当低级别的赋值给高级别的变量时,系统会自动完成数据类型的转换。例如:
int i=52;
float x;
x=i;//自动转换
当高级别的赋值给低级别的变量时,必须进行强制类型转换,强制类型的转换的形式如下:
(类型标识符)待转换的值;
例如:
float f=1.6F;
int i=(int)f;//将float类型的值转换成int类型的值后存储到int类型的变量i中。
强制类型转换可能会造成数据丢失,如上所述中f的值时1.6,转换成int类型后会丢失精度,i的值的是1。
案例:
public class hjdf {
public static void main(String[] args) {
int i=15,j=4,k;
float f1,f2;
k=i/j;
f1=i/j;
f2=(float)i/j;
System.out.println("k="+k);
System.out.println("f1="+f1);
System.out.println( "f2="+f2);
}
}