流程控制语句
判断结构:
if语句
三种格式:
1.
if(条件表达式)
{
执行语句;
}
2. if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
3. if(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句;
}
……
else
{
执行语句;
}
如果if控制语句只有一条可不用{ },反过来,如果if控制语句没有使用{},可是if后边有好几条语句,if只控制距离if最近的那条语句。
选择语句(switch语句)
格式:
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
…
default:
执行语句;
break;
}
switch语句特点:
1,switch语句选择的类型只有四种:byte,short,int , char。
2,case之间与default没有顺序。先执行第一个case,没有匹配的case执
行default。
3,结束switch语句的两种情况:遇到break,执行到switch语句结束。
4,如果匹配的case或者default没有对应的break,那么程序会继续向下
执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
if语句和switch语句的比较:
什么场景下用那些语句?
如果判断的具体的数值不多,而且符合byte,short,Int,char这四个类型建议使用switch语句。因为效率高。
其他情况:对于区间判断,对结果为boolean类型判断,使用费if,范围广.
循环语句
代表语句:while ,do while ,for
while语句格式 :
while(条件表达式)
{
执行语句;
}
do while语句格式:
do
{
执行语句;
}while(条件表达式);
do while特点是条件无论是否满足,循环体至少被执行一次。
for语句
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,
重复找个过程,直到条件不满足为止。
循环语句特点:
1.for语句中,条件表达式,要么为真,要么为假,既不是真,也不是假,编译不能通过。
2.for语句中,初始化表达式和循,环后的操作表达式,只要是合法表达式就行,不一定是某种格式,也可以不写。
3.有多种表达式时,可以直接写在for语句的后边括号中,用“,”隔开。
最简单的两个无限循环格式:
while(true)
{}
for(;;)
{}
累加思想原则:通过变量记录住每次变化的结果,通过循环的形式,进行累加动作。
计算器思想:通过一个变量记录住数据的状态变化,也许通过循环完成。
class demo4
{
public static void main(String[] args)
{
int sum = 0;
for(int x = 1; x<=10;x++)
{
sum += x;
}
System.out.println("for sum ="+sum);
}
}
for语句嵌套
对于打印长方形,外循环控制行数,内循环控制的是每一行的个数。
发现图形有许多行,每一行有许多列,要使用嵌套循环,原理:大圈套小圈
打印的图形如果是尖朝下,且外循环的变量是++,则让内循环的初始化表达式值跟着外循环的变量变化。
印的图形如果是尖朝上,且外循环的变量是++,则让内循环的条件表达式值跟着外循环的变量变化。
图行朝上,可以改变内循环的条件表达式,让条件随着外循环的变量变化
图行朝下,可以改变内循环的初始化表达式,让初始化随着外循环的变量变化
在打印结果的时候,用“”括起来的是不变的内容。
其他的流程控制语句
break( 跳出) , continue( 继续)
break语句:应用范围:选择结构和循环结构。
continue语句:应用于循环结构。
注:
1,这两个语句离开应用范围,存在是没有意义的。
2,这个两个语句单独存在下面都不可以有语句,因为执行不到。
3,continue语句是结束本次循环继续下次循环。
4,标号的出现,可以让这两个语句作用于指定的范围。
函数
什么是函数?
1. 函数就是定义在类中的具有特定功能的一段独立小程序。
2. 函数也称为方法。函数就是方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,)
{
执行语句;
return 返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。
Java中对功能的定义是通过函数的形式来体现的。
函数的特点:
1.定义函数可以将功能代码进行封装
2.便于对该功能进行复用
3.函数只有被调用才会被执行
4.函数的出现提高了代码的复用性
5.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
1.函数中只能调用函数,不可以在函数内部定义函数。
2.定义函数时,函数的结果应该返回给调用者,交由调用者处理
3.当返回值类型是void,是不能在主函数中直接打印出来的,只能调用。
如果定义的函数功能是直接打印出来的,比如九九乘法变,矩形等,则在主函数中直接调用就可以。
如果定义的函数是一个具体的值,比如,3,5等,则在主函数中定义一个变量,然后在打印。
例如:
int x = getResult(4);
System.out.println("x="+x);
函数的重载
重载的概念:
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表。
重载的好处:
方便于阅读,优化了程序设计。
两个函数名一致,参数列表相同,但是参数类型不同的函数,不可以同时存在一个类中,因为无法判断调用该函数时哪个运行。
例子:
void show(int a,char b,double c)
void show(int x,char y,double z)
数组
概念:
同一种类型数据的集合。其实数组就是一个容器。
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1:
元素类型[] 数组名= new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名= new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
内存结构
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式
栈内存:
? 用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
1.数组和对象,通过new建立的实例都存放在堆内存中。
2.每一个实体都有内存地址值
3.实体中的变量都有默认初始化值
4.实体不在被使用,会在不确定的时间内被垃圾回收器回收
方法区,本地方法区,寄存器
数组操作常见问题
1.数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。
2.空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时
数组常见操作
1.获取最值(最大值,最小值)
public class getMax
{
public static void main(String[] args)
{
int[] arr={45,2,100,34,67};
int max = getMax(arr);
System.out.println("max="+max);
}
public static int getMax(int[] arr)
{
int max = arr[0];
for (int x = 1;x<arr.length ;x++ )
{
if (arr[x]>max)
{
max = arr[x];
}
}
return max;
}
}
选择排序:
选择固定一个位置,那这个位置上的值和其他元素进行比较,换了位置后还拿这个位置上的值和其他元素进行比较
选择排序:内循环循环一次,最值出现在头角标的位置。
选择排序会用到循环语句进行挨个比较,在循环语句中添加判断语句,如果满足条件则定义一个第三方变量来进行交换位置。
冒泡排序:
冒泡排序:相邻的两个元素进行比较,如果符合条件就换位。
折半查找(二分查找)
class halfSearch
{
public static void main(String[] args)
{
int [] arr = {1,2,3,4,5,6,7,8,9};
int Index = getIndex(arr ,5);
System.out.println("index="+Index);
Hello();
}
public static int getIndex(int [] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while(min<=max)
{
mid = (min+max)/2;
if(key>arr[mid])
min = min+1;
else if (key<arr[mid])
{
max = mid-1;
}
else
return mid;
}
return -1;
}
}
判断结构:
if语句
三种格式:
1.
if(条件表达式)
{
执行语句;
}
2. if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
3. if(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句;
}
……
else
{
执行语句;
}
如果if控制语句只有一条可不用{ },反过来,如果if控制语句没有使用{},可是if后边有好几条语句,if只控制距离if最近的那条语句。
选择语句(switch语句)
格式:
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
…
default:
执行语句;
break;
}
switch语句特点:
1,switch语句选择的类型只有四种:byte,short,int , char。
2,case之间与default没有顺序。先执行第一个case,没有匹配的case执
行default。
3,结束switch语句的两种情况:遇到break,执行到switch语句结束。
4,如果匹配的case或者default没有对应的break,那么程序会继续向下
执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
if语句和switch语句的比较:
什么场景下用那些语句?
如果判断的具体的数值不多,而且符合byte,short,Int,char这四个类型建议使用switch语句。因为效率高。
其他情况:对于区间判断,对结果为boolean类型判断,使用费if,范围广.
循环语句
代表语句:while ,do while ,for
while语句格式 :
while(条件表达式)
{
执行语句;
}
do while语句格式:
do
{
执行语句;
}while(条件表达式);
do while特点是条件无论是否满足,循环体至少被执行一次。
for语句
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,
重复找个过程,直到条件不满足为止。
循环语句特点:
1.for语句中,条件表达式,要么为真,要么为假,既不是真,也不是假,编译不能通过。
2.for语句中,初始化表达式和循,环后的操作表达式,只要是合法表达式就行,不一定是某种格式,也可以不写。
3.有多种表达式时,可以直接写在for语句的后边括号中,用“,”隔开。
最简单的两个无限循环格式:
while(true)
{}
for(;;)
{}
累加思想原则:通过变量记录住每次变化的结果,通过循环的形式,进行累加动作。
计算器思想:通过一个变量记录住数据的状态变化,也许通过循环完成。
class demo4
{
public static void main(String[] args)
{
int sum = 0;
for(int x = 1; x<=10;x++)
{
sum += x;
}
System.out.println("for sum ="+sum);
}
}
for语句嵌套
对于打印长方形,外循环控制行数,内循环控制的是每一行的个数。
发现图形有许多行,每一行有许多列,要使用嵌套循环,原理:大圈套小圈
打印的图形如果是尖朝下,且外循环的变量是++,则让内循环的初始化表达式值跟着外循环的变量变化。
印的图形如果是尖朝上,且外循环的变量是++,则让内循环的条件表达式值跟着外循环的变量变化。
图行朝上,可以改变内循环的条件表达式,让条件随着外循环的变量变化
图行朝下,可以改变内循环的初始化表达式,让初始化随着外循环的变量变化
在打印结果的时候,用“”括起来的是不变的内容。
其他的流程控制语句
break( 跳出) , continue( 继续)
break语句:应用范围:选择结构和循环结构。
continue语句:应用于循环结构。
注:
1,这两个语句离开应用范围,存在是没有意义的。
2,这个两个语句单独存在下面都不可以有语句,因为执行不到。
3,continue语句是结束本次循环继续下次循环。
4,标号的出现,可以让这两个语句作用于指定的范围。
函数
什么是函数?
1. 函数就是定义在类中的具有特定功能的一段独立小程序。
2. 函数也称为方法。函数就是方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,)
{
执行语句;
return 返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。
Java中对功能的定义是通过函数的形式来体现的。
函数的特点:
1.定义函数可以将功能代码进行封装
2.便于对该功能进行复用
3.函数只有被调用才会被执行
4.函数的出现提高了代码的复用性
5.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
1.函数中只能调用函数,不可以在函数内部定义函数。
2.定义函数时,函数的结果应该返回给调用者,交由调用者处理
3.当返回值类型是void,是不能在主函数中直接打印出来的,只能调用。
如果定义的函数功能是直接打印出来的,比如九九乘法变,矩形等,则在主函数中直接调用就可以。
如果定义的函数是一个具体的值,比如,3,5等,则在主函数中定义一个变量,然后在打印。
例如:
int x = getResult(4);
System.out.println("x="+x);
函数的重载
重载的概念:
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表。
重载的好处:
方便于阅读,优化了程序设计。
两个函数名一致,参数列表相同,但是参数类型不同的函数,不可以同时存在一个类中,因为无法判断调用该函数时哪个运行。
例子:
void show(int a,char b,double c)
void show(int x,char y,double z)
数组
概念:
同一种类型数据的集合。其实数组就是一个容器。
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1:
元素类型[] 数组名= new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名= new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
内存结构
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式
栈内存:
? 用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
1.数组和对象,通过new建立的实例都存放在堆内存中。
2.每一个实体都有内存地址值
3.实体中的变量都有默认初始化值
4.实体不在被使用,会在不确定的时间内被垃圾回收器回收
方法区,本地方法区,寄存器
数组操作常见问题
1.数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。
2.空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时
数组常见操作
1.获取最值(最大值,最小值)
public class getMax
{
public static void main(String[] args)
{
int[] arr={45,2,100,34,67};
int max = getMax(arr);
System.out.println("max="+max);
}
public static int getMax(int[] arr)
{
int max = arr[0];
for (int x = 1;x<arr.length ;x++ )
{
if (arr[x]>max)
{
max = arr[x];
}
}
return max;
}
}
选择排序:
选择固定一个位置,那这个位置上的值和其他元素进行比较,换了位置后还拿这个位置上的值和其他元素进行比较
选择排序:内循环循环一次,最值出现在头角标的位置。
选择排序会用到循环语句进行挨个比较,在循环语句中添加判断语句,如果满足条件则定义一个第三方变量来进行交换位置。
冒泡排序:
冒泡排序:相邻的两个元素进行比较,如果符合条件就换位。
折半查找(二分查找)
class halfSearch
{
public static void main(String[] args)
{
int [] arr = {1,2,3,4,5,6,7,8,9};
int Index = getIndex(arr ,5);
System.out.println("index="+Index);
Hello();
}
public static int getIndex(int [] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while(min<=max)
{
mid = (min+max)/2;
if(key>arr[mid])
min = min+1;
else if (key<arr[mid])
{
max = mid-1;
}
else
return mid;
}
return -1;
}
}