1、1,第三章 Java语言基础,3.1 标识符与数据类型3.2 表达式与语句3.3程序流控制3.4 数组,2,3.1 标识符与数据类型 3.1.1 Java基本语法,语句与语句块 ; 注释 / /* */ /* */,3,3.1.2 标识符对变量、类和方法进行命名,定义规则: 以字母,_,或$开头,不能以数字开头 大小写敏感,且长度没有限定 不能是Java中的关键词 如: user_name$change Java采用Unicode字符集,支持多种语言。 风格约定:_,$不作为变量名,方法名开头变量名、方法名首单词小写,其余单词只有首字母大写 如anyVariableWorld 接口名、类名首单
2、词第一个字母大写。 常量:完全大写,并用下划线“_”作为其中各个单词的分隔符 方法名应使用动词 变量名应该能表示一定的含义,4,3.1.3 关键字(P38. 表3-1),5,3.1.4 Java 基本数据类型,逻辑型:boolean文字型: char String整数类型: byte, short, int, long浮点型: double , float,6,逻辑型:boolean, 取值:true , false默认初始值:false; 例如:boolean truth = true; Java中的布尔值和数字之间不能来回转换,即false和true不对应于任何零或非零的整数值,3.1.4
3、基本数据类型-逻辑型与文字型,7,3.1.4 基本数据类型-文字型,文字型:char 、String char:16位的unicode(国际码)字符。如,char mychar=Q; 定义形式:a 、 u0061 ; 转义字符:形如t; (P39 表3-2)String类 String greeting=“Good Morning! n”;例3-1 char类型的值到int类型的转换,8,整数类型:byte, short, int 和 long,类型 长度 取值范围byte 8位 -27 27-1 short 16位 -215 215-1 int 32位 -231 231-1 long 64位
4、 -263 263-1,3.1.4基本数据类型-整数类型,所有整型变量的默认初始值是0,9,Java中缺省整型是 int 可有3种形式:十进制、八进制、十六进制十进制 八进制 十六进制int 24 0771 0XAB07 long 24L 0771L 0XAB07L,整型常量,10,3.1.4基本数据类型-浮点类型,浮点型:float 和 double 长度: float : 32位double: 64位 默认初始值是0.0,缺省是 double 类型, 浮点类型的常量默认是double类型 表达方法:E或e - 科学记数法 6.02e23F或f - 表示float类型, 6.02e23FD或
5、d - 表示double 型, 2.718D 例3-2 基本数据类型的声明与赋值 例3-3 输出Java基本数据类型相关的一些常量,11,3.1.5 复合数据类型,“日期” 的两种不同表达方式: 方式一: int day, month, year; /定义年、月、日int d1,m1,y1; / 定义一个日期int d2,m2,y2; /定义另一个日期方式二: class Dateint day;int month;int year;void setDate( int a, int b, int c). Java中用户定义的类和接口属于符合数据类型。,12,3.1.6 基本类型变量与引用类型变
6、量,数据类型变量类型 基本数据类型基本类型变量 复合数据类型引用类型变量 基本类型变量 Java的8种基本类型的变量称为基本类型变量 基本数据类型的变量包含了单个值,这个值的长度和格式符合变量所属数据类型的要求 引用类型变量 类、接口、数组变量是引用类型变量 引用类型的变量值指向内存空间的引用(地址),所指向的内存中保存着变量所表示的一个值或一组值,13,3.1.6 基本类型变量与引用类型变量,在Java中,基本类型变量声明后,系统直接分配空间。因而程序中可以直接操作。 如: int a;a = 12;非基本类型不直接分配空间,而是分配引用空间,数据空间没有分配。 只有通过实例化,才能给数据分
7、配空间。 引用型变量在声明后,不能直接引用,必须经过实例化开辟数据空间,才能对变量所指的对象进行访问。,14,类的变量的声明与引用,例: 1 Date today;2 today = new Date( );,today,15,引用变量之间的赋值,1 Date a, b ; 2 a=new Date( ); 3 b = a ;,0xabcd,0xabcd,16,3.2 表达式与语句 3.2.1 变量,变量按作用域划分: 局部变量:所在的方法或代码块 类成员变量:所在的类 方法参数:所在的方法 异常处理参数,3.2.1 变量,变量的初始化 变量在使用前必须经过初始化 当创建一个对象时,对象所包含
8、的实例变量在存储空间分配后将进行初始化 类成员变量是系统自动进行初始化,而局部变量必须在使用前手工赋初值进行初始化,否则将产生编译错误 例3-4 局部变量初始化,17,18,3.2.2运算符与表达式,与C不同之处:1、 Java是强类型语言,类型限制比C严格,运算 符的操作对象的类型会受到更多限制。2、Java不提供指针运算符,增加了对象操作符 instanceof,字符串运算符+和零填充的右移等。,19,1、算术运算操作符:+,-,*,/, %, +, - - 2、关系操作符:, =, , , & , |, (逐位异或), (按位取反) 4、逻辑操作符:&, |, !, (异或),&, |
9、5、赋值操作符:=, +=, -=, *=, /=, %=,&=, |=, =, =, = 6、其它操作符: ?: , , . , ( ),(type), new, instanceof,Java操作符类别,20,算术运算符,整型、浮点型经常进行混合运算,运算中,不同类型的数据先转换为同一类型,然后进行运算。按如下顺序转换 byte-short-char-int-long-float-double 即使两个操作数全是byte型或short型,表达式的结果也是int型 除法和求余运算中,除数为0会产生异常 求余运算的操作数可以是浮点数 “+”运算符用于连接字符串 P50-51 表3-8、3-9、
10、3-10 例子3-5 一元算术运算符的使用 java.lang.Math类,21,用“+” 运算符连接字符串,String salutation = “Dr. ”; String name = “Pete” + “Seymour” ; String title = salutation + name ;则title 值:Dr. Pete Seymour,22,关系运算符与关系表达式,二元运算符、=、=、=、!= 关系表达式的值:false OR true Java中任何类型的数据(包括基本数据类型与复合类型)都可以通过“=”或“!=”来比较是否相等。,23,逻辑操作符与逻辑表达式,&、|、!、
11、&、|、 &,| 称为短路与、或。&, | 称为不短路与、或;,24,位操作符,对整型数值的二进制位进行操作, 利用屏蔽和置位技术来设置或获得一个数字中的单个位或几位,或者将一个位模式向右或向左移动 符号:&、|、 如果操作数是boolean型的,则进行逻辑操作; 如果操作数是整数类型,则进行位操作,25,位操作符,1357=00000000,00000000,00000101,01001101 -1357=11111111,11111111,11111010,10110011 则 13575=00000000,00000000,00000000,00101010 -13575=1111111
12、1,11111111,11111111,11010101 13575=0000000,00000000,00000000,00101010 -13575=00000111,11111111,11111111,11010101 13575=00000000,00000000,10101001,10100000 -13575=11111111,11111111,01010110,01100000,26,右移操作符 和 , :带符号右移1010 2 111010.:无符号右移,以0 填充 1010 2 001010 .,27,其他运算符,赋值运算符 ,扩展赋值运算符 (P55) 表3-16,3-17
13、, Java 运算符的优先级 (P56)表3-18,28,Java 强制类型转换,一般形式:(type) expression例:(float)x/2对强制类型转换的限制:整型与浮点型可以相互转换,但基本类型和数组、对象等复合类型之间不能互相转换。,29,3.2.3 语句,表达式语句 赋值表达式 增量表达式 方法调用表达式 对象创建表达式 声明语句 程序流控制语句,30,3.3程序流控制, while do while for If else switchcase,31,While语句举例,public class WhileDemo public static void main(Strin
14、g args) String copyFromMe = “Copy this string until you “ + “encounter the letter g.“;StringBuffer copyToMe = new StringBuffer();int i = 0;char c = copyFromMe.charAt(i);while (c != g) copyToMe.append(c);c = copyFromMe.charAt(+i);System.out.println(copyToMe); ,Copy this strin,结果:,32,do-while语句示例,publ
15、ic class DoWhileDemo public static void main(String args) String copyFromMe = “Copy this string until you “ +“encounter the letter g.“;StringBuffer copyToMe = new StringBuffer();int i = 0;char c = copyFromMe.charAt(i);do copyToMe.append(c);c = copyFromMe.charAt(+i); while (c != g);System.out.println
16、(copyToMe); ,Copy this strin,结果:,33,for (初始语句;逻辑表达式;迭代语句) for( ; ; ) 例3-8 用for语句输出一个数组的元素,for语句,34,JDK1.6中增强的for 循环,将一个集合作为一个整体放入for循环中,在for循环中可将集合中的元素进行逐个处理。 String names = ”Wang”,”Zhang”,”Li”,”Wu”;for(String option: names) System.out.println(option);,35,if-else语句,if关键词之后的逻辑表达式必须得到一个逻辑值,Java不提供数值与逻
17、辑值之间的转换 一个if语句可以有多个else if语句,但只能有一个else语句 例3-9 利用if-else语句输出成绩等级,36,switch-case语句,switch(整型表达式) case c1:语句组1;break; case c2:语句组2;break; case ck:语句组k;break; default:语句组;break; ,37,注意: Switch中的整型表达式的值必须是int兼容的类型,不允许使用浮点型和long型,并且各case子句中的c1,c2必须是int型或字符型常量 各case分支既可以是单条语句,也可以是由多条语句组成的语句组 default子句可选 不
18、论执行哪个case分支,程序流都会顺序执行下去,直至遇到break语句为止。 例3-10(a) 输出一个月份的英文名称 例3-10(b)输出一个日期所包含月份的天数,38,特殊跳转语句, break label从switch语句、循环语句中跳出。 不带标签:结束最内层的switch、for、while语句的执行带标签:结束标签所指示的循环的执行例3-12 在二维数组中搜索指定的值 continuelabel 不带标签: 跳过最内层循环的剩余语句,执行最内层循环的下一次循环带标签:结束标签所指外层循环的当前循环,开始执行该循环的下次循环例3-14 在一个字符串中搜索另一个字符串 label: s
19、tatement,39,特殊跳转语句举例,Loop: while (true)for( )switch( )case -1:case n:break loop ; test: for( )while( )if( )continue test ;,/跳出while去11行,/ 跳到11行,40,数组,声明数组 数组的创建与初始化 多维数组 数组拷贝,41,3.4 数 组,数组中的元素都是同一种类型。 数组的长度在创建的时候确定,并且在创建后固定不变。 如果要建立存储不同类型数据的集合,或者要求集合的长度可以动态变化,可以使用Collection(集合)类。,42,3.4.1数组声明,可以声明基本
20、类型和类类型的数组 声明包含两部分:数组类型与数组名称。 格式:C,C+ 标准形式:char s ; Point p ; char s ;Point p ;,43,数组声明,在Java中,数组作为类来处理 所以数组声明并不创建实例对象,而是创建一个可用来引用该数组的引用 在数组的声明中不指定数组的长度,44,3.4.2数组的创建与初始化,可以象其它对象一样,使用new来创建,格式: new elementTypearraySize 例: s = new char20; /创建有20个字符的数组p = new Point100; /创建100个Point的引用数组,45,数组的初始化,数组元素在
21、创建后被自动初始化。字符串 - u0000, null对象数组 - null用初始值创建数组 String names = “Jack”, “Wang”, “Lee”; int a = 1, 2, 3; Date d = new Date( ), new Date( ), new Date( ),数组的初始化,数组的长度 所有数组都有特型变量length,作为数组的一部分存储起来 数组在创建后长度是不可变的,我们不能改变数组的长度,但可以使用该数组变量指向另一个全新的数组 int a=new int6; a0=10 a=new int10 例3-15 创建整型数组并将其值打印出来,46,47,
22、对象数组,除了基本类型以外,还可以创建对象类型的数组。Point p ; /创建包含10个Point类型对象引用的数组 p = new Point10; /创建10个Point对象:p0 = new Point( );p1 = new Point( );,48,对象数组举例,public class ArrayOfStringsDemo public static void main(String args) String anArray = “String One“, “String Two“, “String Three“ ; for (int i = 0; i anArray.lengt
23、h; i+) System.out.println(anArrayi.toLowerCase(); ,49,3.4.3多维数组,声明方法int a ; 或int a; 实例化a = new int44; /直接为每一维分配内存,生成规则数组a = new int4 ; / 只有最后维可以不给值,其它都要给/可以生成不规则数组a0 = new int10 ;a1 = new int5; 数组成员变量length - 数组元素个数:a = new int 1012;a.length = 10 ;a0.length = 12 ;,50,多维数组示例,public class ArrayOfArray
24、sDemo2 public static void main(String args) int aMatrix = new int4; /populate matrix for (int i = 0; i aMatrix.length; i+) aMatrixi = new int5; /create sub-array for (int j = 0; j aMatrixi.length; j+) aMatrixij = i + j; /print matrix for (int i = 0; i aMatrix.length; i+) for (int j = 0; j aMatrixi.l
25、ength; j+)System.out.print(aMatrixij + “ “); System.out.println(); ,51,数组拷贝,数组一旦创建,其大小不可变,但已有的数组变量可指向全新的数组;该数组原指的内容丢失int a = new int6;a = new int10 ; / 不必重新声明 a 数组变量之间赋值是引用赋值。 1 int a = new int 6; 2 int b ; 3 b = a ;,52,数组数据的复制,通过拷贝数组的函数。System.arrayCopy(Object source, int srcIndex, Object dest, int destIndex, int length),数组拷贝,53,数组拷贝示例,public class ArrayCopyDemo public static void main(String args) char copyFrom = d, e, c,a, f, f, e, i, n,a, t, e, d ;char copyTo = new char7; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo); ,54,数组拷贝示例,运行结果:,