1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,2,讲:,结构化程序设计元素,1 Java,程序的构成,2,关键字、标识符、数据类型,3,常量与变量,4,运算符,5,控制流程,6,数组,7,字符串,面向对象的编程也是以面向过程编程为基础而发展起来的,因为在对象的方法等程序片内部,仍然需要严格遵守传统的结构化程序设计原则,因此,熟练掌握结构化程序设计的三种基本流程是进一步学习,Java,面向对象程序设计的基础。,1 Java,程序的构成,Java,语言的源程序代码由一个或多个编译单元组成,每个编译单元可包含三个要素:,(,1,)一个包声明(,pack
2、age statement,,可选);,(,2,)任意数量引入语句(,import statements,);,(,3,)类的声明(,class declarations,)和接口声明(,interface declarations,)。,该三要素必须以上述顺序出现。也就是说任何引入语句出现在所有类定义之前;如果使用包声明,则包声明必须出现在类和引入语句之前。每个,Java,的编译单元可包含多个类或接口,但是每个编译单元最多只能有一个类或者接口是公共的。,定义包语句:,package,无名包,包与类的存放路径,包中间类的引用与执行,引入包语句:,import,所引用的包的位置,lang,包,常
3、见的其他包:,util,awt,javax.swing,net,applet,2,关键字、标识符、数据类型,关键字对,Java,编译器有特殊的含义,它们可标识数据类型名或程序构造(,construct),名。,1.true,、,false,和,null,为小写,而不是象在,C+,语言中那样为大写。严格地讲,它们不是关键字,而是文字。然而,这种区别是理论上的。,2.,无,sizeof,运算符,因为所有数据类型的长度和表示是固定的,与平台无关,不是象在,C,语言中那样数据类型的长度根据不同的平台而变化。这正是,Java,语言的一大特点。,3.goto,和,const,不是,Java,编程语言中使用
4、的关键字。,标识符,在,Java,编程语言中,标识符是赋予变量、类或方法的名称。变量、函数、类和对象的名称都是标识符,程序员需要标识和使用的东西都需要标识符。标识符可从一个字母、下划线(_)或美元符号($)开始,随后也可跟数字、字母、下划线或美元符号。标识符是区分大小写,没有长度限制,可以为标识符取任意长度的名字。,下面是几个非法的变量名:,3max,(变量名不能以数字开头),room#,(包含非法字符“,#”,),class,(“,class”,为保留字),下面是几个有效的标识符:,identifier,thisone,UserName,User_name,_,system_varl,$ma
5、x,Java,编程语言有八个原始数据类型,可分为以下四种:,1,逻辑类,boolean,boolean,数据类型有两种文字值:,true,和,false,。,注意在,Java,编程语言中,boolean,类型只允许使用,boolean,值,在整数类型和,boolean,类型之间无转换计算。,在,C,语言中允许将数字值转换成逻辑值,这在,Java,编程语言中是不允许的。,数据类型,2,字符类,char,使用,char,类型可表示单个字符,字符是用单引号括起来的一个字符,,如,a,,,B,等。,Java,中的字符型数据是,16,位无符号型数据,它表示,Unicode,集,而不仅仅是,ASCII,集
6、与,C,语言类似,,Java,也提供转义字符,以反斜杠(,)开头,将其后的字符转变为另外的含义。,数据类型,值得注意的一点是,用双引号引用的文字,就是我们平时所说的字符串类型不是原始类型,而是一个类(,class,),String,,它被用来表示字符序列。字符本身符合,Unicode,标准,且上述,char,类型的转义字符适用于,String,。,3,整数类,byte,,,short,,,int,,,long,在,Java,编程语言中有四种整数类型,每种类型可使用关键字,byte,short,int,和,long,中的任意一个进行声明。所有,Java,编程语言中的整数类型都是带符号的数字,
7、不存在无符号整数。,整数类型的文字可使用十进制、八进制和十六进制表示。首位为“,0,”,表示八进制的数值;首位为“,0 x,”,表示,16,进制的数值。,请看下面的例子:,5,表示十进制值,5,075,表示八进制数值,75,(也就是十进制数,61,),0 x9ABC,表示十六进制的数值,9ABC,(也就是十进制数,39612,),整数类缺省为,int,类型,如在其后有一个字母“,L”,表示一个,long,值(也可以用小写“,l”,)。由于小写“,l”,与数字“,1”,容易混淆,因而,建议大家采用大写“,L”,。,4,浮点类,double,,,float,在,Java,编程语言中有两种浮点类型:
8、float,和,double,。如果一个数包括小数点或指数部分,或者在数字后带有字母,F,或,f,(,float,)、,D,或,d,(,double,),则该数为浮点数。如果不明确指明浮点数的类型,浮点数缺省为,double,。下面是几个浮点数:,3.14159,(,double,型浮点数),2.08E25,(,double,型浮点数),6.56f,(,float,型浮点数),在两种类型的浮点数中,,float,为,32,位(单精度),,double,为,64,位(双精度)。也就是说,double,类型的浮点数具有更高的精度。,在,Java,中,不同类型的数据既可以以常量的形式出现,也可以以
9、变量的形式出现。,常量就是指在程序执行期间其值不能发生变化的数据,常量是固定的。如整型常量,123,,实型常量,1.23,,字符常量,A,,布尔常量,true,等。,变量的值则是可以变化的,它的定义包括变量名、变量类型和作用域几个部分。注意以下几点:,(,1,)变量名必须是一个合法的标识符。变量名应具有一定的含义,以增加程序的可读性。,(,2,)变量类型可以为前面所说的任意一种数据类型。,3.,常量与变量,(,3,)声明一个变量的同时也就指明了变量的作用域,变量的作用域指明可访问该变量的一段代码。按作用域来分,变量可以有下面几种:局部变量、类变量、方法参数、例外处理参数。,局部(,local,
10、变量是在一个方法内定义的变量,也被称作自动(,automatic,)、临时(,temporary,)或栈(,stack,)变量。,当执行进入一个方法时,局部变量被创建,当执行离开该方法时,局部变量被清除,它的作用域为它所在的代码块(整个方法或方法中的某块代码)。在成员函数内定义的变量对该成员变量是“局部的”,因而,你可以在几个成员函数中使用相同的变量名而代表不同的变量。,在一个确定的域中,变量名应该是唯一的。通常,一个域用大括号“,”,和“,”,来划定。,(,4,)下面是几个变量的声明:,int,a,,,b,,,c;,/,定义,a,b,c,为,int,型变量,double d,,,e;,/,
11、定义,d,e,为,double,型变量,float f=2.5,g=5.8;,/,定义,f,g,为,float,型变量,并赋初值,(,5,)在,Java,程序中声明变量后,需给该变量赋值。可用赋值语句来初始化变量,任何变量都不能没有初始值(否则,则无法通过编译)。,public class,Datatype,public static void,main(String,args,),byte a=120;,short b=250;,int,c=2200;,long d=500000;char e=,花,;,float f=11111.111f;,double g=11111111.111;,b
12、oolean,男,=,true;boolean,女,=false;,System.out.println(“a,=”+a);,System.out.println(“b,=”+b);,System.out.println(“c,=”+c);,System.out.println(“d,=”+d);,System.out.println(“e,=”+e);,System.out.println(“f,=”+f);,System.out.println(“g,=”+g);,System.out.println,(“,男,=”+,男,);,System.out.println,(“,女,=”+,女,
13、);,4,运算符,按照运算符功能来分,基本的运算符分包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符等。,算术运算,算术运算符包括加号(,+,)、减号(,-,)、乘号(,*,)、除号(,/,)、取模(,%,)、自增运算符(,+,)、自减运算符(,-,)等。,在算术运算中,有以下值得注意的地方:,(,1,)算术运算符的总体原则是先乘除、再加减,括号优先。,(,2,)整数除法会直接砍掉小数,而不是进位。,(,3,)与,C,语言不同,对取模运算符,%,来说,其操作数可以为浮点数。如:,37.2%10=7.2,。,(,4,),Java,也用一种简写形式进行运算,并同时进行赋值操
14、作。例如,为了将,10,加到变量,x,,并将结果赋给,x,,可用:,x+=10,。,(,5,),Java,对加运算符进行了扩展,使它能够进行字符串的连接,如,abc+def,,得到串,abcdef,。,(,6,)前缀,+,、,-,与后缀,+,、,-,的区别:,+i,(前缀,+,)在使用,i,之前,使,i,的值加,1,,因此执行完,+i,后,整个表达式和,i,的值均为,i+1,;,i+,(后缀,+,)在使用,i,之后,使,i,的值加,1,,因此执行完,i+,后,整个表达式的值为,i,,而,i,的值变为,i+1,。,(,7,)由于取消了指针,有关地址运算符不再能够使用,如:*,,&,-,(,8,)
15、增加了,instanceof,()运算符,(,9,)引用符号,&,取消,5,控制流程,在,Java,语言中,提供了很丰富的流程控制语言,包括选择控制语句、循环控制语句、跳转控制语句。,if,语句,格式1:,if,(condition)statement1;,else statement2;,格式2:,if(condition),statement;,else if(condition),statement;,else if(condition),statement;,else,statement;,switch,语句,switch(expression),case value1:,/state
16、ment sequence,break;,case value2:,/statement sequence,break;,.,case,valueN,:,/statement sequence,break;,default:,/default statement sequence,将括号里“,expression,”,的值同每种情况列出的值做比较,若相等就执行后面的语句;若不等,就执行,default,语句。,注意:,表达式,expression,必须为,byte,、,short,、,int,或,char,类型。每个,case,语句后的值,value,必须是与表达式类型兼容的特定的一个常量(它
17、必须为一个常量,而不是变量),重复的,case,值是不允许的。通常在每一种,case,情况后都应使用,break,语句。否则,第一个相等情况后面所有的语句都会被执行,这种情况被称为落空。,循环语句,for,循环,while,循环,do-while,循环,for,语句,的格式,for(initialization;condition;iteration),/body,for,语句,的,执行过程,1)当循环启动时,先执行其初始化部分即,initialization,。,通常,这是设置循环控制变量值的一个表达式,作为控制循环的计数器。重要的是你要理解初始化表达式仅被执行一次。,(2)计算条件,con
18、dition,的值。条件,condition,必须是布尔表达式。它通常将循环控制变量与目标值相比较。如果这个表达式为真,则执行循环体,body,;,如果为假,则循环终止。,(3)执行循环体的反复部分即,iteration,,,这部分通常是增加或减少循环控制变量的一个表达式。,(4)接下来重复循环,首先计算条件,condition,的值,然后执行循环体,接着执行反复表达式。这个过程不断重复直到控制表达式变为假。,while,循环语句,while(condition),/body of loop,判断控制表达式,condition,的值,当其,是真时,,while,语句重复执行一个语句或语句块。其
19、中条件,condition,可以是任何布尔表达式。只要条件表达式为真,循环体就被执行。当条件,condition,为假时,程序控制就传递到循环后面紧跟的语句行。若只有单个语句需要重复,大括号则是不必要的,do-while,循环语句,do,/body of loop,while(condition);,先执行循环体,然后再计算条件表达式,condition,。如果表达式为真,则循环继续。否则,循环结束。对所有的,Java,循环都一样,条件,condition,必须是一个布尔表达式。,跳转控制语句,break,语,句,continue,语句,return,语句,break,语句,break;,功能
20、在,switch,语句中,它被用来终止一个语句序列;,在循环体中能被用来退出一个循环;,它能作为一种“变形”的,goto,语句来使用。,continue,语句,continue;,功能,在,while,和,do while,循环中,,continue,语句使控制直接转移给控制循环的条件表达式,然后继续循环过程。在,for,循环中,循环的反复表达式被求值,然后执行条件表达式,循环继续执行。对于这三种循环,任何中间的代码都将被绕过。,return,语句,return,语句用来明确地从一个方法返回,也就是,return,语句使程序控制返回到调用它的方法。因此,将它分类到跳转语句中。在一个方法的任何
21、时间,,return,语句可被用来使正在执行的分支程序返回到调用它的方法。,/,This program demonstrates return statement.,class Return,public static void main(String,args,),boolean,t=true;,System.out.,println,(Before the return.);,if(t)return;/return to caller,System.out.,println,(This wont execute.);,特别的流程控制(异常流程),try.,catch().,catch()
22、6,数组,1、数组声明:,声明数组包括数组的名字、数组包含的元素的数据类型。,声明一维数组有下列两种格式:,数组元素类型 数组名字;,数组元素类型 数组名字;,声明二维数组有下列两种格式:,数组元素类型 数组名字;,数组元素类型 数组名字;,创建数组,声明数组仅仅是给出数组名字和元素的数据类型,要想真正的使用数组还必须为它分配内存空间,即创建数组。,在为数组分配内存空间时必须指明数组的长度。为数组分配内存空间的格式如下:,数组名字,new,数组元素的类型,数组元素的个数,;,例如:,boy,new float7,声明数组和创建数组可以一起完成。,例如:,float boy,new float
23、7;,二维数组和一维数组一样,在定义之后必须用,new,运算符分配内存空间。例如:,int,mytwo,;,mytwo,=new,int,35;,或,int,mytwo,=new,int,34;,一维数组通过下标符访问自己的元素,如,boy0,、,boy1,等。需要注意的时下标从,0,开始,因此,数组若是,8,个元素,下标到,7,为止。,import,java.applet,.*;import,java.awt,.*;public class Example5_1 extends Applet float a;public void init()a=new float5;a0=23.9f;a1
24、34.9f;a2=45f;a3=56.98f;a4=100f;public void,paint(Graphics,g)g.drawString(a0=+a0+a1=+a1+a2+a2+a3=+a3+a4=+a4,12,12);,注:有一个重要的表示数组长度(即元素的个数)的格式。,比如,如果创建了,float a,new float6,则,a.length,的值为,6,。,创建数组后,系统会给每个数组元素一个默认的值,如,,float,型是0.0。,我们在声明数组时同时也还可以给数组的元素一个初始值,,如:,float boy=12.3f;23.89f,2.0f,23f,578,98f;,
25、上述语句相当于:,float boy=new float 5;,然后:,boy012.3f;boy1=23.89f;boy2=2.0f;boy3=23f;boy4=578.98f;,例如:,String s=we,are,hello,123,who?;,初始值,7,字符串,Java,使用,java.lang,包中的,String,类来创建一个字符串变量,因此字符串变量是类类型变量,是一个对象。,1,、字符串常量 如,“你好”、“,1234.978,、,“,weqweo,”,。,2,、声明字符串 如,,String s,。,3,、创建字符串 使用,String,类的构造方法:,string,(字
26、符串常量)例如:,s=new String(we are students);,string,还有两个比较常用的构造方法:,(,1,),String,(,char a):,用一个字符数组,a,创建一个字符串对象,(,2,),String,(,char,a.int,startIndex,int,endIndex,):,提取字符数组,a,中的一部分字符创建一个字符串对象,参数,startIndex,和,endIndex,分别指定在,a,中提取字符的起止位置。,字符串与字符、字节数组,String,类中有两个用字节数组创建字符串对象的构造方法:,String,(,byte),该构造方法使用平台默认的
27、字符编码,用指定的字节数组构造一个字符串对象。,String,(,byte,,,int,offset,int,length),该构造方法使用平台默认的字符编码,用知道的字节数组的一部分,即从数组起始位置,offset,开始取,length,个字节构造一个字符串对象。,String,类有一个将字符串转化为字符数组的实例方法:,public byte,getBytes,(),使用平台默认的字符编码,将当前字符串转换为一个字节数组。,public class Example,public static void,main(String,args,)byte b=new byte9;,b0=97;b1
28、98;b2=99;/,字母,a,的,ASCII,码值是,97,。,b3=100;b4=101;b5=102;b6=g;b7=f;b8=h;String,s_b,=new,String(b);String,s_b_3=new String(b,3,6);String,s_c,=new,String(ABC);String,s_d,=new String(,你我他,);byte c=,s_c.getBytes();byte,d=,s_d.getBytes,();System.out.println(s_b);System.out.println(s_b_3);,System.out.printl
29、n,(,数组,c,的长度是:,+,c.length,);,System.out.println,(,数组,d,的长度是,(,一个汉字占两个字节,),:,+,d.length,);,System.out.println,(,用,ASCII,数值输出,c,:,);,for(int,i=0;i,c.length;i,+),System.out.println,(,c+i,+,:,+,ci,);,System.out.println,(,用,ASCII,数值对应的字符输出数组,c,:,);,for(int,i=0;i,c.length;i,+),System.out.println,(,c+i,+,:
30、char)ci,);,System.out.println,(,用,ASCII,数值输出数组,d,:,);,for(int,i=0;i,d.length;i,+),System.out.println,(,d+i,+,:,+,di,);,上述程序的输出结果:,abcdefgfh,defgfh,数组,c,的长度是:,3,数组,d,的长度是,(,一个汉字占两个字节,),:,6,用,ASCII,数值输出,c,:,c0,:,65c1,:,66c2,:,67,用,ASCII,数值对应的字符输出数组,c,:,c0,:,Ac1,:,Bc2,:,C,用,ASCII,数值输出数组,d,:,d0,:,-60d1,:,-29d2,:,-50d3,:,-46d4,:,-53d5,:,-5,作业,用从命令行输入数据的方式,写一个整数的排序算法。,提示:字符串转化为整数的可以使用,Integer.parseInt(String,s),进行。,






