方法
- 概念:封装代码块,为了实现某种功能,可以重复调用
语法:[修饰符列表...] 返回值 方法名(形参列表...){//封装的代码块...}
[修饰符列表...]:public static void 返回值
形参:接收实参的标识符
实参:调用者调用方法传入的实际参数(数据/字面量)
注意实参要和形参一一对应,数据类型、顺序、个数都要相同
//声明方法:
public static void calc(int a,int b){}
//调用方法
calc(1,2);
- 方法的返回值
- 无返回值 void
无返回值的方法在修饰符列表后面必须写 void 无返回值的方法调用之后没有返回值,不能用变量接收
2. 有返回值
必须写返回数据类型,数据类型必须与return后面的数据类型相同
必须写return关键字,return后面的表达式结果就是return的值
有返回值的方法执行return后表达式的结果,可以用相同类型的变量接收
方法中return有两个作用,结束方法;返回表达式
- main方法具体含义
- 方法必须定义在类体中,方法定义的顺序不决定代码的执行顺序
- 方法必须调用才能执行,但main方法是通过JVM虚拟机自动调用的
- 方法中代码必须遵循自上而下的执行顺序,所以main方法中执行在遇到方法时,必须等到改方法执行完成后才能执行后面的代码
- 类中如果没有main方法,可以编译成功,在执行的时候JVM由于找不到main方法会报错,类中的main方法不能重复
- 类中可以存在多个class,每个class可以有自己的main方法,编译生成多个class文件,在运行的时候可以写需要运行的class名即可运行
- 一个java源文件中有且只有一个public,且public修饰的class必修与文件名相同
- 同一个作用域class名不能重复
- main方法的参数必须时String[],参数标识符可以修改
- eclipse工具在ctrl+s时,会自动编译源文件,并在bin目录中生成.class字节码文件
- 作用域
- 作用域:标识符的有效范围
- 有效范围大小与标识符声明的位置有关
声明在类体中,整个类可见 声明在方法体中,整个方法可见 声明在if、for ... 只能在当前{}可见
- java语言通过什么来划分作用域:{}
- 作用域查找规则:内存作用可以使用外层作用域,反之不行
- 成员变量(属性、全局变量):直接在类体中声明的变量
- 成员变量默认值:
数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | 空格('/u0000') |
float | 0.0f |
double | 0.0 |
boolean | false |
7.局部变量:声明在if、for ... 没有默认值,最好是赋值
- 栈的数据结构
- 栈的特点
- 先进后出,后进先出
- 栈顶永远具有活跃权
- 栈帧永远指向栈顶元素
- 方法执行完立即释放栈空间
- JVM 虚拟机在方法调用时候的内存图
- 方法的重复
- 不允许同一个作用域有重复的方法
- 方法重复跟修饰符、返回值没有关系
- 方法重载
概念:同一个类,同名 (方法名)相同,不同参(形参类型、顺序、个数不相同) - 递归
- 自己调用自己
- 方法一直压栈不弹栈,总有一次会出现栈内存满的情况, StackOverflow 堆栈溢出异常
- 递归解决问题,必须给程序一个出口
- 循环调用控件尽量开大,递归次数不建议太深