第二章 数据类型与运算符
1.标识符命名规则
Java语言中标示符必须以字母、下划线(_)、美元符号($)开头,后面可以跟上任意数目的字母、数字、下划线(_)、美元符号($)。此处的字母不仅仅是26个英文字母,还可以是中文字符、日文字符……. 标示符=1个字母/下划线/美元符号+n个字母/数字/下划线/美元符号
注意:标示符不能包括空格,不能使用java的关键字和保留字和直接量,标示符的长度不受限制。
由于Java采用的Unicode编码(范围从\u0000--\u FFFF),因此Java的标示符可以使用Unicode能够表示的任意字符。Java语言严格区分大小写。
2. java关键字(48个),保留字(2个 goto、const),直接量(3个true、false、null)
注意: :java中关键字、保留字、直接量都是小写,If,For都可以用来作为标示符。
3.java数据类型(java语言是强类型,所有变量需先声明后使用)
(1)基本数据类型(4类8种)
整数类型:byte 1个字节;Short 2个字节; Int 4个字节; long 8个字节
字符类型:char 2个字节
浮点类型:float 4个字节; double 8个字节
布尔类型:boolean 1位(true/false)
整数类型:没有小数部分的数值,可以是负数
整数类型有三种表示方式:十进制、八进制、十六进制,默认为十进制,八进制以0开头,十六进制以0x或0X开头
▶如果直接将一个较小的整数常量(在byte或short范围内的数据)赋给一个byte或short类型的变量,系统自动将该值当做byte或short类型变量来处理,如果系统使用一个巨大的数据,超过了int的范围,系统不会自动将该数据当做long类型处理,要想当成long类型处理必须在后面添加L或l;
▶一般情况下int最常用,因此java中一个整形变量默认为int类型。长整形后面需要加一个后缀L或l(eg: long a = 1000L);
▶一般情况下double最常用,系统中浮点类型数据默认为double; float型的数值有一个后缀F或f,没有后缀的浮点数默认为double类型。(浮点类型:表示有小数部分的数值);
▶字符类型:用于表示单个字符,字符类型的值必须使用单引号括起来。
字符类型的值有三种表示形式:
1. 直接通过单个字符类指定值:eg: char a = ‘男’;
2. 通过转义字符表示特殊字符常量:‘\n’、‘\t’、‘\”’……
3. 直接使用unicode值来表示字符类型的值:格式为’\uxxxx’其中xxxx表示十六进制的整数。Eg: char a = ‘\u9999’; 也是表示‘香‘
(2)引用数据类型(复杂数据类型)
◆数组:数组是所有编程语言只用一种常用的数据结构,它用来存储多个相同类型的数据。
JAVA中的数组要求数组中元素的类型一致。一旦数组初始化完成,数组在内存中所占用的空间被固定下来,因此数组的长度是不可变的。
★数组的定义
类型[]数组名;//常用 int[] a; double[] b;char[] c
类型数组名[];// int a[]
★数组的初始化
◆静态初始化
初始化时由程序员显示的指定每个数组元素的初始值,由系统决定数组的长度。
eg:
int[ ]a = {1,2,3,4,5}; //简化写法
◆动态初始化
初始化时程序员只指定数组的长度,而不指定数组中元素的值,系统自动给数组分配初始值。
eg:
int[] a = new int[5];
★访问数组元素
数组中每个元素都有一个下标,下标从0开始:访问数组元素可以根据数组下标。
eg:
int[ ]a = {55,66,85,32,75};
55------------ a[0]
66------------ a[1]
85------------ a[2]
32------------ a[3]
75------------ a[4]
◆类:类是具有相同属性和行为的一组对象的集合与抽象。(系统定义的类,用户自定义的类)
★类的语法
[修饰符] class 类名 [继承][接口]{
0—n个属性;
0---n个方法;
}
◆接口:接口就是一组对类的要求,它反映了一组没有内在联系、不相关的类之间的通讯的协议
接口支持多继承。
★接口的特点
1. 一个类只能直接继承一个父类,但是可以实现多个接口。
2. 接口不能实例化、接口没有构造方法。
3. 接口中的方法全部都是抽象方法,常量全部都是静态常量。
4. 当一个类实现某个接口时,它必须实现该类中的所有的抽象方法,除非这个类定义为抽象类。
★接口的语法[访问控制符] interface接口名{
全局常量;
抽象方法;
}
补充:
● 类实现多个接口
class 类名 implements 接口1,接口2……{
.....
}
● 类实现接口同时又继承类
class 类名 extends 父类 implements 接口1,接口2……{
.......
}
● 接口继承接口(接口只能继承接口,不可以继承类。而且接口继承接口使用extends,而且接口可以继承多个接口)
4. 变量的声明,初始化,作用域,常量
▼变量声明
eg:
int days;//天数
int a,b;
▼初始化
eg:
days = 25;
a = 10;
b = 10;
★可以将变量声明和初始化合并成一步完成
int days = 25;
int age = 18;
int a=10,b=10;
注意:声明了一个变量后,一定要初始化才可以使用改变量。
eg:
public class Test2{
publicstatic void main(String[] args){
int a;
System.out.println(a); //此处报错 (可能尚未初始化变量 a)
}
}
▼动态初始化
eg: int a = 10;
int b = a;
整型变量b的初始化是将a的值赋给了b,这就是动态初始化。
注意如果a没有初始化,就不允许用a作为其他变量的初始化值。
eg:int a;
int b = a;//此处报错
▼常量:不能改变的量,值是固定的。
public class Test2{
public staticvoid main(String[] args){
int a= 10;
finalint MONTHS = 12;//常量 (常量名一般大写,便于和普通变量区分)
System.out.println("a="+a+",MONTHS ="+ MONTHS);
a =20;
MONTHS= 15;//报错无法为最终变量 months指定值(常量的值不可以改变)
System.out.println("a="+a+",MONTHS ="+ MONTHS);
}
}
▼变量作用域
块是用花括号扩起来的任意数量的Java语句,块可以嵌套在其它的块中
在Java中块决定了变量的作用域。
eg:
public class Test2{
public static voidmain(String[] args){
int a;
....
{
....
intb;
....
}//b的作用范围到此为止
}//a的作用范围到此为止
}
5.数据类型转换
Java中八中基本数据类型除了boolean类型外,都可以进行相互转换,有两种转换方式:
自动类型转换
强制类型转换
▼自动类型转换
条件:
类型兼容
目标类型的范围大于源类型的范围
byte ---short---int---long---float---double
char---int---long---float---double
▼强制类型转换(可能导致精度丢失或错误结果,所以不可随意滥用。)
条件:
将大的数值类型转型为较小数值类型;最终值不能超出较小值数据类型范围
eg:
inta = 12;
byteb = (byte)a; //强制类型转换
补充:
表达式中数据类型的自动提升
当使用二元运算符对两个值进行运算时,两个操作数会转换成通用类型。
● 如果两个操作数中有一个是double类型,则另一个将会转换成double型;
● 如果两个操作数中有一个是float类型,则另一个将会转换成float型;
● 如果两个操作数中有一个是long类型,则另一个将会转换成long型;
否则,两个操作数都转换成int型。6. 运算符
▼算术运算符
+、-、*、/、%(取模、取余)
▼自增自减运算符
++(自增)、--(自减)
++在前表示先让做增加1,在做运算;++在后表示先做运算,在增加1
▼关系运算符
>、>=、<、<=、==、!=
注意:==是判断相等,得到布尔值 true或false
=是赋值
▼逻辑运算符
&&(与)、||(或)、!(非)
▼位运算符
&(与)、|(或)、^(异或)
位运算将两个数转化成二进制再进行运算,
&按位求与,两位都为1才为1
| 按位求或,两位有一个为1就为1
^ 异或,两位不同才为1,两位相同就为0
▼赋值运算符
=
注意:==是判断相等,得到布尔值 true或false
=是赋值