1.流程控制:控制程序的不同执行分支。
1.顺序结构
2.分支结构
1.if……else……
单、双、多分支。(多分支如果最后是else if,那么此分支有不执行情况)
扩展:判断控制台输入(判断年龄)
2.switch (default放哪都行)
只能判断相等,不能判断范围!
如果分支没有break,会导致case穿透。
case合并:利用case穿透,做到 || 效果。
思想:switch不可以传小数,只能是int和字符串,录成绩时先强制转换为int型。
3.循环结构
1.for
计数循环。 初始值可以写在外面。
2.while
判断次数。 为假跳出。
注:for(;true;) 等价于 while(true)。
3.do…while
保证循环至少执行一次。
4.break和continue
break:结束当前循环。想在内层循环中终止外层循环,给外层循环起个名outerFor,break outerFor (找书,找到停手)
continue:跳过当前次循环,继续下次。 (点名)
5.嵌套循环:
练:九九乘法表、矩阵(先加一个空格,再起一次空白)。
2.方法 (也还行的重点)
函数(全局的;C,C++)
方法(局部的;Java)
1.目的:可重用性,方便。使程序更加简短。
2.方法声明(怎么创建):
修饰符列表 返回值类型 方法名(参数列表){方法体}
修饰符列表:
权限修饰:public protected private 不写 四选一
其他修饰:static(静态变量) synchronized 【abstract final】二选一
返回值类型:(给他东西)11种数据类型任意一种(自动转换),不需要返回值写void
参数列表:(他给东西)需要的必备条件,可以作为入参,多个用逗号隔开
形参:再方法声明的时候,定义的参数列表
实参:方法调用时,实际传入的参数
注:
3.方法分类:
1.静态方法:使用static修饰的方法
2.成员方法:没有static修饰的方法
3.构造方法:创建对象使用
4.调用:
静态方法:类名.静态方法名(参数),同类中 类名可以省略。
成员方法:对象引用.成员方法名(参数)
方法不调用不执行,调用才执行,并把结果返回到调用处。
编写方法 只考虑功能的实现,最终这个方法被用来做什么,与声明无关。
3.出参 方法名(入参){ return 出参;}
4.方法重载(overload):方法名相同, 参数列表不同(个数不同或类型不同),根据参数列表自动匹配功能。
3.内存划分:
1.程序计数器:一小块内存区域,作用是可以看作当前程序的位置指示器。
2.静态区/方法区:保存程序文件(class文件)以及静态数据,方法被调用之前,也保存在静态区,内部还有运行时常量池。
3.VM栈(栈内存):以栈数据结构为模型开辟的一段空间,特性:先进后出
栈:一种数据结构,先进后出。
栈构成:
栈空间:栈内存,内部空间。
栈帧:栈内每一个元素。
栈底元素:第一个放进去的栈帧。
栈顶元素:最后一个放进去的栈帧。
栈操作:
压栈:往栈中放栈帧。
弹栈:把元素弹出去的过程。
栈内存:是用来执行方法的,所有方法必须在栈内运行。
4.本地方法栈:用来执行一些本地方法,比如hashCode 等 , 模型和操作都和VM栈一致 , 不用管,
5.堆内存:保存对象。
程序运行机制:1.Java程序编写
2.javac编译,得到class文件。
3.Java命令运行:
1.开启JVM,把运行的程序载入内存,把class文件保存到静态区。
2.加载完后,JVM自动调用程序中的main方法。
3.在栈内开辟栈帧,执行main方法。
方法调用:压栈
方法执行完成:出栈
加载:
静态加载:程序开始运行,就把相关所有文件全部一次性载入内存。
动态加载:只载入核心文件,用到什么加载什么。(java)
4.递归:
1.概述和基本使用:
递归:方法中调用当前方法。
递归思想:
递归和迭代是等价的,就是循环。
应用场景:
循环和递归都能做的,优先使用循环,递归十分消耗内存,运行效率低。
树状结构非递归莫属。
注:必须有终止条件,否则死循环,一直压栈不弹栈。
2.斐波那契数列:n>=2时,值为(n-1)*(n-2);