概述:方法(函数)是一能够完成独立功能的代码块,我们只需要写一次方法就可以被多次使用,从而提高了代码的复用性。
1.方法如何被调用?
方法名(参数值1,参数值2);
例:
/*方法名写的意义明确,即可见名知意
如下面这个方法就能基本知道,这是一个
数字比较的方法,同时传入a,b两个参数
*/
NumCompare(a,b);
2.调用一个方法需要注意什么?
当调用某一个方法时,需要查看方法是否有void这样的关键字,如果含有
void,那么我们不需要添加return变量值;如果没有void关键字,在方法体的
的结尾处加上return变量值,防止报错。
//当方法是有返回值时
//当方法是有返回值时
class S1{
public static void main(String []args){
int a = 10;
int b = 19;
int Result = NumCompare(a,b);
System.out.println(Result + "大")
}
public static NumCompare(int a , int b);
int c = 0;
if(a > b){
c = a;
}else{
c = b;
}
return c;
}
//当方法是没有返回值时
//当方法是没有返回值时
class S1{
public static void main(String []args){
int a = 10;
int b = 19;
NumCompare(a,b);
}
public static void NumCompare(int a , int b);
int c = 0;
if(a > b){
System.out.println(a + "大")
}else{
System.out.println(b + "大")
}
}
PS:当方法没有返回值时,其实也可以使用return,但不是
使用return变量
class S1{
public static void main(String []args){
int a = -1;
int b = 19;
NumCompare(a,b);
}
public static void NumCompare(int a , int b);
int c = 0;
if(a < 0 || b < 0){
System.out.println(a + "大")
//通过条件比较,发现结果为false,运行到return时,程序停止执行
return;
//不在执行后续逻辑
}else{
System.out.println(b + "大")
}
}
3.方法中参数传递,形参,实参,有参,无参
有参:指的是参数不在被调用的方法内声明类型和赋值,而是在方法外部声明
赋值。在参数传递的过程中,被调用的方法的可支持的参数类型,需要在方法内
声明。例如:
int a = 10; int b =10; //定义两个参数
NumCompare(a , b); //调用NumCompare方法
public static void NumCompare(int a , int b){} //规定传来的参数的数据类型
无参:指的是参数在被条用的方法内声明并赋值,在方法被调用时不需要
写入参数,同时方法也不需要规定传来的参数的数据类型。
例如:
NumCompare(); //调用NumCompare方法
public static void NumCompare(){} //规定传来的参数的数据类型
int a = 10; int b =10; //定义两个参数
形参:指的是在方法之类的参数
public static void NumCompare(int a , int b){}
实参:指的是在调用端使用的参数
NumCompare(a , b);
参数传递过程:
当.class文件加载到数据共享区,解析到主方法和NumCompare方法。进栈开始执行程序主方法内开出两个int类型的内存空间a,b并赋值。由于在主方法内调用NumCompare,刚刚两个int类型变量置于栈底。随后将栈底的a,b两个变量传递到NumCompare(int a,int b)。
思考:如果在被调用的方法内重新定义a的值,会对结果有影响么?
不会。因为主方法中,ab两个变量所属的内存空间与NumCompare(int a , int b)中这两个形参所开辟的内存空间是有区分的。而且在被调方法中,重新定义a的值,改变的不是主方法内a的值,而是改变了被调方法中a的值,而在打印的也是主方法中a的值,所以值不变.