------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流-------
一、程序流程控制
1、判断语句(if)
1、 if(条件表达式)
{
执行语句;
}
2、if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
3、if(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句
}
……
else
{
执行语句;
}
执行流程:
a、首先判断条件表达式的结果是true还是false,为true时则执行if语句中的代码;
b、如果是false就执行else语句中的代码;
c、如果没有else语句则执行下一条if语句的条件表达式。
if语句特点
1、每一种格式都是单条语句。
2、第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以简化if else代码。
3、条件表达式无论写成什么样子,最终的结果不是true就是 false。
代码示例:
2、选择语句——switch
switch语句格式如下
switch(表达式)
{
case 常量表达式1:语句1;braek;
case 常量表达式2:语句2;braek;
......
case 常量表达式n:语句n;braek;
default: 语句n+1
}
switch语句特点
a,switch语句选择的类型只有四种:byte,short,int, char。
b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
c,结束switch语句的两种情况:1、遇到break结束;2、执行到switch结尾结束。
d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
注:JDK1.5以后可以接收枚举类型,JDK1.7以后可以接收字符串。
if和switch语句很像。具体什么场景下,应用哪个语句呢?如果判断的具体数值不多,而且符合byte short int char这四种类型。虽然两个语句都可以使用,建议使用switch语句,因为效率稍高。其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
在switch语句中,String的比较用的是String.equals。需要注意的是,传给switch的String变量不能为null,同时switch的case子句中使用的字符串也不能为null。
具体原因大家可以看一下switch的实现过程就懂了。
如果switch传入的null,那么在运行时对一个null对象调用hashCode方法会出现NullPointerException。
如果switch的case写的是null,那么在编译时无法求出hashCode,因此在编译时就会报错了。
3、 循环结构——while,do while,for
3.1、while语句格式
while(条件表达式)
{
执行语句;
}
3.2、do while语句格式
do
{
执行语句;
}
while(条件表达式);
while和do while的区别:
while:先判断条件,只有条件满足才执行循环体。
do while:先执行循环体,再判断条件,条件满足,再继续执行循环体。
即:do while:无论条件是否满足,循环体至少执行一次。
3.3、 for语句格式
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
循环语句;
}
说明:
1、for语句中,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复这个过程,直到条件不满足为止。
2、while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。
3、最简单无限循环格式:while(true){}, for(;;){},对于for来讲,不写条件表达式默认就是ture。无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
什么时候使用循环结构?
当要对某些语句执行很多次时,就使用循环结构。
循环注意:一定要明确哪些语句需要参与循环,哪些不需要。
代码示例:
运行结果:
4、其他流程控制语句——break,continue
break:作用于switch ,和循环语句,用于跳出,或者称为结束。
break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。
continue:只作用于循环结构,继续循环用的。
作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。
二、函数
定义:定义在类中的具有特定功能的一段独立小程序。也称方法。
格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
{
执行语句;
return返回值;
}
当函数没有具体的返回值时,返回的返回值类型用void关键字表示。
如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。
return的作用:结束函数。结束功能。
如何定义一个函数?
函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:
1、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。
2、在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。
函数的作用:
1、用于定义功能。
2、用于封装代码提高代码的复用性。
注意:函数中只能调用函数,不能定义函数。
主函数:
1、保证该类的独立运行。
2、因为它是程序的入口。
3、因为它在被jvm调用。
函数的重要特性——重载(override)
定义:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。(overload)
如何区分重载:如果函数名相同时,只看参数列表。和返回值类型没关系。
代码示例:
运行结果:
三、数组
1、一维数组
概念:是同一类型数据的集合,其实数组就是一个容器。数据既可以存储基本数据类型,也可以存储引用数据类型。
数组的好处:可以自动给数组中的元素进行编号,方便操作这些元素。
格式:
元素类型 []数组名 = new元素类型 [元素的个数或者数组长度]。
元素类型 [] 数组名= new 元素类型 []{元素、元素、……}。
数组的初始化
java中的数组必须进行初始化才能使用。所谓初始化,就是为数组中的元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式:
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个元素的初始值,由系统决定数组长度。
java中的内存分为:寄存器,本地方法区和方法区
a、栈内存:存储的都是局部变量,而且变量所属的作用域一旦结束,该内存自动释放。
b、堆内存:存储的都是数组和对象(其实数组就是对象),凡是new建立的都存储在这里。
堆内存的特点:
1、每一个实体都有着地指值。
2、堆内存中的每一个变量都有着默认初始化值,根据类型的不同而不同。
3、垃圾回收机制。
java中的数组操作
对数组操作最基本的动作就是存和取,核心思想就是对角标的操作。
1、排序: 常见的排序方式:冒泡排序和选择排序。Java已经定义好了一种排序方式,直接调用即可。排序的方式有很多,其中最快的排序方式为希尔排序。
代码示例:
2、进制转换
代码示例:
2、二维数组
定义:二维数组其实就是一个元素为一维数组的数组。格式1:int [] [] arr = new int arr [3] [2]。创建一个二维数组,该数组中有3个一维数组,每一个一维数组中有两个元素。
格式2:int [] [] arr = new int [3] [] 。二维数据中有3个一维数组,每一个一维数组都是默认初始化值null。可以对这三个一维数组分别进行初始化。
格式3:int [] [] arr = {{1,2,3},{4,5},{6}}。
代码示例:
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流-------