java 三大结构
从程序的流程上分为顺序结构、选择结构、循环结构
顺序结构
任何java程序固定从 main 所在的位置开始。进入到main中之后,会从第一行逐行去执行代码。
选择结构
JVM 在执行代码的过程中,在局部地方进行选择性的执行某些代码,或者跳过某些代码。
选择结构分为两类:
判断结构、循环结构
判断结构
在 JVM 执行的过程中会进行判断。判断成立应该执行哪些代码, 判断不成立执行另外一部分代码。判断结构常用三种书写格式:
1.单独的if结构:
//格式:
if(判断的条件){
判断成立后要执行的代码
}
/*执行过程:JVM 在执行过程中遇到if关键字,这时JVM就知道这里是一个判断结构,首先JVM回去执行if后面
的小括号中的条件,根据条件的结果来选择是否执行if后面的大括号中的代码。条件成立,则执行。不成立,则不
执行。*/
2.if 和 else 结构
//格式:
if(判断的条件){
判断成立后要执行的代码
}else{
条件不成立需要执行的代码
}
/*执行过程:JVM 遇到if关键字,先执行if后面小括号中的条件,如果条件成立,就执行直接if后面大括号中
的代码。如果if后面的条件不成立,执行else后面大括号中的代码。
else后面虽然没有判断条件,但实际上它成立的条件,就是if不成立的条件*/
if - else if - else 结构
//格式:
if(判断的条件){
条件成立要执行的代码
}else if(判断的条件){
条件成立要执行的代码
}else if(判断的条件){
条件成立要执行的代码
}
……
else{
所有条件都不成立后要执行的代码
}
//当条件有多种情况,并且需要分别进行判断然后执行对应的代码
三元运算符与 if-else 结构
在一些if-else的判断结构中,可以使用三元运算符代替
class Demo{
public static void main(String[] args) {
int a = 32;
int b = 16;
int max ;
if(a>b){
max = a;
}else{
max = b;
}
System.out.println("最大值是:" + max);
//使用if-else结构找到两数中的最大值储存在max空间中,同样使用三元运算也可以完成
max = a > b ? a : b ;
System.out.println("最大值是:" + max);
}
}
switch结构
switch结构类似于判断结构,它主要是提供多种可能性,让程序完成类似于分支执行的结果。
语法格式:
switch(表达式或值){
case 值1:
语句;
break;
case 值2:
语句;
break;
……
default:
语句;
break;
}
/*switch结构要求,表达式或值最后只能是一个明确的值。
case:它提供多种可能,如果case后的值与switch小括号中的值相同,则执行当前这个case下的语句。
defaul:如果所有的case后的值都与switch小括号中的值相同,则执行default下的语句。
1.case在程序中没有数量的限制,同时也没有书写顺序的限制。
2.如果每个case都是单独的语句,表示不同的执行内容,彼此之间的代码没有任何的直接关系,这时需要
在每个case的语句后面添加break关键字。
3.default语句可以省略。
4.多个case的值不相同,如果它们的执行语句相同,可以组合在一起。
5.在switch中一旦程序进入到case后面,就会从当前的case往下执行,不管后续的case后面的常量值是否
和switch中的值相同,都会执行。直到遇到break,才会跳出当前的switch结构。
if 与 switch 的区别
if 判断并不限制数据的类型,只要小括号中的结果是一个Boolean值都可以进行下一步操作,使用 if 可以判断任何情况下的数据。
switch结构它对数据的类型有限制,小括号中只能出现下面几种类型:
byte 、 short 、 int 、 char 、 枚举类型(jdk 5加入) 、 字符串类型(jdk 7加入)
循环结构
在java中有三种结构可以完成循环:
while 循环 、do - while 循环 、 for 循环
while循环
//格式:
while(循环条件){
条件成立后执行的语句
}
// while 循环演示 打印数字 1 ~ 10
class Demo {
public static void main(String[] args){
int x = 1;
while( x <= 10 ){
System.out.println(x);
x++; // ++x , x = x + 1 ; x += 1;
}
}
}
/*
while循环的执行流程:
1、JVM遇到while关键字,先执行while后面的条件
2、条件成立,执行while后面大括号中的所有代码
3、大括号中的代码执行完成之后又会返回到while的条件部分继续判断,直到while的条件不成立的时候,才会
跳出while循环,否则就会一直在while中进行重复执行。
*/
do-while循环
//格式:
do{
条件成立执行的语句
}while(循环条件表达式);
//do-while 循环演示 打印数字 1 ~ 10
class Demo{
public static void main(String[] args){
int x = 1;
do{
System.out.println(x);
}while(x <= 10);
}
}
/*
do-while循环执行流程:
先执行循环体的代码,执行完之后,再进行while循环条件判断,知道条件不成立,跳出循环。
*/
while循环与do-while循环的区别
1.while循环是先进行判断,在执行语句,而do-while是先执行一次语句,再进行判断。
2.while循环可能一次都不执行,但do-while循环至少执行一次。
for循环
//语法格式:
for(表达式1 ; 表达式2 ; 表达式3 ){
执行语句;
}
表达式1:一般是定义的表达式,也可以是别的表达式,可以省略,后面的分号不能省略
表达式2:如果没有省略,它的结果必须为一个Boolean值
表达式3:一般是变量更新的语句,也可以是别的表达式,可以省略
//for 循环演示 打印 1 ~ 100 的数字
class Demo{
public static void main(String[] args){
for(int x = 1 ; x <= 100 ; x++){
System.out.println(x);
}
}
}
/*
for 循环执行流程:
1、先执行for的表达式1,
2、直接进入表达式2,如果表达式2的结果为true,会进入到for的循环体
3、将循环体的所有代码全部执行完成之后,会进入到表达式3
4、表达式3执行完之后,跳会到表达式2继续判断,如果成立就继续执行循环体。如果不成立,跳出for循
环。
*/
循环嵌套
在java中,循环是可以无限嵌套下去的,但一般要求不超过2层
/*
循环嵌套演示:
打印一个图案:
*
**
***
****
*****
******
*/
class Demo{
public static void main(String[] args){
for(int i = 0 ; i <= 5 ; i++) {
for(int j = 0 ; j <= i ; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
/*
在for循环中,无论嵌套了多少层,每层的循环体执行完之后,都应该进入表达式3中去。
在while循环中,无论嵌套了多少层,每层的循环体执行完之后,都应该进入对应的while的条件表达式。
*/
while 和 for 的区别
如果一个变量是为循环而存在,while循环定义的变量需要放在while的外面,在循环结束的时候,变量依然可以被访问使用。这时访问这个变量已经没有意义了。
for循环中定义的变量,是进入for才定义的。在for循环中可以使用,for循环结束之后,变量就会被释放。它更好的可以节省内存空间。
流程控制
一般循环都是从循环条件不成立的时候结束的。但是有时程序必须在满足某种情况下之后让循环提前结束或者提前进入到下次循环。
在java中提供了两个关键字:
break 、 continue
break关键字
//break 关键字演示
class Demo{
public static void main(String[] args){
int count = 0;
//判断能不能被3和7整除
for(int x = 1 ; ; x++){
if(x % 3 == 0 && x % 7 == 0){
//判断成立,说明可以整除
count++;
System.out.println("x = " + x);
}
//再添加一个判断,当count为10的时候结束循环
if(count == 0){
break;
}
System.out.println("acb");
}
System.out.println("count = " + count);
}
}
continue关键字
continue 的功能是结束本次循环进入下次循环
//continue关键字演示
class Demo {
public static void main(String[] args){
//打印 1 ~ 50 的偶数
for(int x = 1 ; x <= 50 ; x++){
//当判断成立 执行continue,会直接进行下一次循环,不会再执行第二个if语句
if(x % 2 == 1){
continue;
}
if(x % 2 == 0){
System.out.println("x = " + x );
}
}
}
}
break 和 continue 的注意事项
1.break或continue单独出现的时候,后面不能有其他的语句。属于语法错误。因为后面的语句无法执行到。
2、在死循环的后面不能有并列的代码。因为无法被执行到。