一、程序流程控制
判断结构
if语句
1.如果if语句中只有一条语句,那么可以不写大括号。不过初学者一定要写括号,以免出错。
2.如果if语句没写大括号,if就只能控制离它最近的单条语句。
3.三元运算符就是ifelse语句的简写格式。例如:b=a>1?100:200;就可以实现和上面同样的功能。
4.if(表达式)后面切忌加上分号,否则表示无论表达式为true或者false,都不执行任何语句。
if语句特点:
1.每一种格式都是单条语句。
2.第二种格式与三元运算符的区别:三元运算符运算完一定要有值出现。好处是:可以写在其他表达式中。
3.条件表达式无论写成什么样子,只看最终的结构是否是true或者false。
class IfDemo
{
public static void sop(Object obj)
{
System.out.println(obj);//打印
}
public static void main(String[] args)
{
int week = 4;//week为4,
if(week == 1)
sop(week+"对应中文是星期一");
else if(week == 2)
sop(week+"对应中文是星期二");
else if(week == 3)
sop(week+"对应中文是星期三");
else if(week == 4)
sop(week+"对应中文是星期四");
else if(week == 5)
sop(week+"对应中文是星期五");
else if(week == 6)
sop(week+"对应中文是星期六");
else if(week == 7)
sop(week+"对应中文是星期日");
else
sop(week+"没有对应中文星期");
}
}
选择结构
switch语句
特点:
1.switch语句选择的类型只有四种:byte,short,int,char。
2.case与default没有顺序。先执行第一个case,没有匹配的case执行default。
3.结束switch语句的两种情况:①遇到break,②执行到switch语句结束。
4.如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
5.进入switch语句后,执行顺序是先执行case,然后从上到下,最后再执行default。即使default放在case上面,执行顺序也不变。
1.switch语句选择的类型只有四种:byte,short,int,char。
2.case与default没有顺序。先执行第一个case,没有匹配的case执行default。
3.结束switch语句的两种情况:①遇到break,②执行到switch语句结束。
4.如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
5.进入switch语句后,执行顺序是先执行case,然后从上到下,最后再执行default。即使default放在case上面,执行顺序也不变。
示例:多个case同一种处理方式的情况。
class SwitchDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
/*
一年四季
春季: 3 4 5
夏季:6 7 8
秋季:9 10 11
冬季:12 1 2
*/
int month = 9;//定义month的值
switch(month)
{
case 3:
case 4:
case 5:
sop(month+"月是春季");
break;
case 6:
case 7:
case 8:
sop(month+"月是夏季");
break;
case 9:
case 10:
case 11:
sop(month+"月是秋季");
break;
case 12:
case 1:
case 2:
sop(month+"月是冬季");
break;
default:
sop(month+"没有对应季节");
break;
}
}
}
if和switch语句的应用:
if:
1.对具体的值进行判断。
2.对区间判断。
3.对运算结果是boolean类型的表达式进行判断。
switch:
1.对具体的值进行判断。
2.值的个数通常是固定的。
对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高。
if:
1.对具体的值进行判断。
2.对区间判断。
3.对运算结果是boolean类型的表达式进行判断。
switch:
1.对具体的值进行判断。
2.值的个数通常是固定的。
对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高。
循环结构
关键词:while,do while,for。
while和do while的区别:
do while语句的特点:无论条件是否满足,循环体至少执行一次。
while如果条件不满足,循环体一次都不会执行。
do while语句的特点:无论条件是否满足,循环体至少执行一次。
while如果条件不满足,循环体一次都不会执行。
练习1:获取1到10,10个数字的和。
class WhileDemo
{
public static void sop(Object obj)
{
System.out.println(obj);//打印
}
public static void main(String[] args)
{
int x = 1,sum=0;//定义int型 x,sum的初始值
while(x<=10)//只要x小于等于10
{
sum = sum+x;//sum+x
x++;//x自加1
}
sop("sum="+sum);//打印sum
}
}
练习2:1~100之间,6的倍数出现的次数。
class WhileDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);//打印
}
public static void main(String[] args)
{
int x= 1,count= 0;//定义int型 x,count的初始值
while(x<=100)//只要x<=100
{
if(x%6==0)//如果x能整除6
count++;//count加1
x++;//x自加
}
sop("count="+count);//打印count
}
}
for 循环
1.for里面的三个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。
2.for循环的初始化表达式、循环后的操作表达式可以是多个表达式,通过逗号分隔。
3.while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就在内存中释放,而while循环使用的变量在循环结束后还可以继续使用。
4.最简单无限循环格式:while(true),for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
5.在使用循环时候,一定要明确哪些语句需要参与循环,哪些不需要。循环通常情况下,需要定义条件,需要控制次数。
5.在使用循环时候,一定要明确哪些语句需要参与循环,哪些不需要。循环通常情况下,需要定义条件,需要控制次数。
For循环嵌套
练习1:打印出下格式的内容:
*****
****
***
**
*
****
***
**
*
class ForForDemo
{
public static void main(String[] args)
{
for(int x = 5;x > 0;x--)
{
for(int y = x; y > 0;y--)
{
System.out.print("*");
}
System.out.println();
}
}
}
练习2:打印九九乘法表成如下形式:
1*1=1
1*2=22*2=4
1*3=32*3=63*3=9
1*2=22*2=4
1*3=32*3=63*3=9
class ForForDemo5
{
public static void main(String[] args)
{
for(int x=1; x<=9;x++)
{
for(int y=1;y<=x;y++)
{
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
}
1.代码中的"\t"是一个转义字符,也就是制表符。还有其他的一些转义字符:\n:回车,\b:退格,\r:回车符。
2.windows系统中回车符其实是由两个转义字符组成的:\r\n,linux中回车符是\n。
2.windows系统中回车符其实是由两个转义字符组成的:\r\n,linux中回车符是\n。
练习3:打印出下格式的内容:
* * * * *
* * * *
* * *
* *
*
* * * * *
* * * *
* * *
* *
*
class ForForDemo6
{
public static void main(String[] args)
{
for(int x =1;x<=5;x++)
{
for(int y=5;y>=x;y--)
{
System.out.print("* ");
}
System.out.println();
for(int z=0;z<x;z++)
{
System.out.print(' ');
}
}
}
}
二、 函数
函数的定义
函数就是定义在类中的具有特定功能的一段独立小程序,函数也称为方法。
函数的格式:
修饰符返回值类型函数名(参数类型形式参数1,参数类型形式参数2,...)
{
执行语句;
return返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该函数运算后的结果,该结果会返回给调用者。
修饰符返回值类型函数名(参数类型形式参数1,参数类型形式参数2,...)
{
执行语句;
return返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该函数运算后的结果,该结果会返回给调用者。
函数的特点
1.定义函数可以将功能代码进行封装。
2.便于对该功能进行复用。
3.函数只有被调用才会被执行。
4.函数的出现提高了代码的复用性。
1.定义函数可以将功能代码进行封装。
2.便于对该功能进行复用。
3.函数只有被调用才会被执行。
4.函数的出现提高了代码的复用性。
PS.
1.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写,或者写上return;。
2.函数中只能调用函数,不可以在函数内部定义函数。否则,编译时期就会报错。
3.定义函数时,函数的结果应该返回给调用者,交由调用者处理。
函数的应用
两个明确:
明确要定义的功能最后的结果是什么?
明确在定义该功能的过程中,是否需要未知内容参与运算。
明确要定义的功能最后的结果是什么?
明确在定义该功能的过程中,是否需要未知内容参与运算。
函数的重载
重载的概念:
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
重载的好处:
方便于阅读,优化了程序设计。
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
重载的好处:
方便于阅读,优化了程序设计。
1.重载与返回值类型无关,只看参数列表。
2.java是严谨性语言,如果函数调用出现不确定性,会编译失败。
2.java是严谨性语言,如果函数调用出现不确定性,会编译失败。
练习:打印乘法表。
class FunctionDemo
{
public static void main(String[] args)
{
printCFB(9);//调用printCFB方法
}
public static void printCFB(int num)
{
for(int x = 1;x<=num;x++)
{
for(int y =1;y<=x;y++)
{
System.out.print(y+"*"+x+"="+x*y+"\t");//打印出乘法表
}
System.out.println();
}
}
}
三、数组
数组的定义
概念:
同一种类型数据的集合。其实,数组就是一个容器。
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素。
概念:
同一种类型数据的集合。其实,数组就是一个容器。
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1:
元素类型[ 数组名=new 元素类型[元素个数或数组长度];
元素类型[ 数组名=new 元素类型[元素个数或数组长度];
格式2:需要一个容器,存储已知的具体数据。
元素类型[ ]数组名=new 元素类型[]{元素,元素,……};
元素类型[ ]数组名=new 元素类型[]{元素,元素,……};
数组的内存分配及特点
int[ ] arr = new int[4];
内存的划分:
1.寄存器。
2.本地方法区。
3.方法区。
4.栈内存。
5.堆内存。
栈内存:
用于存储局部变量,当变量所属的作用域一旦结束,所占空间会自动释放。
堆内存:
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值。
实体中的变量都有默认初始化值,根据类型的不同而不同。整数类型是0,小数类型是0.0或0.0f,boolean类型是false,char类型是'\u0000'。
如果将数组的引用实体设置为null,也就是实体不再被使用,那么会在不确定的时间内被垃圾回收器回收。
1.寄存器。
2.本地方法区。
3.方法区。
4.栈内存。
5.堆内存。
栈内存:
用于存储局部变量,当变量所属的作用域一旦结束,所占空间会自动释放。
堆内存:
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值。
实体中的变量都有默认初始化值,根据类型的不同而不同。整数类型是0,小数类型是0.0或0.0f,boolean类型是false,char类型是'\u0000'。
如果将数组的引用实体设置为null,也就是实体不再被使用,那么会在不确定的时间内被垃圾回收器回收。