• 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 栈的结构

     

  • 相关阅读:
    反射、面向对象(基础篇)
    配置文件
    模块补充 、迭代器和 生成器
    模块
    正则表达式
    冒泡排序、递归和简单装饰器
    使用Apache Archiva管理Maven仓库
    AppScan9.0.3.5漏洞扫描记录
    Linux环境下安装Websphere8.5.5
    如何排查网络通讯状况
  • 原文地址:https://www.cnblogs.com/superjishere/p/11780480.html
Copyright © 2020-2023  润新知