8.流程控制语句
分为三类:顺序结构,选择结构,循环结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。
循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。根据判断条件,循环结构又可细分为以下两种形式:先判断后执行的循环结构和先执行后判断的循环结构。
9.选择结构语句
①if 结构
(1)基本格式
书写格式 if(比较表达式){
语句体 ;
}
先判断比较表达式,如果是true,执行语句体;否则不执行 语句体
int a=5;
int b=8;
if(a>b){
System.out.println(a+"比"+b+"大");
}
(2)if,else结构
if(比较表达式){
语句体 1;
} else {
语句体2;
}
先判断比较表达式,如果是true,执行语句体1;否则执行 语句体2.
int a=5;
int b=8;
if(a>b){
System.out.println(a+"比"+b+"大");
} else{
System.out.println(b+"比"+a+"大");
}
(3)else,if结构
if(比较表达式){
语句体 1;
} else if{
语句体2;
}
….
else {
语句n+1;
}
执行流程:那个比较表达式为真执行那个,如多个表达式正确,那个表 达式在前,现执行哪个 。否者最后一条语句。
if(season>=3&&season<=5)
{
System.out.println("你在春天里");
}else if(season>=6&&season<=8)
{
System.out.println("你在夏天里");
}if(season>=9&&season<=11)
{
System.out.println("你在球天里");
}else if(season==12||season==1||season==2)
{
System.out.println("你在冬天里");
}else
{
System.out.println("不知你在何年何月");
}
②switch…case语句
语句结构:switch(表达式){
case 值1:语句体1;
break;
case 值2:语句体2;
break;
case 值3:语句体3;
break;
……
default:
语句体n+1;
break;
}
执行流程:先计算表达式的值,然后和case后面的值匹配,如果有就执行对应的 语句,否者执行default控制的语句。
switch (season) {
case 3:
case 4:
case 5:
System.out.println("你在春天里");
break;
case 6:
case 7:
case 8:
System.out.println("你在夏天里");
break;
case 9:
case 10:
case 11:
System.out.println("你在秋天里");
break;
case 12:
case 1:
case 2:
System.out.println("你在冬天里");
break;
default:
System.out.println("输入错误");
break;
}
注:case穿透原则:例如上面的代码,可以简化代码。
③if与switch的区别
switch判断固定值时使用;if判断区间或范围时使用。
10)循环结构
①for循环
结构:
for(初始表达式;条件表达式;循环后的表达式){
循环体
}
例:
System.out.println("I love Java");
}
②while循环
(1)while循环
结构:while(判断条件语句){
循环体语句;
控制条件语句;
}
例:
int i=0;
while(i<=10){
System.out.println("我是一个脱离了低级趣味的人");
}
(2)do…while循环
结构 :
do{
循环体语句;
控制条件语句
}while(判断条件语句)
int i=0;
do{
System.out.println("望你青春不后悔");
i++;
}while(i<=10)
(3)while与do…while的区别
对于while,如果不满足条件,则不能进入循环;do….while循环至少会执行一次。
11.控制语句
常用的控制语句有:break,continue,return
①break:结束整个循环体。
for(int i=0;i<10;i++){
if(i==4){
break;
}
System.out.println("好好学习,天天向上。");
}
②continue:跳出本次循环,继续下一次循环,直到结束。
for(int i=0;i<10;i++){
if(i==4){
continue;
}
System.out.println("好好学习,天天向上。");
}
③return:返回
11)java.对象的内存结构
①程序计数器(PC)
线程私有,每个线程都有一个,独立存储,互不干扰。
②虚拟机栈
线城私有,生命周期与线程相同。用来存储变量,操作数栈,动态链表,方法出口
③本地方法栈
用于存储本地的native方法服务
④Java堆(直接内存)
线程共享,用于分配对象实例和数组
⑤方法区
线程共享,用来存储被虚拟机加载的类信息,常量,静态常量等
12)成员变量与局部变量
位置:成员变量在类中方法外;局部变量在方法中
内存:成员变量在堆内存中;局部变量在栈内存中
13)匿名对象
匿名对象没有名字,一般只适用于调用一次的情况。(不占内存)
public class Anomynous_Test{
public static void main(String [] args){
method(new Anomynous)
}
public static void method(Anomynous an){
an.color="red";
an.price=80000;
an.run;
}
}
class Anomynous{
String color;
int price;
public void run(){
System.out.println("汽车颜色:"+color+"\n"+"汽车价格:"+price);
}
}
14)数组
①一维数组的定义
动态初始化:只指定长度,由系统给出初始化值。
例:
int[] arr=new int[5];
静态初始化:
int[] arr={16,214,313,13,11};
注:整形类型默认初始值是0;
浮点类型默认初始值是0.0;
boolean类型初始值是false;
字符类型初始值是’\u0000’;
② 二维数组的定义
动态初始化:
格式一:数据类型 数组名 [][]=new 数据类型[m][n];
格式二:数据类型 数组名 [][]=new 数据类型[m][];
静态初始化:
数据类型 数组名[][]={{1,2,3,..},{4,5,6,….},….};
练习:
打印一个二维boolean类型数组
public class printBoolArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean [][] a={{false,true,true,false,false},{false,true,true,false,true},{true,true,false,false,true},{true,false,false,false,true},{true,false,false,false,true},{true,true,false,true,false},{false,false,true,false,false}};
printBoolArray(a);
}
public static void printBoolArray(boolean [][] a)
{
System.out.print(" ");
for(int j=1;j<=a[0].length;j++)
{
System.out.print(j+" ");
}
System.out.println();
for(int i=1;i<=a.length;i++){
System.out.print(i);
for(int j=0;j<a[0].length;j++)
{
if(a[i-1][j]==true){
System.out.print(" * ");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}