JAVA入门笔记3 —— 方法

  • Post author:
  • Post category:java


  • 参考书:《Java语言程序设计与数据结构(基础篇)》—— 梁勇



一、概述

  • 方法:就是

    将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能

    。 当我们需要这个功能的时候,就可以去调用。这样即

    实现了代码的复用性

    ,也

    解决了代码冗余

    的现象。
  • java中的方法,基本等价于C++中类的方法和C中的函数



二、定义一个方法



1. 格式

修饰符 返回值类型 方法名 (参数列表)
{
	代码... 	//方法体
	return x; 	//返回值
}



2. 说明

  • 修饰符:

    1. 权限关键字:

      private

      /

      public

      /

      protect

      ,类似C++(现在全写

      public

      即可,具体到对象和类的部分再说明)
    2. 静态关键字:

      static

      ,加上后定义的方法称为

      静态方法
  • 返回值类型:

    1. 无返回值:

      void
    2. 各种数据类型:

      int、long、double、float、String...
  • 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法

  • 参数列表:这是

    形式参数

    的列表,调用时传入实际参数

  • 返回值:方法末尾可以通过return返回一个数据,类型为函数头中声明的返回值类型。

    若返回值类型是void,return可以省略,也可直接写

    return;

    不带返回值,从而提前退出方法

  • 注意:方法必须定义在其他类中方法外,

    不可嵌套定义



3. 示例

public static void methodName() 
{ 	
	System.out.println("这是一个方法"); 
}



三、调用方法



1. 静态方法和动态方法

  • 静态方法(有

    static

    修饰符):

    1. 静态方法存储在在一个公共的内存地址,可以被这个类的所有对象访问。
    2. 类的静态方法和类的静态变量一样是在类加载的时候初始化的。
    3. 调用静态方法时

      可以按常规方式

      对象名.方法名

      调用,也可以按

      类名.成员名

      形式调用,不需要创建对象

      (最好使用后者,可以方便看出这是静态的)
  • 动态方法/实例方法(无

    static

    修饰符):

    1. 动态方法和对象实例存储在一起
    2. 动态方法在实例化对象的时候初始化,因此

      静态方法不能调用动态方法

      (因为调用的时候动态方法可能还没生成)
    3. 调用动态方法前

      必须创建对象,按

      对象名.方法名

      方式调用



2. 传参说明

  • 调用时参数会尽量兼容,比如函数头为

    public static void print(int i)

    ,调用时写

    print('a')

    ,可以自动转换

  • java中参数传递方式

    只有值传递一种

    1. 传入的是

      基本数据类型



      int/float/char...

      ):直接复制值,方法中修改形参不影响实参
    2. 传入的是

      引用数据类型



      String/数组/对象...

      ):引用数据类型存储的是真实数据的引用(可以看作地址),传参时同样复制实参的值,故形参存储了一个相同的引用。也如果在方法内通过形参修改其引用的对象本身,在方法退出后修改仍会保留;如果在方法内没有修改引用的对象,只是修改了形参(比如指向了其他对象),方法退出后修改不会保留

    详细说明可参考:

    为什么说Java中只有值传递



四、重载方法

  • 重载

    允许你使用相同的名称定义不同的方法

    ,但是他们的参数列表必须不同

  • 要求:

    1. 函数

      名称必须相同

    2. 参数列表必须不同

      (个数不同、类型不同、参数排列顺序不同等)
    3. 函数的

      返回类型可以相同也可以不相同

      ,仅仅返回类型不同不足以成为函数的重载
    4. 如果函数调用时可以匹配多个函数,会

      匹配最精确的那个函数

      ,如果

      两个函数一样精确,就会报错



      max(int a,double b);



      max(double a,int b);


      调用

      max(1,2)

      时,因为上面两个函数一样精确,所以会报错
  • 使用重载方法,可以使使程序更清楚更有可读性。执行同样的功能的方法应当具有相同的名字,不管其参数类型是什么



五、变量的作用域

  • 在方法中定义的变量称为

    局部变量

    ,其

    作用域从变量定义处开始,直到其所在的块末尾为止

    。局部变量使用前必须要定义并赋值
  • 方法的参数实际上就是一个局部变量,其作用范围涵盖整个方法
  • 可以在一个函数内部的不同块(比如一个for循环体)里定义同名的局部变量

    • 在内层,内层的同名变量会 ”遮住“ 外层的同名变量
    • 在外层,内层的同名变量不可见



版权声明:本文为wxc971231原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。