1.方法的命名
修饰符列表 返回值类型 方法名(参数列表){方法体}
修饰符包括访问修饰符(权限控制)与非访问修饰符,修饰符列表可以一个,多个也可以没有,权限修饰符只能写一个;修饰符没有先后顺序
权限控制:public protected default(默认) private
非访问修饰符:static final abstract synchronized等
方法:包含许多代码,一堆代码的集合,可以执行一个功能
要符合命名规范:用大小写字母,数字,下划线,$,数字不能开头,不能为关键字与保留字,最好见名知意,驼峰命名用
方法优点:代码复用,方便维护,易扩展,灵活
方法不调用便不会执行,被调用时将结果返回给调用处
2.分类
静态方法 static修饰的方法 调用:类名.方法名(参数),如果调用当前类的静态方法也可以 省略类名
成员方法 非static修饰的方法 对象.方法名(参数)
public int returnInt() {
System.out.print("成员方法");
return 2;
}
public static String returnString() {
return "静态方法";
}
构造方法 与类名相同,无返回值 new 方法名(参数)(待补充)
3.入参和出参
入参: 参数列表
出餐: 返回的数据
4.内存
静态区\方法区:存放静态资源文件,静态方法,静态成员,class文件
虚拟机栈 :执行方法,当执行方法时,会在栈中开辟一块内存空间(栈帧)压栈,方法执行完毕,弹出栈空间,栈帧销毁。
根据栈 数据结构,先进后出,创建的内存空间
栈底元素:第一个进去的栈帧 栈顶元素:最后进去的栈帧
栈帧:每个元素
压栈:元素进栈 弹栈:元素出栈
堆:存放对象,成员变量,成员方法
5.递归
直接递归:自己调用自己
间接递归:两个方法互相调用
递归与循环等价,也需要满足循环三要素,起始值,终止条件,步长
可能会造成栈溢出错误(StackOverFlowError),因为一直压栈,不弹栈。
练习:斐波那契数列---1 1 2 3 5 8 13 21 34。。。
//按照次数进行递归
public static int feiQi(int count) {
if(count==1||count==2) {
return 1;
}
return feiQi(count-1)+feiQi(count-2);
}
练习:1-100数加和
public static void main(String[] args) {
System.out.print(add(100));
}
public static int add(int number) {
if(number==1) {
return 1;
}
return number+add(number-1);
}
6.方法的重载
重载:方法名相同,参数列表不同的方法(数据类型或者个数不同)
优点:使用方便,相同功能
public static void hello(String people) {
System.out.print(people);
}
public static void hello(int number) {
System.out.print("");
}
public static void hello(float xiaoShu) {
System.out.print("");
}
public static void hello(int number,float xiaoShu) {
System.out.print("");
}
补充:程序运行时,jvm开机,将所运行的类加载到静态区,如何调用该类的main方法,执行里面的代码,如果main方法里面调用了别的类的方法,则会先将被调用方法的类加载到静态区,然后再栈内存中开辟空间(栈帧),从上到下执行代码,执行完毕的方法将会弹栈,知道main方法执行完毕,弹栈,栈帧销毁,程序执行结束。