第2章 基本数据类型与运算
2.1 标识符与关键字
2.1.1 Unicode字符集
- Unicode字符集编码:通用八位编码字符集的简称
- 为每种语言中的每个字符设定了统一并且唯一的二进制编码
- 十六位二进制数字编码(四位十六进制数),最多编码65536个字符
2.1.2 标识符
- 标识符:JAVA程序中各种名字
- 类名、方法名、数组名、符号常量名、标号名
- 命名规则:
- 不能以数字开头
- 字母、下划线、$、数字等
- 不可以是关键字和保留字
- 可以是汉字?
2.1.3 关键字
关键字也是语言中的词汇(Token)
2.2 基本数据类型
2.2.1 变量与常量
1.常量
- 常量分为符号常量和直接量两种
- 符号常量在程序运行过程中其值不可以改变,符号常量一般用大写字母
2.变量
-
变量在程序中用来储存数据
-
变量名用小写字母。多个词连接时除第一个外首字母大写
-
变量在用前需要声明
-
变量声明格式:
type varName [=value][,varName[=value]...] int age = 19 , age2 = 90; int age,age2;
-
没有给变量进行赋值的话,那么其实这个变量相当于没有定义
-
JAVA时强类型语言,只要声明变量就必须定义类型
-
局部变量:定义在方法中
成员变量:定义在类中,方法外
public class TestVar04{ int b = 20; public static void main(String[] args){ System.out.println(a);//NO int a = 10; System.out.println(a);//YES System.out.println(b);//YES { int c = 40; System.out.println(C)//YES int a = 50;//属于变量的重复定义 } System.out.println(c);//NO } public void eat(){ System.out.println(b);//YES System.out.println(a);//NO int a = 30;//不是变量的重复定义 System.out.println(a);//YES } }
2.2.2 基本数据类型
- 在计算机中,不同类型的数据,其储存形式和处理方式不同,所以要对数据区分类型
- JAVA语言本身定义的数据类型成为基本类型
- 基本数据类型:
- 数值型:
- 整形:字节byte、短整型short、基本整型int、长整型long
- 浮点型:单精度float和双精度double
- 字符型:char
- 布尔型:boolean
- 数值型:
1、整型数
- 整型数可以用二进制、八进制、十进制和十六进制表示
- 二进制:0b开头
- 八进制:0开头,由数字1至7表示
- 十进制:
- 十六进制:0x或0X开头
- 默认类型为int型
- 表示长型整数,需要在数字后面加L或l
- 给byte或short型变量赋值时不要超出数据范围
2、浮点型数
- 可以用十进制和指数形式表示
- 1.23*10^5可以写成1.23E5.用E或e表示指数部分
- 浮点型常量默认为双精度数
- 浮点数后加F或f表示单精度数,加D或d表示双精度数
- 浮点数有8位有效数字,而双精度为16位
3、字符型数
- 字符常量是一个字符,占两个字节(16位),表示时用单引号引起
- 转义字符
4、布尔型数
-
又称逻辑型数
-
只有两个常量:true和false,用于表示“真”和“假”
-
public class TestVar09{ public static void main(String[] args){ //创建一个布尔类型的变量 boolean flag1 = true; System.out.println(flag1); boolean flag2 = false; System.out.println(flag2); boolean flag3 = 5==9; System.out.println(flag3); boolean flag4 = 5<9; System.out.println(flag4); } }
2.2.3 基本类型数据输入输出
1、输入
-
可以Sanner类的对象及其方法进行基本数据类型数据的输入
-
先创建Scanner类的对象:
Scanner input = new Scanner(System.in);
-
输出数据时使用:
System.out.println(输出的数据)
-
利用Scanner类中的方法可以从键盘读入基本类型的数据:
类型 方法 byte nextByte() short nextShort() int nextInt() ling nextLong() boolean nextBoolean() float nextFloat() double nextDouble() -
从键盘获得一个字符:
-
方法一:利用Scanner类的next()方法读取字符串,再从串中取出字符
Scanner sc = new Scanner(System.in); String s = sc.next(); char c = s.charAt(0);
-
方法二:利用System类in属性直接调用read()方法读入字符
char c; try { c = (char)System.in.read; } catch(Excption e) {}
-
2、输出
-
System.out中的方法:print, println, printf
-
调用print()方法时必须带且只能带有一个基本数据类型的参数,它输出数据后不换行
-
调用println()方法时可以不带参数,如果不带参数则输出一个换行;如果带参数只能带一个基本数据类型的参数,输出参数的值并换行
-
如果用print()或println()一次输出多个数据,则应将多个数据变成一个数据后再调用这两个方法输出
System.out.println("Average Score = "+average); //用print()写成等价语句: System.out.print("Average Score = "); System.out.print(average); System.out.print("\n");
-
printf()用于有格式的数据输出
printf(格式控制字符串,输出项表列);
“格式控制字符串”由普通字符和格式控制组成。普通字符原样输出,格式控制字符主要有下面的字符:
- %d:输出int型数据
- %c:输出char型数据
- %f:输出浮点型数据,小数部分最多保留六位
- %s:输出字符串型数据
- %md:输出int型数据占m位
- %m.nf:输出浮点型数据占m位,小数点后保留n位数字
-
2.3 运算符和表达式
2.3.1 算术运算符
%:求余数,结果按a%b = a-a/b*b计算
- 结论:余数的符号取决于前面的数的符号
2.3.2 关系运算符
==, !=, >, >=, <, <=(前两个优先级低)
- 关系运算的结果是逻辑值
- 关系算符的结合性是从左向右
2.3.3 逻辑运算符
逻辑运算是一种连接运算,可以将多个关系表达式连接成一个表达式
优先级从高到低有:! , && , ||
- ! 的结合性从右向左,&&,||的结合性从左向右
2.3.4 位运算符
七个:&(位与)、|(位或)、^(位异或)、~(位非)、<<(位左移)、>>(位右移)、>>>(用零扩展的右移)
1、位与运算
2、位或运算
3、位异或运算
4、位非运算
5、位左移运算
- 移出的位舍弃,右侧空位补0
- 左移n位相当于*2^n
- 位移运算比乘2运算快
6、位右移运算
- 左侧空出位补符号(有符号右移)
- 右移n位相当于/2^n
- 位移运算比除2运算快
7、用零扩展的位右移运算
- 用零扩展的位右移位运算符移位时,空出高位用0补充,而>>运算则用原来的高位值被充
2.3.5 赋值运算符
=
自反赋值运算符:比如+=等
2.3.6 条件运算符
“ ?: ”:三目运算符
- 逻辑或关系表达式?表达式1:表达式2
- 有些情况下,可以用条件运算符代替if-else语句
2.3.7 其他运算符
- new:为数组分配和调用构造方法创建对象
- instanceof:判断一个对象是否是一个类的实例
- ():表达式和方法定义的调用
- []:下标运算符,用于定义数组和访问数组元素
- . :分量运算符,可以通过访问该运算符访问对象中的成员
2.3.8 表达式
1、表达式
- 由操作数和运算符组成表达式
- 考虑:运算符的优先级和综合性、操作数的数据类型转换方法
2、类型转换
- 方式(2种)
- 1、自动转换/隐式转换
- 表达式在计算过程中,参与运算的操作数会根据操作数的类型进行自动转换
- 自动转换按照数值精度从“低”到“高”
- 2、强制转换/显示转换
- 形式:变量 = 表达式
- 例子:(double)(1/3)
- 注意:(double)a/b和(double)(a/b)
- 1、自动转换/隐式转换