一、数据类型
1.标识符
标识符是用来给变量、类、方法以及包进行命名的。标识符需要遵守一定的规则:
- 标识符是由字母、下划线“_”、美元符“$”和数字的任意组合。
- 标识符必须以字母、下划线“_”、美元符“$”开头。
- Java 标识符大小写敏感,且长度无限制。
- 标识符不可以是Java的关键字。
2.变量
1.变量的本质
变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。 比如,int a=3; 表示a变量的空间大小为4个字节。
变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。
注意:
- 变量类型可以是基本数据类型,也可以是引用类型
- 变量名必须是合法标识符
2.变量分类
可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量(也称为类变量)。
类型 | 声明位置 | 从属于 | 生命周期 |
---|---|---|---|
局部变量 | 方法或语句块内部 | 方法/语句块 | 从声明位置开始,直到方法或语句块执行完毕,局部变量消失。 |
成员变量 | 类内部,方法外部 | 对象 | 从声明位置开始,直到方法或语句块执行完毕,局部变量消失。 |
静态变量 | 类内部,static修饰 | 类 | 类被加载,静态变量就有效;类被卸载,静态变量消失。 |
3.常量
常量通常指的是一个固定的值,例如:1、2、'a'、'b'、”hello”等。
在Java语言中,用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。
命名规范(只是规范,并不是不能这么写,规范是程序员的基本准则):
- 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
- 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
- 类名使用 UpperCamelCase 风格,单词首字母大写的驼峰原则。
-
方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,第一个单词首字母小写的驼峰原则。
-
常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不闲名字长。
-
不允许任何魔法值 ( 即未经预先定义的常量 ) 直接出现在代码中。
-
在 long 或者 Long 赋值时,数值后使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。
4.数据类型
Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。
8种基本数据类型:
- 数值型- byte、 short、int、 long、float、 double
- 字符型- char
- 布尔型-boolean
引用数据类型:
- 类(class)
- 接口(interface)
- 数组
引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!
5.数据类型转换
Java程序中要求参与计算的数据,必须要保证数据类型一致,如果数据类型不一致将发生类型的转换。
1.自动转换:将取值范围小的类型自动提升为取值范围大的类型 。
范围小的类型向范围大的类型提升, byte 、 short 、 char 运算时直接提升为 int 。
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
2.强制转换:将取值范围大的类型强制转换成取值范围小的类型。
自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
当一个 short 类型与 int 类型相加,我们知道会类型提升,但是还想给结果赋值给 short 类型变量,就需要强制转换。
注意:
- 浮点转成整数,直接取消小数点,可能造成数据损失精度。
- int 强制转成 short 砍掉2个字节,可能造成数据丢失。
二、运算符
1.算数运算符:
算数运算符 | |
+ |
加法运算,字符串连接运算
|
- |
减法运算
|
* |
乘法运算
|
/ | 除法运算 |
% |
取模运算,两个数字相除取余数
|
++、-- |
自增、自减运算
|
public class Demo1 {
public static void main(String[] args) {
System.out.println(5 % 3); //2
System.out.println(-5 % 3); //-2
System.out.println(5 % -3); //2
System.out.println(-5 % -3);//-2
}
}
自增自减
public class Demo1 {
public static void main(String[] args) {
int a = 10;
int b = 10;
int c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
System.out.println(a); //9
System.out.println(b); //10
System.out.println(c); //8
}
}
符号在字符串中的操作:符号在遇到字符串的时候,表示连接、拼接的含义。"a"+"b"的结果是“ab”,连接含义。
public class Demo1 {
public static void main(String[] args) {
// +遇到字符串表示连接
// 如果要在字符串后面做+运算 就需要使用括号
System.out.println(5 + 5 + "java"); //10java
System.out.println("java" + 5 + 5); //java55
System.out.println("java" + (5 + 5)); //java10
}
}
2.赋值运算符:
赋值运算符 | |
---|---|
= |
赋值
|
+= |
加后赋值(a+=5 就是 a=a+5)
|
-= |
减后赋值
|
*= |
乘后赋值
|
/= |
除后赋值
|
%= |
取模后赋值
|
public class Demo1 {
public static void main(String[] args) {
byte b1 = 1;
byte b2 = 2;
// b3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),
// 已经确定了 1+2 的 结果并没有超过byte类型的取值范围,可以赋值给变量 b3 ,因此 b3=1 + 2 是正确的。
byte b3 = 1 + 2;
// b4 = b2 + b3 , b2 和 b3 是变量,变量的值是可能变化的,在编译的时候,
// 编译器javac不确定b2+b3 的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。
byte b4 = b1 + b2;
}
}
3.比较运算符
比较运算符 | |
---|---|
== |
比较符号两边数据是否相等,相等结果是
true。
|
< |
比较符号左边的数据是否小于右边的数据,如果小于结果是
true
。
|
> |
比较符号左边的数据是否大于右边的数据,如果大于结果是
true
。
|
<= |
比较符号左边的数据是否小于或者等于右边的数据,如果小于或等于结果是
true
。
|
>= |
比较符号左边的数据是否大于或者等于右边的数据,如果小于或等于结果是
true
。
|
!= |
不等于符号 ,如果符号两边的数据不相等,结果是
true
。
|
public class Demo1 {
public static void main(String[] args) {
short s = 1;
// += 是一个运算符,只运算一次,并带有强制转换的特点,也就是说 s += 1 就是 s = (short)(s + 1)
s += 1;
System.out.println(s); //2
}
}
4.逻辑运算符
逻辑运算符,是用来对两个布尔类型进行运算的,运算结果都是布尔值 true 或者 false。
逻辑运算符 |
运算规则
|
示例
|
结果
|
---|---|---|---|
& |
与
|
false&true
| false |
| |
或
|
false|true
| true |
^ |
异或
|
false^true
| true |
! | 非 | !true | false |
&& |
短路与
|
false&&true
| false |
|| |
短路或
|
false||true
| true |
运算符优先级:逻辑非>逻辑与>逻辑或
- && 短路与
如果表达式左边的为true还会执行后面的,为false不执行后面的 。
- || 短路或
如果表达式左边为true就不执行后面的,为false执行后面的。
5.三元运算符
三元运算符格式:
数据类型 变量名 = 布尔类型表达式?结果1:结果2;
- 布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
- 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
public class Demo1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a > b ? a : b;
System.out.println(c);
}
}