Java初识方法

5.初识方法

方法就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用。

5.1 方法的定义

5.1.1方法的定义格式

[方法修饰列表] 返回值类型 方法名(方法参数列表){

方法体

}

①方法修饰列表

是可选项,方法的修饰符可以包括:public,protected,private,abstract,static, final,synchronized,其中public,protected,private 不能同时存在。

②返回值类型

如果没有返回值使用void 关键字,如果存在返回值可以是基本类型和引用类型;如果存在返回值,必须使用 return语句,return语句后面不能再执行语句,因为不可能会执行到,编译会发生错误。

③方法名:任意合法的标识符。

④方法参数列表

参数列表可以有多个,也可以没有参数。如:method1(int a,int b),多个采用逗号分割。

5.1.2普通方法示例

public class MethodTest02{

       public static void main(String[] args){ //入口

              //在main方法中对sumInt方法进行调用,完成功能.

              //注意:加有static的方法,调用的时候必须采用“类名.”的方式调用。

              MethodTest02.sumInt(10,20);

              MethodTest02.sumInt(50,100); //调用

       }

       //定义方法,完成两个整数的求和。

       //注意:目前所有的方法请定义成public static .

       public static void sumInt(int a,int b){

              int c = a + b;

              System.out.println(a + "+" + b +"=" +c);

       }

}

public class MethodTest03{

       public static void main(String[] args){ //入口

              //方法调用.

              MethodTest03.println("Hello World"); //"Hello World" 是实际参数(实参)

              //方法调用

              MethodTest03.m1(13,15);

              MethodTest03.m2();     

              //调用m3

              int retValue = MethodTest03.m3(100,200);

             

              System.out.println("计算结果是:"+retValue);}

       //方法的定义

       //方法的形式参数列表中起决定性作用的是参数的类型。

    //参数的名字(局部变量的名字)是随意的只要是合法的标识符即可。

       public static void println(String msg){ //String msg 是形式参数列表(形参)

              System.out.println(msg);

       }

       public static void m1(int a,int b){

              System.out.println(a+"+"+b+"="+(a+b));

       }

       public static void m2(){

              System.out.println("呵呵");

       }

       //该方法有返回值,程序必须使用return语句返回值。

       public static int m3(int a,int b){

              int c = a + b;

              return c; //程序执行到此处m3方法执行结束。并返回值c

              //return语句下面不能再有其他代码,因为根本无法执行到。

              //System.out.println("ABC"); //编译无法通过。

       }

}

public class MethodTest04{

      

       //入口

       public static void main(String[] args){

              A.m1();

              //Error:在当前类中没有m1方法.

              //m1();

              MethodTest04.m2();

              //前提:在当前类中.

       //类名. 可以省略

              m2();

       }    

       public static void m2(){

              System.out.println("m2.....");

       }

}

class A{

       public static void m1(){

              System.out.println("A's m1 method invoke!");

       }

}

 

 

 

public class MethodTest06{

       public static void main(String[] args){

              m1(0);

              System.out.println("ABC");

              //以下程序编译可以通过。(程序分编译期和运行期,编译期只看语法不运算)

              if(true){

                     return;

              }

              System.out.println("bjpowernode");

       }

5.2方法的重载(overload)

5.2.1重载的条件:

①方法名相同

②方法的参数类型,个数,顺序至少有一个不同

③方法的返回类型可以不同(不依靠返回类型来区分重载)

④方法的修饰符可以不同,因为方法重载和修饰符没有任何关系

⑤方法重载只出现在同一个类中

5.2.2重载的优点:

①程序员只需要记忆很少的方法名,方便调用

②代码更加美观。

public class MethodTest08{

       //入口

       public static void main(String[] args){

              //对于程序来说需要记忆1个方法名.

              System.out.println(Compute.sum(10,20));

              System.out.println(Compute.sum(1.0,2.0));

              System.out.println(Compute.sum(10L,20L));

       }

    //以下都构成方法重载

       public static void m1(int a){}

       public static void m1(double a){}

       public static void m2(int a,int b){}

       public static void m2(int a){}

       public static void m3(int a,double b){}

       public static void m3(double a,int b){}

      

       //以下两个m4方法并没有构成重载.

       //方法重复。错误的。

       //public static void m4(int a){}

       //public static void m4(int b){}

       //方法的重载和方法的返回值类型无关.

       /*

       public static void m5(){}

       public static int m5(){

              return 100;

       }

       */

    //方法的重载和方法的修饰符列表无关

       /*

       static void m6(){}

       public static void m6(){}

       */

}

class Compute{

       public static int sum(int a,int b){

              return a + b;

       }

       public static double sum(double a,double b){

              return a + b;

       }

       public static long sum(long a,long b){

              return a + b;

       }

}

分析:System.out.println();这个println方法是否构成了方法的重载?

       一个类中可以有多个main方法(要求与程序入口的main方法参数列表类型、个数或顺序不同),只不过是与程序入口的main方法构成了重载

public class MethodTest09{

       public static void main(String[] args){

              //System.out SUN提供的PrintStream类型

              //printlnPrintStream类型的方法,该方法已经构成了重载。

              System.out.println(10);

              System.out.println(3.14);     

              System.out.println(true);

              System.out.println('a');

              System.out.println("Hello World!");

             

       }

}

5.3 加深对方法的理解

 

 

5.3.1方法的执行原理

①方法在调用的时候,才会给该方法在内存中分配空间;如果这个方法只是定义没有调用,则不会在内存中分配空间。

②方法在调用的时候在“栈”中分配空间。(JVM内存中有一块内存是栈内存。)

③方法调用其实就是“压栈(push)”,方法结束其实就是“弹栈(pop)”。

5.3.2 栈的结构

 

 

 

posted @ 2019-11-02 07:19  阿江是个程序猿  阅读(226)  评论(0编辑  收藏  举报