? 建立个人知识体系
? 查漏补缺
? Java复习
控制语句结构有三:顺序,选择,循环
最基本的结构,程序按照语句顺序依次执行
a -> b -> c
选择结构有多种:
if会对条件表达式结果进行判断,为真则执行if{}中的语句,为假则跳过不执行if{}中的语句
if会对条件表达式结果进行判断,为真则执行if{}中的语句,为假则执行else{}中的语句
if-else if-else会对条件表达式结果进行多次判断,首先if会对条件表达式结果进行判断,为真则执行if{}中的语句,不满足则进入下一个else if中进行判断,为真则执行else if{}中的语句,否则继续进入下一个else if,直到满足,若条件表达式结果不满足任意的if或else if,有else时则执行else{}中的语句,没有else则结束判断继续向下执行程序
switch语句会根据表达式的值从相匹配的执 行,一直执行到break标签处开始ak语句处或 者是switch语句的末尾。与任一case值不匹配, 则进入default语句(如果有的话)
注意⚠️:jdk1.5前case的判断标签只能是int byte char short(没有long!!!)或枚举,jdk1.7开始支持String类型(必须是常量或字面量)
注意⚠️: switch语句判断由case开始,一直运行到break结束,所以不要忘记在执行语句的最后加上break,当然某些特殊情况可以不加,break不是必须的
注意⚠️:default就是如果没有符合的case就执行它,default并不是必须的,它的位置不固定,但是强烈建议写在末尾,注意下述情况的发生
public static void main(String[] args) {
int i=1;
switch(i) {
case 1:
System.out.println(1);
default:
System.out.println("default");
case 2:
System.out.println(2);
break;
case 3:
System.out.println(3);
break;
}
}
/*
输出结果:
1
default
2
原因是:一旦case匹配,就会顺序执行后面的程序代码(default也执行,所以强烈建议将default写在末尾),而不管后面的case是否匹配,直到遇见break
*/
循环结构也有多种:
在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于 后来每一次额外的循环,都会在开始前重新计算一次
语句中应有使循环趋向于结束的语句,否则会出现"死"循环
do-while循环结构会先执行循环体,然后再判断布尔表达式的值,若条件为真,执行循环体,当条件为假时结束循环
do-while循环的循环体至少执行一次
for循环在第一次反复之前要进行初始化,即执行初始表达式;随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环
如果三个部分都为空语句(分号不能省),相当于一个无限循环
简单讲就是循环里面套一个循环,上述三种循环可以互相嵌套,描述起来可能简单,但是需要多加练习才能掌握透彻
break用于跳出该循环
continue用于跳过本次循环
break和continue执行时,其后的语句均不执行
break和continue都可以带上标签
“标签”是指后面跟一个冒号的标识符,例如:“label:”。对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断 到存在标签的地方.
语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句。块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块.
方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数。方法用于定义该类或该类的实例的行为特征和功能实现。 方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。
对象名.方法名(实参列表)
方法的详细说明
- 形式参数:在方法声明时用于接收外界传入的数据。
- 实参:调用方法时实际传给方法的数据。
- 返回值:方法在执行完毕后返还给调用它的环境的数据。
- 返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为为void。
对于同一个类,如果这个类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样,这时候就构成方法重载
public void test() {
System.out.println("测试重载0");
}
// 返回结果类型不同,不构成重载
// public String test() {
// System.out.println("测试重载1");
// return "";
// }
// 参数不同,构成重载
public void test(int i) {
System.out.println("测试重载2");
}
// 参数不同,构成重载
public void test(int i,int y) {
System.out.println("测试重载3");
}
// 看起来是参数换了个位置,但是对于计算机而已这个测试重载3和并无区别,所以不构成重载
// public void test(int y,int i) {
// System.out.println("测试重载4");
// }
// 参数类型不同,构成重载
public void test(long i,int y) {
System.out.println("测试重载5");
}
// 与测试重载4不同的是,虽然都是i和y,但是在测试重载5基础上不同类型位置顺序发生了改变,所以构成重载
public void test(int i,long y) {
System.out.println("测试重载6");
}
简而言之就是自己调用自己,和嵌套循环一样,描述起来可能简单,但是需要多加练习才能掌握透彻
任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。