690 likes | 857 Views
数据类型及其运算. 标识符. 标识符 : 为程序中的各个元素进行命名 . 一般地,在 Java 中标识符是以字母、下划线( _ )、美元符号( $ )等其它货币符号 ( 如 £ , ¥ ) 开始的一个字符序列,后面可以跟字母、下划线、美元符号、数字等字符。 Java 语言使用 Unicode 字符集 标识符是大小写敏感的,没有最大长度的限制,不能和关键字相同. 标识符. 总体来说定义标识符可以使用的字符包括: 大小写字母、数字; Unicode 字符集中编号大于 0xC0 的所有字符。
E N D
标识符 • 标识符 :为程序中的各个元素进行命名 . • 一般地,在Java 中标识符是以字母、下划线(_)、美元符号($)等其它货币符号(如£, ¥)开始的一个字符序列,后面可以跟字母、下划线、美元符号、数字等字符。 • Java语言使用Unicode字符集 • 标识符是大小写敏感的,没有最大长度的限制,不能和关键字相同
标识符 • 总体来说定义标识符可以使用的字符包括: • 大小写字母、数字; • Unicode字符集中编号大于0xC0的所有字符。 • 凡是用Character.isJavaIdentifierStart() 返回true,都可作为首字符,Character. isJavaIdentifierPart()返回true,都可作为标识符的一部分。 • 合法的标识符: • Body,_test,$hello • 非法标识符: • 5Test,hello*,world#,class • 注意:在中文环境下,可以使用汉字作为标识符。例如,int 中文=5;
关键字 • 所有的关键字都是小写的。如果被大写,就不是关键字了 。 • 用于数据类型的关键字 • byte short int long float double char boolean • 用于流程控制语句的关键字 • if else switch case default do while for break continue • 方法、类型、变量的修饰关键字 • private public protected final static abstract synchronized volatile • 异常处理关键字 • try catch finally throw throws
关键字 • 对象相关关键字 • new extends implements class instanceof this super • 字面值常量关键字 • false true null • 方法相关关键字 • return void • 包相关关键字 • package import
注释 • 单行注释 • 单行注释以“//”开头,至该行结尾,其格式如下: • 多行注释 • /* 注释文本 • …… • */
变量 • [修饰符] <类型名> <变量名> [=<初值>][,<变量名>[=<初值>]….]; • int i; • int j=5,k=4; • 作用域分,变量大致可分为:局部变量、类成员变量、方法参数、异常处理参数。
变量作用域 • 局部变量是在方法内部或代码块中声明的变量,它的作用域为它所在的代码块,在程序设计中,以“{ …… }”为界。 • 类成员变量,它的作用域是整个类。又可以细分为静态变量和实例变量 • 方法参数的作用域,是它所在的方法 • 异常处理参数的作用域,是它所在的异常处理部分 • 变量隐藏 (按作用域的大小)
常量 • 整形常量234,实型常量23.4,字符常量’a’,布尔常量true和false,以及字符串常量“hello world!” • final关键字(后面还会碰到) • final int MAX=100; • final int MAX_LOOP=5;
整数类型(byte,short,int,long) 数值类型 浮点类型(float,double) 基本类型 字符类型(char) 布尔类型(boolean) 数据类型 类(class) 引用类型 接口(interface) 数组 Java语言的数据类型 数据类型分类
数据类型决定了参与操作的变量、常量和表达式的取值类别、取值范围以及能够实施的操作行为。Java语言属于强类型语言,即对于程序中出现的所有变量和表达式,在编译的时候就要求有明确的数据类型,这样才可以由编译程序在编译期间对所有的操作进行数据类型相容性的检查。数据类型决定了参与操作的变量、常量和表达式的取值类别、取值范围以及能够实施的操作行为。Java语言属于强类型语言,即对于程序中出现的所有变量和表达式,在编译的时候就要求有明确的数据类型,这样才可以由编译程序在编译期间对所有的操作进行数据类型相容性的检查。
数据类型 • Java的基本数据类型都有固定的数据位,不随运行平台的变化而变化。 • 引用类型都是用类或对象实现的。 • 布尔类型 • boolean b=false;
boolean • 只有true和false两个取值,分别代表“真”和“假”。 • 特点:不能够与任何其他类型进行相互的类型转换操作。 • boolean x; • boolean x=true;
字符类型 • 一个字符用一个16位的Unicode码表示 • char c,c1=‘a’; • 中’的Unicode码是\u4e2d • 整数和字符型数据在一起运算时字符向整数转换
char • Java语言规定,字符采用Unicode编码,每个字符占用两个字节。 • ASCII字符集是Unicode字符集的一个子集,并且在这两个字符集中,前128个编码所对应的字符完全相同,只是每个字符占用的二进制位数不同。 • Unicode表中的字符就是一个字符常量,字符常量用单引号括起。有些字符(如回车)不能通过键盘输入到程序中,这时需要用转意字符常量,如’\n’。 • 要得到字符在Unicode字符集中的顺序位置,必须用int类型转换。要得到一个0~65535之间的数所代表的Unicode表中对应的字符必须使用char类型转换。
public class Example2_1 { public static void main (String args[ ]) { char chinaWord='你',japanWord='ぁ'; int p1=36328,p2=38358; System.out.println("汉字\'你\'在unicode表中的顺序位置:"+(int)chinaWord); System.out.println("日语\'ぁ\'在unicode表中的顺序位置:"+(int)japanWord); System.out.println("unicode表中第36328位置上的字符是:"+(char)p1); System.out.println("unicode表中第38358位置上的字符是:"+(char)p2); } }
整数类型 • Java中的整数有三种进制形式表示: • 十进制:用0~9的数值表示,首位不能为0,例如:124,-100; • 八进制:以0开头,后跟多个0~7之间的数字,如0134; • 十六进制:以0x或者0X开头,后跟多个0~9之间的数字、或A~F之间的的大写字、或者a~f之间的小写字母。a~f或者A-F分别表示10~15,例如,0x23FE,等于十进制数9214。
整数类型 在表示long型常量时,需要在数字后面加上后缀L或者l。例如3L表示一个long型的常量,而不是int型常量。
浮点类型 一个浮点数隐含为double型。在一个浮点数后加字母F或f,表示float型。常量值3.45的类型是double;3.45F的类型是float。
基本数据类型的转换 • 当把一种基本数据类型变量的值赋给另一种基本类型变量时,会涉及类型转换问题。 • 转换的原则(低)byte-〉short-〉int-〉long-〉float-〉double(高),当把级别低的变量赋值给级别高的变量时,自动完成转换。当把级别高的变量赋值给低的变量时,必须使用显示类型转换方式:(类型名)要转换的变量。 • 当把一个整数赋值给byte、short、int、long型变量时,不可超出这些变量的取值范围。否则必须使用强制类型转换。 • 上面的转换不包括逻辑类型和字符类型。
public class Example { public static void main (String args[ ]) { int c=2200; long d=8000; float f; double g=123456789.123456789; c=(int)d; f=(float)g; //导致精度的损失. System.out.print("c= "+c); System.out.println(" d= "+d); System.out.println("f= "+f); System.out.println("g= "+g); } }
各类型数据间的相互转换 • 自动类型转换 • 从低级到高级发生自动类型转换。从表达范围小的类型向表达范围大的类型发生自动类型转换。不同数据类型的转换如下所示: • 低----------------------------------------------- --->高 • byte,short,char---> int--> long--> float--> double • 注意:byte,short和char在一起运算时,首先转换为int类型进行运算。 • 【例】分析下面程序中的错误。 • byte b1=5; • short s1=6; • short s2 ; • s2=b1+s1;
类型转换 • 强制类型转换 • 由高级向低级数据类型转换时,需要强制类型转换。例如: • int i=65; • char c; • c=(char)i; // 把int型变量转换成char型,需要强制类型转换。
算数运算符的特点 • 对于二元运算符,运算结果的数据类型一般为两个操作数中表达范围较大的类型。例如,一个整数和浮点数运算的结果为浮点数。 • 对于一元运算符,运算结果的类型与操作数的类型相同。 • 自增、自减运算符有前缀和后缀两种形式,当是前缀形式(即++、--符号出现在变量的左侧)时,对变量实施的运算是“先运算后使用”; 当是后缀形式(即++、--符号出现在变量的右侧)时,对变量实施的运算是“先使用后运算”。
算数运算符的注意事项 • 在Java中,"%"(求模运算符)的操作数可为浮点数,如52.3%10=2.3; • Java对"+"运算进行了扩展,可作字符串连接运算符,如"ab"+"efd"得"abefd"; • 做"+"运算时,如果一个操作数是字符串,其它操作数自动转换成字符串.如: String s; s="s:"+4*5; //结果是s="s:20"; • byte,short,char等类型进行混合运算时,会先自动转换为int类型再运算。
赋值运算符 • j=i+20;
条件运算符 • (boolean_expr)? true_statement:false_statement; • result=sum==0?100:2*num;
位运算符 • Java 用补码表示二进制数 • 1表示为二进制为 • 00000000 00000000 00000000 00000001(4个字节) • -1表示为二进制为 • 11111111 11111111 11111111 11111111 (4个字节)
注意事项 • 除 ~ 为右结合外,其余为左结合。 • 操作数的类型一般为整型或字符型。&,|,^三个运算符可以用于boolean。 • ">>"右移是用符号位来填充右移后留下的空位,">>>"是用零来填充空位. • 若两个数据的长度不同,如a&b,a为byte型,b为int型,系统首先会将a的左侧24位填满,若a为正,则填满0,若a为负,填满1即进行“符号扩充”。
class Example { public static void main(String args[]) { char a1='十',a2='点',a3='进',a4='攻'; char secret='8'; a1=(char)(a1^secret); a2=(char)(a2^secret); a3=(char)(a3^secret); a4=(char)(a4^secret); System.out.println("密文:"+a1+a2+a3+a4); a1=(char)(a1^secret); a2=(char)(a2^secret); a3=(char)(a3^secret); a4=(char)(a4^secret); System.out.println("原文:"+a1+a2+a3+a4); } }
举例 • 5<<32 的结果 • -1>>>1的 结果
逻辑运算符 • 逻辑运算只能处理布尔类型的数据,所得结果也是布尔值 • 逻辑运算符支持短路运算
class Example { public static void main(String args[]) { int x,y=10; if(((x=0)==0)||((y=20)==20)) { System.out.println("现在y的值是:"+y); } int a,b=10; if(((a=0)==0)|((b=20)==20)) { System.out.println("现在b的值是:"+b); } } }
表达式 • 表达式是程序设计语言的基本组成部分,表示一种求值的规则,是由运算符和操作数组成的符号序列。 • 表达式的运算结果的类型,就是表达式的类型 • 在对表达式进行运算时,遵循一定的规则,要按运算符的优先级从高到低进行,同级的运算符则按从左到右的方向进行。
几个特点 • 赋值运算符的优先级最低,因为赋值运算符要使用表达式的值; • 关系运算符的优先级比布尔逻辑运算符的优先级高; • .,[],()等运算符的优先级最高; • 一元运算符的优先级也比较高; • 算术元算符要比关系运算符和二元逻辑运算符的优先级要高。
数组的概念 • 数组由同一类型的一连串对象或者基本数据组成,并封装在同一个标识符(数组名称)下。 • 数组是对象 • 动态初始化 • 可以赋值给Object类型的变量 • 在数组中可以调用类Object 的所有方法
数组的概念(续) • 数组元素 • 数组中的变量被称作数组的元素 • 元素没有名字,通过数组名字和非负整数下标值引用数组元素。 • 每个数组都有一个由 public final 修饰的成员变量:length ,即数组含有元素的个数(length可以是正数或零)
数组的创建和引用 • 数组的声明 • 数组的创建 • 数组元素的初始化 • 数组的引用 • 多维数组
数组的声明 • 声明(Declaration) • 声明数组时无需指明数组元素的个数,也不为数组元素分配内存空间 • 不能直接使用,必须经过初始化分配内存后才能使用
数组的声明(续) Type[ ] arrayName; 例如: int[] intArray; String[] stringArray; Type arrayName[ ]; 例如: int intArray[]; String stringArray[];
数组的创建 • 用关键字new构成数组的创建表达式,可以指定数组的类型和数组元素的个数。元素个数可以是常量也可以是变量 • 基本类型数组的每个元素都是一个基本类型的变量;引用类型数组的每个元素都是对象的的引用
数组的创建(续) arryName=new Type[componets number]; • 例如: int[] ai; ai=new int[10]; String[] s; s=new String[3]; • 或者可以将数组的声明和创建一并执行 int ai[]=new int[10]; • 可以在一条声明语句中创建多个数组 String[] s1=new String[3], s2=new String[8];
数组元素的初始化 • 声明数组名时,给出了数组的初始值,程序便会利用数组初始值创建数组并对它的各个元素进行初始化 int a[]={22, 33, 44, 55}; • 创建数组的时,如果没有指定初始值,数组便被赋予默认值初始值。 • 基本类型数值数据,默认的初始值为0; • boolean类型数据,默认值为false; • 引用类型元素的默认值为null。 • 程序也可以在数组被构造之后改变数组元素值
数组的引用 • 通过下面的表达式引用数组的一个元素: arrayName[index] • 数组下标必须是 int , short, byte, 或者char. • 下标从零开始计数. • 元素的个数即为数组的长度,可以通过 arryName.length引用 • 元素下标最大值为 length – 1,如果超过最大值,将会产生数组越界异常(ArrayIndexOutOfBoundsException)
数组的引用(续) int[] data = new int[10]; • data[ -1 ] 非法的 • data[ 10 ] 非法的 • data[ 1.5 ] 非法的 • data[ 0 ] 合法的 • data[ 9 ] 合法的
数组的引用(续) int values[] = new int[7]; int index; index = 0; values[ index ] = 71; index = 5; values[ index ] = 23; index = 3; values[ 2+2 ] = values[ index-3 ];