1.总结
循环结构(for, while):
初始化语句
判断条件语句
循环体语句
控制条件语句
for 循环的结构
for(初始化语句; 判断条件语句; 控制条件语句) {
循环体语句;
}
执行流程
A:执行初始化语句
B:执行判断条件语句,看其结果是 true 还是 false
如果是 false,循环结束。
如果是 true,继续执行。
C:执行循环体语句
D:执行控制条件语句
E:回到 B 继续
注意事项:
初始化语句只执行了一次
while 循环
基本格式
while(判断条件语句) {
循环体语句;
}
扩展格式
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
for 循环和 while 循环的区别:
- 控制条件语句所控制的那个变量,在 for 循环结束后,就不能再被访问到了,而 while
循环结束还可以继续使用 - 使用区别:
for 适合循环次数明确
while 适合循环次数不明确
do…while
基本格式
do {
循环体语句;
} while (判断条件语句);
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
} while (判断条件语句);
注意事项:
do…while 循环至少会执行一次循环体。
for 循环和 while 循环只有在条件成立的时候才会去执行循环体
跳转控制语句:
break: 中断
continue: 继续
return:返回
break: :
break 的使用场景 - switch
- 循环
- 离开使用场景的存在是没有意义的
作用:
跳出单层循环(如果有多层循环,只跳出内层)
标签:(label)
格式:
标签名:
Continue:
使用场景:
只能在循环中使用
离开使用场景没意义
作用:
终止这次循环,开始下次循环
return:
作用:结束一个方法,并返回一个值
方法:
概述:完成特定功能的代码块
格式:
修饰符 返回值类型 方法名(参数类型 参数名 1, 参数类型 参数名 2…) {
函数体;
return 返回值;
}
方法格式解释
修饰符 比较多,后面会详细介绍。目前 public static
返回值类型 用于限定返回值的数据类型
方法名 一个名称,为了方便我们调用方法
参数类型 限定调用方法时传入参数的数据类型
参数名 是一个变量,接收调用方法时传入的参数
方法体 完成功能的代码
return 结束方法以及返回方法指定类型的值
如何返回值类型是 void,可以没有 return 语句,或者这样写 return ;
返回值 程序被 return 带回的结果,返回给调用者
定义一个方法,必须明确两个部分
返回值类型
参数列表
有明确返回值方法的调用方式: - 直接调用
- 输出调用
- 赋值调用
注意事项:
方法不调用不执行
方法与方法是平级关系,不能嵌套定义
方法定义的时候参数之间用逗号隔开
方法调用的时候不用在传递数据类型
如果方法有明确的返回值,一定要有 return 带回一个值
没有明确返回值的函数调用:
其实就是 void 类型方法的调用
只能单独调用
方法重载: - 同一个类中
- 方法名字相同
- 参数列表不同(参数个数\参数类型不同\参数顺序不同)
方法重载特点
与返回值类型无关,只看方法名和参数列表
在调用时,虚拟机通过参数列表的不同来区分同名方法
为什么与返回值类型无关?
直接调用不关心返回值类型。
注意事项:
如果没有数据类型一样的方法,编译器就会找最接近它的同名方法
对于数据类型兼容,并且逻辑一样的方法,就没有必要使用方法重载。
数组
概述:存储同一种数据类型多个元素的容器。
格式:
格式 1 (推荐使用)
数据类型[] 数组名;
格式 2
数据类型 数组名[];
数组初始化概述:
Java 中的数组必须先初始化, 然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋初值。
数组的初始化方式
动态初始化:初始化时程序猿只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
动态初始化
格式:数据类型[] arr = new 数据类型[数组的长度];
如何引用数组的元素
索引(从 0 开始编号)
Java 内存空间分布
栈 局部变量
堆 new 出来的东西(对象)
本地方法栈
方法区
程序计数器
什么是局部变量?
在方法声明上或者方法体内定义的变量。
局部变量没有默认值, 不赋值不能使用。但是堆上面的内容都有默认值
byte 0
short 0
int 0
long 0L
float0.0f
double 0.0
char ‘\u0000’
boolean false
引用数据类型 null 0x00000000
2: 小芳的妈妈每天给她 2.5 元钱,她都会存起来,但是,每当这一天是存钱的第 5 天或者 5
的倍数的话,她都会花去 6 元钱,请问,经过多少天,小芳才可以存到 100 元钱。
public class money {
public static void main(String[] args) {
double i=0;//钱数
int count=0;//天数
while(i<=100) {
i+=2.5;
count++;
if (count%5==0) {
i-=6;
}
}
System.out.println(“经过”+count+“天,可存到”+i+“元”);
}
}
经过 74 天,可存到 101.0 元
3:函数的概念?函数的格式?格式的解释说明
简单的说:方法就是完成特定功能的代码块(多行代码的集合 {语句体})
在很多语言里面都有函数的定义
函数在 Java 中被称为方法
格式:
修饰符 返回值类型 方法名(参数类型 参数名 1,参数类型 参数名 2…) {
函数体;
return 返回值;
}
方法格式解释
修饰符 比较多,后面会详细介绍。目前 public static
返回值类型 用于限定返回值的数据类型
方法名 一个名称,为了方便我们调用方法
参数类型 限定调用方法时传入参数的数据类型
参数名 是一个变量,接收调用方法时传入的参数
方法体 完成功能的代码
return 结束方法以及返回方法指定类型的值
返回值 程序被 return 带回的结果,返回给调用者
4:函数的调用
A:明确返回值类型的函数调用
B:void 类型的函数调用
有明确返回值的方法调用:
单独调用,没有意义
输出调用,有意义,但是不够好,因为我不一定非要把结果输出
赋值调用,推荐方式
没有明确返回值的函数调用:
其实就是 void 类型方法的调用
只能单独调用
5:函数的练习:
A: 获取 4 个值中的最大值
B: 花式打印九九乘法表(按四种不同方式打印)
import java.util.Scanner;
public class MaxNumber {
public static void main(String[] args) {
System.out.println(“请输入 4 个整数”);
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
int d=sc.nextInt();
max(a, b, c, d);
}
public static void max(int a,int b,int c,int d) {
int max=a;
if (b>max) {
max=b;
}
if (c>max) {
max=c;
}
if (d>max) {
max=d;
}
if (b>a) {
max=b;
}
System.out.println(“最大值为”+max);
}
}
public class ChengFaBiao {
public static void main(String[] args) {
for (int i = 1; i <=9; i++) {
for (int j = 1; j <=i; j++) {
System.out.print(i+""+j+"="+(ij)+"\t");
}
System.out.println();
}
}
}
2.
public class ChengFaBiao {
public static void main(String[] args) {
for (int i = 1; i <=9; i++) {
for(int j = 1; j<= 9 - i; j++) {
System.out.print(" \t");
}
for (int j = 1; j <=i; j++) {
System.out.print(i+""+j+"="+(ij)+"\t");
}
System.out.println();
}
}
}
3.
public class ChengFaBiao {
public static void main(String[] args) {
for (int i = 1; i <=9; i++) {
for (int j = 1; j <=10-i; j++) {
System.out.print(i+""+j+"="+(ij)+"\t");
}
System.out.println();
}
}
4.
public class Chengfabiao {
public static void main(String[] args) {
for (int i = 1; i <=9; i++) {
for(int j = 1; j<i; j++) {
System.out.print(" \t");
}
for (int j = 1; j <=9; j++) {
if (j>=i) {
System.out.print(i+""+j+"="+(ij)+"\t");
}
}
System.out.println();
}
}
}
6:什么是函数重载?
System.out.println( )该函数有很多重载的类型,支持将一个不同类型的参数打印出来。
如:
void println(boolean x)
打印 boolean 值,然后终止行。
void println(char x)
打印字符,然后终止该行。
void println(char[] x)
打印字符数组,然后终止该行。
void println(double x)
打印 double,然后终止该行。
void println(float x)
打印 float,然后终止该行。
void println(int x)
打印整数,然后终止该行。
void println(long x)
打印 long,然后终止该行。
void println(String x)
打印 String,然后终止该行。
但是只能打印一个参数。
能不能想办法写一组类似的输出函数,支持传入两个参数打印出来?如:
void println(boolean x,boolean y) 打印两个 boolean 类型的值
void println(char x, char y) 打印两个 cha 类型的值
方法重载概述
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数\参数类型不同\参数顺
序不同)。
public class ChongZai {
public static void main(String[] args) {
print(true,false);
}
public static void print(int a,int b) {
System.out.println(a+" “+b);
}
public static void print(short a,short b) {
System.out.println(a+” “+b);
}
public static void print(long a,long b) {
System.out.println(a+” “+b);
}
public static void print(char a,char b) {
System.out.println(a+” “+b);
}
public static void print(Boolean a,Boolean b) {
System.out.println(a+” “+b);
}
public static void print(char[] a,char[] b) {
System.out.println(a+” “+b);
}
public static void print(double a,double b) {
System.out.println(a+” “+b);
}
public static void print(float a,float b) {
System.out.println(a+” "+b);
}
}