Java编程那些事儿54—要领挪用
副标题#e#
7.4 要领挪用
要领声明是建设一个新的成果,声明出来的要领在需要的时候可以通过挪用执行该要领的成果,要领只有被挪用才气被执行。
在Java措施中有一个根基的main要领,其要领声明如下:
public static void main(String[] args)
该要领包括在开始的代码框架中,这是一个非凡的要领。Java语礼貌定,J2SE的代码都从该要领开始执行,假如一个代码中没有main要领,则该代码不能被直接运行。所以main要领也称作J2SE措施的进口要领,在运行措施时,自动挪用对应代码中的main要领开始措施的执行。
由于上面报告的原因,所以一个要领假如需要获得执行,则需要直接或间接在main要领中举办挪用。
在挪用要领时,措施的执行流程会进入要领的内部,当执行到要领内部的return语句或执行完要领内部的代码今后,则返回到挪用该要领的位置继承向下执行。
要领挪用的语法分为以下两种:
l一个类内部的要领挪用
指挪用以及被挪用的要领都在一个类的内部。
l差异类之间的要领挪用
指挪用以及被挪用的要领位于差异的类内部。
由于类的观念此刻还没有涉及到,所以这里指讲一个类内部的要领挪用语法,关于差异类之间的要领挪用则在后续的章节中举办先容。
7.4.1 一个类内部要领挪用语法
在前面的代码框架中,以下代码就是声明类的布局:
public class 文件名{
在该声明后续大括号内部的代码,称作一个类的内部。
在举办要领挪用时,挪用的语法名目和static修饰符有关,所以凭据一个要领在声明时是否有static修饰分为两类:
l有static修饰的称作静态要领
l没有static修饰的称作非静态要领
这样一个类内部的要领挪用就存在四种环境:
l在非静态要领内部挪用非静态要领
l在非静态要领内部挪用静态要领
l在静态要领内部挪用静态要领
l在静态要领内部挪用非静态要领
个中前三种环境的挪用都是直接挪用,直接挪用的语法名目为:
要领名(参数1值,……);
#p#副标题#e#
这里要领名为被挪用的要领名称,后续紧跟一对小括号,括号内部依次书写挪用该要领时传入参数的值,语法上要求传入参数的个数、每个参数的范例都必需和要领声明时保持一致。而这里挪用的表达式就代表要领的返回值,可以按照需要利用返回值举办赋值。
示例代码如下:
public class CallMethod{
public static void main(String[] args){
int a = 10;
int b = 2;
int c = 3;
int d = 32;
max(a,b);//只较量,较量今后返回值丢失
int n = max(5,a);//较量,并把返回值赋值给变量n
int m = max(c,d);//较量,并把返回值赋值给变量m
//较量a、b、c、d四个数字的最大值
int maxNumber = max(max(a,b),max(c,d));
}
public static int max(int a,int b){
if(a > b){
return a;
}else{
return b;
}
}
}
该示例在静态的main要领内部挪用静态的max要领,因为max要领在声明时参数列表为2个int的参数,则挪用的时候必需传入2个int值,可以是int的变量也可以是int数值。则挪用的根基名目为:
max(参数值1,参数值2)
挪用的表达式可以在代码中单独成行,当要领的返回值范例不是void时,可以吸收要领的返回值,也可以不吸收。要领的返回值是一个确定范例的值,所以在以上较量时,要领挪用之间可以举办嵌套。
int maxNumber = max(max(a,b),max(c,d));
个中max(a,b)是得到a和b的最大值,max(c,d)是得到c和d的最大值,然后较量两个得到的最大值,该代码的成果和以下代码的成果沟通:
int maxNumber = max(a,max(b,max(c,d)));
总得来说,前三种环境的挪用都是利用该种名目。
对付最后一种环境,也就是在静态要领内部挪用非静态的布局在语法上则较量巨大,以下是一个简朴的示例:
public class CallMethod2{
public static void main(String[] args){
CallMethod2 cm = new CallMethod2();
int n = cm.max(1,2);
}
public int max(int a,int b){
if(a > b){
return a;
}else{
return b;
}
}
}
在该代码涉及的语法名目在后续的代码中将举办讲授,这里只做简朴的说明。个中:
CallMethod2 cm = new CallMethod2();
该行代码声明并建设了一个CallMethod2范例的工具cm。接着的代码:
int n = cm.max(1,2);
在挪用max要领时,则利用工具名.要领名挪用对应的要领,这里参数的法则和上面先容的沟通。
7.4.2 要领挪用后的执行流程
#p#分页标题#e#
在要领挪用时,措施的执行流程和以前的布局就有所区别。简朴说,就是当碰着要领挪用时,措施的执行流程将跳转到被挪用的要领内部,直到被挪用的要领返回时,才从挪用的位置继承向下执行。
以下是一个演示挪用进程的示例代码:
public class CallMethod3{
public static void main(String[] args){
System.out.println(1);
printTest();
System.out.println(2);
max(10,20);
System.out.println(3);
}
public static int max(int a,int b){
System.out.println("进入max要领内部!");
if(a > b){
return a;
}else{
return b;
}
}
public static void printTest(){
System.out.println("进入printTest要领内部!");
int a = 10;
System.out.println("printTest要领执行完毕!");
}
}
则该代码执行时的输出如下:
1
进入printTest要领内部!
printTest要领执行完毕!
2
进入max要领内部!
3
从措施执行的输出就可以清晰的看出要领挪用时代码的执行顺序。