一、程序流程控制
1、判断结构——if语句
格式1:
if(条件表达式){
执行语句;
}
格式2:
if(条件表达式){
执行语句;
}else{
执行语句;
}
格式3:
if(条件表达式){
执行语句;
}else{
}else if(条件表达式){
执行语句;
}else{
执行语句;
if 语句注意事项;}
A:比较表达式无论简单还是复杂,结果必须是boolean类型。B:if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句就不能省略。如果if语句没有写大括号,if就只能控制离它最近的单挑语句。C:一般来说,有左大括号就没有分号,有分号就没有左大括号。D:三元运算符都可以用if语句转换,反之不成立。 因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。当if语句控制的操作是一个输出语句的时候就不能 转换为三元运算符 。
2、选择结构——switch语句
case 值1:
语句体1;break;
case 值2:
语句体2 ;
break;
...
default: //当所有的值都和表达式不匹配的时候,就执行此控制的语句,其实它就相当于if语句的else
语句体n+1;break;
switch语句特点:
A:switch语句选择的类型JDK5以前只有四种:byte,short,int,char。JDK 5.0以后可以是枚举。
JDK 7.0以后可以是字符串
B:结束switch语句的两种情况:①遇到break,②执行到switch语句结束。C:如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
D:进入switch语句后,执行顺序是先执行case,然后从上到下,最后再执行default。即使default放在case上面,执行顺序也不变。
3、循环结构——while, do while, for
while语句格式:
do while语句格式:
执行语句;
for语句格式:
for(初始化表达式;循环条件表达式;循环后的操作表达式){
}
优先考虑for,其次while
while and for循环的区别:
而while循环使用的变量在循环结束后还可以继续使用。
如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。
不知道用哪个就用for循环。因为变量及早的中内存中消失,可以提高内存的使用效率。
如果一个范围的,用for循环非常明确。如果是不明确要做多少次,用while循环较为合适
5、其他流程控制语句
A:switch语句中。B:循环语句中。
(循环语句中加入了if判断的情况)
A:跳出单层循环B:跳出多层循环
标签名:语句break 标签名
结束本次循环,继续下次循环
不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法,
二、方法
也叫函数,就是完成特定功能的代码块。
格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2, ...){
方法体语句;return 返回值;
}
该函数中的return语句如果在最后一行,可以不写。
实际参数:就是实际参与运算的形式参数:就是方法定义上的,用于接收实际参数的。参数类型:就是参数的数据类型。
方法的特点:
A:定义函数可以将功能代码进行封装。B:便于对该功能进行复用。C:函数只有被调用才会被执行。D:函数的出现提高了代码的复用性。
返回值类型
结果的数据类型。
参数列表:
你要传递几个参数,以及每个参数的数据类型。
A:单独调用,一般来说没有意义,所以不推荐B:输出调用,但是不够好,因为我们可能需要针对结果进行进一步的操作。C:赋值调用,推荐方案。
A:方法不调用不执行。B:方法与方法是平级关系,不能嵌套定义。C:方法定义的时候参数之间用逗号隔开。D:方法调用时不用在传递数据类型。E:如果方法有明确的返回值,一定要有return带回一个值。
只能单独调用。
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同。
参数个数不同参数类型不同
函数的功能一样,仅仅是参与运算的未知内容不同时,可以定义多函数,却使用统一函数名称,这样方便阅读。 在调用时,虚拟机通过参数列表的不同来区分同名函数。
三、数组
1、一维数组
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
格式1:数据类型[] 数组名int[] a;定义一个int类型的数组a变量格式2:数据类型 数组名[] int a[];定义一个int类型的a数组变量
两种格式效果是一样的,都是定义一个int数组,但是念法上有些小区别,推荐使用第一种。
java中的数组必须先初始化,然后才能使用。
动态初始化:初始化时只指定数组长度,有系统为数组分配初始值。
格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度就是数组中元素的个数。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};举例:int[] arr = new int[]{1,2,3};
简化格式:数据类型[] 数组名 = {元素1,元素2,...};
举例:int[] arr = {1,2,3};
通过数组名[索引]索引就是每个元素的编号,从0开始,最大编号就是数组的长度-1。
Java程序在运行时,需要在内存中的分配空间:为了提高运算效率,就对空间进行了不同区域的划分。
在方法定义中或者方法声明上的变量都称为局部变量。 栈内存的数据用完就释放掉。
特点:
A:每个new出来的东西都有地址值B:每个变量都有默认值。
byte,short,int,long: 0float,double: 0.0char: '\u0000'boolean: false引用类型:null
ArrayIndexOutOfBoundsException:数组索引越界异常。
原因:你访问了不存在的索引。
NullPointerException:空指针异常。
原因:数组已经不再指向堆内存了。
直接打印数组的引用变量,打印出来的结果是数组初始地址的哈希值。"[I"表示的是int类型数组,"@"后面的内容表示数组初始地址的哈希值。
二维数组就是元素为一维数组的一个数组。
格式1:
数据类型[][] 数组名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组
n表示每个一维数组的元素有多少个。
注意:
以下格式也可以表示二维数组
a:数据类型 数组名[][] = new 数据类型[m][n];
b:数据类型[] 数组名[] = new 数据类型[m][n];
格式2:
数据类型[][] 数组名 = new 数据类型[m][];
m表示一个二维数组有多少个一维数组。
列表没有给出,可以动态的给。这次是一个变化的列表。
格式3:
数据类型[][] 变量名 = new 数据类型[][]{{元素,...},{元素,...},...};
简化:
数据类型[][] 变量名 = {{元素,...},{元素,...},...};
举例:int[][] arr = {{1,2,3},{4,6},{6}};