什么是方法?
一、方法含义
抽象来说方法就是类的动作。
具体来说方法就是数据和数据操作定义为一个整体,也可以说,方法就是组合在一起执行操作语句(代码)的集合。
在其他语言中,将方法称为过程(procedure)或函数(function)。JAVA可将方法细分为:带返回值的为函数,void定义的方法称为过程。
二、定义方法
定义方法的语法
修饰符 返回值类型 方法名(参数列表)
{
方法体
}
方法调用的方式
一、调用本类中的方法
方法一、被调用方法修饰符为static ,可以在其他方法中直接调用。
public class Method {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println( max(1,2) );
}
public static int max(int num1,int num2)
{
int result = num1 > num2 ? num1 : num2;
return result;
}
}
方法二、被调用方法未被static修饰,调用时需要通过类的实例化进行调用。
public class Method {
public static void main(String[] args) {
// TODO Auto-generated method stub
Method method = new Method();
System.out.println( method.max(1,2) );
}
public int max(int num1,int num2)
{
int result = num1 > num2 ? num1 : num2;
return result;
}
}
二、调用外部的类的方法。
方法一、被调用方法修饰符为public ,不是静态方法,可以类的实例化进行调用。
Method.java
public class Method {
public static void main(String[] args) {
// TODO Auto-generated method stub
Max method = new Max();
System.out.println( method.max(1,2) );
}
}
Max.java
public class Max {
public int max(int num1,int num2)
{
int result = num1 > num2 ? num1 : num2;
return result;
}
}
方法二、被调用方法修饰符为public static,可以className.method的格式进行调用。
Method.java
public class Method {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(Max.max(1, 2));
}
}
Max.java
public class Max {
public static int max(int num1,int num2)
{
int result = num1 > num2 ? num1 : num2;
return result;
}
}
调用方法执行过程
当调用一个方法时,系统会创建一个活动记录(也称为活动框架),用于保存方法中的参数和变量。
活动记录置于一个内存区域中,称为调用堆栈(call stack),也称为执行堆栈、运行时堆栈,或者简称为“堆栈”。
对堆栈不理解的伙计可以去看我之前发表一篇关于堆栈的博客
堆栈\栈\堆之间的区别
将演示下面代码堆栈的活动
public class Method {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 1, j = 2; //enter stack
int k = max(i, j) //call method , skip method's address
}
public static int max(int num1,int num2)
{
int result = num1 > num2 ? num1 : num2;
return result;
}
}
当一个方法调用另一个方法时,调用者的活动记录保持不动,一个新的活动记录被创建用于被调用的新方法中。一个方法结束返回到调用者时,其相应的活动记录也会被释放。
将演示下面代码堆栈的活动
public class Method {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 1, j = 2; //enter stack
System.out.print(max(i, j)); //call method , skip method's address
}
public static int max(int num1,int num2)
{
int result = getResult(num1,num2);
return result;
}
public static int getResult(int num1,int num2)
{
return num1 > num2 ? num1 : num2;
}
}