3.1 Java程序结构
3.1.1 Java程序构成
见P38 例3.1
说明:
(1)Java源程序一般包括Java包引入(如果有的话)和类定义两部分;
(2)Java程序必须包含一个可被外界所直接调用的类,即主类;
(3)一个Java程序可以定义多个类,但只能有一个主类,Java Applet程序的主类是继承自Applet的子类;Java Application程序的主类是包含main方法的类,应用程序从main方法开始执行;
(4)类定义由类声明语句和类体组成;
(5)类声明语句用来说明类的名称、访问权限及类的属性;
(6)类体也由两部分组成:成员变量和成员方法;
(7)成员变量为类中定义的变量(又称属性、域),用来说明类的状态和特性。定义成员变量需要声明成员变量的名称、类型。
(8)成员方法为类中定义的方法,用来实现类的功能和行为,是完成任务的关键。Java Application程序中一定要有main()主方法。而Java Applet程序一般要有init( )初始化方法或paint(Graphics g)画图方法;
(9)类体中除了成员变量和成员方法说明语句外没有其他语句,Java规定所有操作性语句必须放在成员方法中;
(10)Java方法类似于其他语言中的函数,可以调用,可以有返回值。成员方法可以继承父类的方法,也可以自定义成员方法。方法中也可以定义局部变量。
3.1.2 Java语句
语句以分号“;”作为结束标志
Java语句分为说明性语句和操作性语句。
说明性语句用来说明包和类的引入、类的声明、变量的声明
如:import java.applet.Applet ;
操作性语句有表达式语句、复合语句、选择语句和循环语句等
1.表达式语句
int k, i=3 , j=4;
k=i*j;
2.复合语句
复合语句也称为块(block)语句,是包含在一对大括号“{ }”中的任意语句序列。从语法上讲,一个复合语句被视为一个简单语句。
3.2 选择语句
3.2.1 if语句
格式: if (条件表达式)
语句
功能:条件表达式为true就执行语句
例: int i=70; char c='A';
if(i>=c) System.out.println("A小");
System.out.println("结束");
3.2.2 if……else语句
格式: if (条件表达式)
语句1
else
语句2
功能:条件表达式为true就执行语句1,为false执行语句2
例:if('A'>'a')
System.out.println("A比a大") ;
else
System.out.println("A比a小") ; // A65,a97,所以输出A比a小
System.out.println("结束");
3.2.2 if……else 复合结构
格式: if(条件表达式1) 语句1
else if (条件表达式2) 语句2
…………
else if (条件表达式n) 语句n
else 语句 n+1
功能:如果某个条件表达式的值为true,就执行它后面的语句,其余部分被忽略,若条件表达式都为假,执行else后语句。
例:public class SC{
public static void 输入分数(int a){
char 级别;
if (a>=90) 级别='优';
else if (a>=80) 级别='良';
else if (a>=60) 级别='中';
else 级别='差';
System.out.println("考试等级为 "+级别); }
public static void main(String arg[]) throws Exception{
if(arg.length==0) System.out.println("您没有输入任何参数") ;
else if(arg.length==1)
输入分数(Integer.parseInt(arg[0])); //arg[0]强制转换成int型
else {System.out.println("您输入的参数太多了") ;
System.out.println("命令行参数个数为"+arg.length) ; }
} }
执行:java SC 75 // 输出:考试等级为 中
java SC // 输出:您没有输入任何参数
java SC 75 86 // 输出:您输入的参数太多了
// 命令行参数个数为2
3.2.4 switch开关语句
格式:switch (表达式) {
case 常量1:[语句块1;] [break;]
…………
case 常量n : [语句块n;] [break;]
[default: 语句块n+1;]
}
功能:先计算switch表达式,再与每个case常量表达式值相比较,若相同,则执行相应语句被执行。若都不同,则执行default语句n+1(若有的话)
说明:
1.switch后表达式必须是整型,字符型;
2.每个case的常量必须不同;
3.若没有break,程序将继续执行下一个case语句;
4.default位置可任意,但要注意break
例:int a=80,b=9;
char oper='/';
switch(oper) {
case '+' : System.out.println(a+"+"+b+"="+(a+b)); break;
case '-' : System.out.println(a+"-"+b+"="+(a-b)); break;
case '*' : System.out.println(a+"*"+b+"="+(a*b)); break;
case '/' : System.out.println(a+"/"+b+"="+(a/b)); break;
default : System.out.println("操作符错误");
结果:80/9=8 //因为是整型数相除
思考:
(1)没有break的情况(将会执行“/”,“*”,“default”行);
(2)若操作数都不符,default改变位置,能否执行?(能),但后面要加“break”
例: public class SC{
public static void main(String a[])
{ int i=0,j=5;
switch(i) {
case 0: switch(j){
case 1: System.out.print("A"); break;
case 2: System.out.print("B"); break;
default:System.out.print("C") ; break; }
case 1: switch(j){
case 4: System.out.print("X"); break;
case 5: System.out.print("Y"); break; }
default: System.out.print("Z"); break; }}}
运行结果: CYZ
3.3 循环语句
3.3.1 for循环语句(与C、C++相同)
格式: for(赋初值;判断条件;循环控制变量增减方式)
{ 语句块 }
功能:(1)第一次进入for循环时,对循环控制变量赋初值;
(2)根据判断条件检查是否要继续执行循环。为真执行循环体内语句块,为假则结束循环;
(3)执行完循环体内语句后,系统根据“循环控制变量增减方式”改变控制变量值,再回到步骤(2)根据判断条件检查是否要继续执行循环。
例:public class SC {
public static void main(String args[]) {
int j=0 ;
for(int i=0 ; i<=5 ; i++) {
j+=i ;
System.out.println("j="+j) ; }
} }
运行结果:j=0
j=1
j=3
j=6
j=10
j=15
3.3.2 while循环语句
格式:while (条件表达式)
循环语句块
功能:先计算条件表达式,为true,则执行循环语句块,为false则跳出循环。
例:public class SC{
public static void main(String args[]) {
char c='a' ;
while(c<='e') {
System.out.print(c+" ") ;
c=(char)(c+1) ; }
} }
运行结果:a b c d e
3.3.3 do…while循环语句
格式: do { 循环体 }
while(条件表达式) ;
注意:while后面的“;”
3.3.4 循环语句的嵌套
例:public class SC {
public static void main(String args[])
{ int i , j ;
for (i=1;i<=9;i++)
{ for (j=1;j<=9;j++)
System.out.print(i+"*"+j+"="+(i*j)+"\t");
System.out.println();}
} }
运行结果:1*1=1 1*2=2…………1*9=9
2*1=2 2*2=4…………2*9=18
……………………
9*1=9 9*2=18…………9*9=81
3.3.5 循环语句小结
(1)初始化部分:用来设置循环的一些初始条件,计数器清零等;
(2)循环体部分:这是反复被执行的一段代码,可以是单语句,也可以是复合语句;
(3)迭代部分:这是当前循环结束,下一次循环开始时执行的语句,常用来使计数器加1或减1;
(4)终止部分:是一具布尔表达式,每一次循环要对该表达式求值,以验证是否满足循环终止条件。
3.4 跳转语句
Java支持3种跳转语句:break , continue , return
3.4.1 break语句
格式:break ;
功能:(1)退出switch结构;
(2)退出当前一层循环。
例:见P51
3.4.2 带标号的break语句
格式:标识符: //标识符应在break前面
……
break 标识符 ;
功能:直接跳转到标识符处,可以退出多重循环;
例:public class SC{
public static void main(String args[]) {
int i,j,k=0;
ABC: for(i=0,j=0;i<10 && j<20;i++,j+=5) {
for(;k<10;) {
k = k + 1;
break ABC; }
System.out.println("i = " + i + " j = " + j); }
System.out.println("Exit for loop==> i = " + i);
System.out.println("Exit for loop==> j = " + j);
System.out.println("Exit for loop==> k = " + k);
} }
运行结果:Exit for loop==> i =0
Exit for loop==> j =0
Exit for loop==> k =1
若去除“break ABC;”语句运行结果:
i=0 j=0
i=1 j=5
i=2 j=10
i=3 j=15
Exit for loop==> i =4
Exit for loop==> j =20
Exit for loop==> k =10
例: int i=3 j;
outer: while(i>0) {
j=3;
iner: while(j>0) {
if(j<2) break outer;
System.out.println(j+”and”+i);
j--;
} i-- ; }
3.4.3 continue语句
格式:continue ;
功能:只有用在循环结构中,跳过循环体中尚未执行的语句,重新开始下一轮循环。从循环体第一个语句开始执行。
例:public class SC {
public static void main(String args[]) {
int m=0 ;
do { m++ ;
if(m/3==0) continue ; //去除此行语句则输出5个“您好!”
System.out.println("您好!") ; }
while(m<5) ; } }
运行结果:输出3个“您好!”
3.4.4 带标号的continue语句
格式:标识符:
……
continue 标识符;
功能:用标号标出想跳到的语句,继续重复执行程序。
说明:“break 标识符;”是结束循环;“continue 标识符;”是继续循环。
例:P53
3.4.5 return语句
格式:return [表达式] ;
功能:返回调用的语句,执行它的下一条语句,可以带参数返回。
说明:当方法用void声明时,说明不需要返回值(即返回类型为空),使用不带参数return语句。不带参数return语句可以省略。
例:public class SC {
public static int Mul( )
{ int m=1;
for (int i=1 ; i<=5; i++)
m=m*i;
return m; }
public static void main(String args[])
{ System.out.println("5!="+ Mul( )); } }
运行结果:5!=120
作业:P56 3-3
方法一:public class SC{
public static void main(String arg[]){
char c='A';
while(c<='E') {
switch(c)
{case 'A': System.out.println("A 等级的分数段是90分以上");break;
case 'B': System.out.println("B 等级的分数段是80~90分以上");break;
case 'C': System.out.println("C 等级的分数段是70~80分以上");break;
case 'D': System.out.println("D 等级的分数段是60~70分以上");break;
case 'E': System.out.println("E 等级的分数段是60分以下");break; }
c++;}}}
方法二:import java.io.* ;
public class SC{
public static void main(String arg[]) throws IOException{
char c=(char)System.in.read();
// System.in.read( )只接受一个键盘输入字符,且是int型
switch(c)
{case 'A': System.out.println("A 等级的分数段是90分以上");break;
case 'B': System.out.println("B 等级的分数段是80~90分以上");break;
case 'C': System.out.println("C 等级的分数段是70~80分以上");break;
case 'D': System.out.println("D 等级的分数段是60~70分以上");break;
case 'E': System.out.println("E 等级的分数段是60分以下");break;
default : System.out.println("输入等级错误!"); }}}