数据类型和运算符
一、变量和类型
变量:程序运行时可改变的量,开辟内存空间来保存数据
变量作用域:{ }中
- 注意:在Java中,局部变量使用前一定要先初始化,否则编译无法通过。
类型:对变量的种类进行划分
1.数据变量
数据单位转换:
1Bytes=8 bits(1字节等于8位)
1KB=1024 Bytes(1KB等于1024字节)
1MB=1024 KB
1GB=1024MB
1TB=1024GB
1.1基本类型数据变量
1)整型变量 int
占4个字节,32位 最高位为符号位:0正1负
取值范围:-2^31——2^31-1
定义格式:int 变量名 = 初值(例:int a = 10;)
包装类:Integer
打印int的最大值:System.out.println(Integer.MAX_VALUE)
- 注意:变量在使用时一定要赋予初始值,若不进行初始化,则编译无法通 过。(体现java的安全性)
变量赋值时不可取超过其范围的值。
2)long 长整型
占8个字节,64位
取值范围:-2^63——2^63-1
格式:long a = 10L;(显示加“L”表示长整型,不建议加“l”)。
包装类:Long
3)double 双精度浮点型
占8个字节
包装类:Double
格式:double a = 10(定义时加“d”"D"或者可以不加)
对于小数来说,double是有精度的,计算完并不是准确数字。
4)float 单精度浮点型
占4个字节
格式:float a =10F(定义时必须加“f”或者“F”)
包装类:Float
5)char 字符型
占2个字节
包装类:Character
取值范围:MIN_VALUE:'\u0000' MAX_VALUE:'\uffff'
0 —— 65535
6)byte 字节类型
占1个字节
包装类:Byte
取值范围:-2^7——2^7-1
7)short 短整型
占2个字节
包装类:Short
范围:-2^15——2^15-1
8)boolean 布尔型
标准没有规定大小
取值范围:true,flase
- 注意:与C不同,Java中不存在1表示true,0表示flase. 因此boolean类型 与int不能相互转换,不存在1表示true,0表示flase.
- boolean类型不能和其他类型参与运算。
1.2 引用类型数据变量
1)String 字符串类型
定义格式:String 变量名="初始值";
字符串的 + 操作,表示字符串的拼接:
String a = "hello";
String b = "java";
String c = a + b;
System.out.println(c);
//执行结果
hello java当一个 + 表达式中存在字符串时,若字符串在前,执行字符串的拼接行为(只拼接,不计算);若字符串在后,则先运算再加字符串。(先计算,再拼接)
1.3变量的命名规则
标识符:由字母、数字、下划线、符组成。 但命名时不以下划线或符开始,也不能以下划线或$符结束。
命名时禁止使用拼音与英文混合的方式,更不允许直接用中文的方式。
变量若只含有一个单词,则全部小写;由多个英文字母组成时,命名采用小驼峰的形式,即从第二个单词开始, 每个单词的首字母大写。例如:student_Name.
1.4常量
常量:程序运行期间可以改变值的量。
体现形式:
1.字面常量
例: int a = 10;(10就是字面常量)
2. 被final所修饰的变量
1.5强制类型转换
Java是一种强类型的编程语言, 由表示范围大的类型由表示范围小的类型转换时,编译无法通过。而C是一种弱类型的,由大转换为小时,给出警告但依然可以运行。
强制类型转换:大类型 给 小类型
( 类型:包括字节大小、 精度)
隐式类型转换: 小类型 给 大类型
隐式类型转换中发生类型提升: CPU 在存取数据的时候,以4个字节为单位进行数据的存取
类型提升举例:
public class Test{
public static void main(String[] args){
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);//先将a 和 b 进行提升为 int 参与运算
System.out.println(c);
}
}
结果:30- 在运算过程当中,小类型会提升为表达式当中最大的类型,然后参与运算。
二、运算符
2.1 算术运算符
基本四则运算: + - * / %
- 注意:
除法中,int / int时,若有小数,则需要用double来计算
除法中,除数不能为0
与C不同的是,%不仅能为int求模,也能为double求模
增量赋值运算符
+= -= * = /= %=
例:a += 1;//等价于 a = a+1;
其他赋值运算符与“+=”类似
自增、自减运算符
自增运算符:++
a++:先使用,后+1
++a:先+1,后使用
自减运算符:--
运算规则同上
- 前置++和后置++若没有进行赋值操作,那代表一个意思。
2.2 关系运算符
等于 ==
不等于 !=
小于 <
大于 >
小于等于 <=
大于等于 >=
- 注意:关系运算符表达式的返回值都是boolean类型,即返回值为true或false。
2.3 逻辑运算符
- 注意:逻辑运算符的操作数和返回值都是boolean型
逻辑与 &&
规则:两个操作数都为true,结果为true,否则为false
逻辑或 | |
规则:两个操作数有一个为true,结果为true,否则为false
逻辑非 !
规则:操作数为true,结果为false ; 操作数为false,结果为true
短路求值:
对于&&来说,只要第一个表达式为假,结果为假,后面的均不执行
对于 | | 来说,只要第一个表达式为真,结果为真,后面的均不执行
- &和 | 操作数类型为boolean类型时,也表示逻辑运算,但不支持短路求值。
2.4 位运算符
均按二进制位运算
按位与 &
同为1取1,其余全取0
例:0xf6 与 0xE3 按位与的结果是
0xf6为16进制,转换为二进制-> 1111 0110
0xE3为16进制,转换为二进制-> 1110 0011
按位与的结果为: 1110 0010
按位或 |
有1取1,没1取0
例:0xf6 与 0xE3 按位或的结果是
0xf6为16进制,转换为二进制-> 1111 0110
0xE3为16进制,转换为二进制-> 1110 0011
按位或的结果为: 1111 0111
按位取反 ~
符号位不变,其他位1变为0,0变为1
例:0xf6 与 0xE3 按位取反的结果是
0xf6为16进制,转换为二进制-> 1111 0110
按位取反的结果为: 1000 1001
按位异或 ^
相同为0,不同为1
例:0xf6 与 0xE3 按位异或的结果是
0xf6为16进制,转换为二进制-> 1111 0110
0xE3为16进制,转换为二进制-> 1110 0011
按位异或的结果为: 0001 0101
- 注意:
0x 开头表示16进制,4位二进制表示1位16进制
0 开头表示8进制,3位二进制表示1位8进制
2.5 移位运算符
均按二进制位来计算。
左移 <<
左移相当于乘法,左移几位乘以2的几次方
例:将0000 1100左移一位:0001 1000
右移 >>
左移相当于除法,左移几位除以2的几次方
例:将0000 1100右移一位:0000 0110
无符号右移 >>>
例:将1111 1111无符号右移一位:0111 1111
- 注意:
左移或右移时,最高位符号位原本为1补1,为0补0。
无符号右移时,最高位符号位只补0。
没有无符号左移。
2.6 条件运算符
表达式1 ? 表达式2 :表达式3当表达式1的值为true时,整个表达式的值为表达式2的值;为false时,值为表达式3的值。
异常
编译时异常:在程序编译过程中,发生异常
运行时异常:在程序运行时,发生异常
程序发生异常时, 会有一个异常信息栈,这个栈是JVM中的一部分内存,定义错误的方法是找栈顶的异常信息。
处理异常
运行异常举例:
public class Test{
public static void main(String[] args){
int a = 10;
int b = 0;
System.out.println(a/b);
System.out.println("hello");
}
}结果如下:
Exception in thread "main" java.lang.ArothmeticException: / by zero
at Test.main(Test.java:5)
可见,编译时未出现异常,运行时出现算术异常。
异常处理方法:使用try-catch语句。
public class Test{
public static void main(String[] args){
int a = 10;
int b = 0;
try{
//放可能发生异常的代码
System.out.println(a/b);
}catch(ArithmeticException e){
System.out.println("除数为0异常");
}
System.out.println("hello");
}
}
结果如下:
除数为0异常
除数为0
















