Java方法

JAVA方法

  • 方法的基础语法
  • 方法的重载机制overload

1. 方法的有关概念:

  • 方法的本质:方法就是一段代码片段,并且这段代码片段可以完成某个特定的功能,并且可以被重复使用。
  • 方法对应的英语单词:Method
  • 方法在C语言中叫做函数/Function
  • 方法定义在类体当中,在一个类当中可以定义多个方法,方法编写的位置没有先后顺序,可以随意
  • 方法体中不能再定义方法
  • 方法体由Java语句构成,方法体当中的代码遵守自上而下的顺序依次执行

2.方法的定义,语法结构:

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

​ 方法体;

}

2.1 关于修饰符列表

  • 可选项,不是必须的
  • 目前统一写成:【public static】
  • 方法的修饰符列表当中“有static关键字”的话,怎么调用这个方法
    – 类名.方法名(实际参数列表)

2.2 返回值类型

  • 什么是返回值
    • 一个方法是可以完成某个特定功能的,这个功能结束之后大多数都是需要返回最终执行结果,执行结果可能是一个具体存在的数据,而这个具体存在的数据就是返回值
  • 返回值类型
    • 返回值都是一个具体存在的数据,数据都是有类型的,此处需要指定的是返回值的具体类型
  • 返回值类型可以指定哪几类
    • Java任意一种类型都可以,包括基本数据类型和所有的引用数据类型
  • 也可能这个方法执行后不返回任何数据,Java中规定,当一个方法执行结束之后不能返回任何数据的话,返回值类型位置必须编写:void关键字
  • 返回值类型若不是void,表示这个方法执行结束之后必须返回一个具体的数值,当方法执行结束的时候没有返回任何数据的话编译报错。代码:“return 数值;”,并且要求返回的“值”的数据类型必须和“方法的返回值类型”一致,不然编译器报错。
  • 返回值类型是void的时候,在方法体当中不能编写“return 值 ;”这样的语句,但是要注意可以编写“return ;”这样的语句
  • 返回值不是void的时候
    • 返回值不是void的时候,要求方法必须保证“return 值;”语句来完成值的返回,如果没有“return 值;”编译报错
    • 一个方法有返回值的时候,当我们调用这个方法的,方法返回了一个值,对于调用者来说,这个返回值可以选择接收,也可以选择不接收。但是大部分情况下我们都是选择接收的。

2.3方法名

  • 只要是合法的标识符就行
  • 方法名最好见名知意
  • 方法名最好是动词
  • 方法名首字母要求小写,后面每个单词首字母大写

2.4 形式参数列表:简称形参

  • 形参是局部变量
  • 形参的个数可以是:0 ~ n 个
  • 多个形参之间用“逗号”隔开
  • 形参中起决定性作用的是形参的数据类型,形参的名字就是局部变量的名字。
  • 方法在调用的时候,实际给这个方法传递的真实数据被称为:实际参数,简称实参
  • 实参列表和形参列表必须满足:数量相同,类型对应相同,类型不同的时候要求能够进行相应的自动类型转换

2.5 方法体

  • 方法体必须由大括号括起来,方法体当中的代码有顺序,遵循自上而下的顺序依次执行
  • 方法体有java语句构成,每个java语句以";"结尾

2.6 方法怎么调用

  • 方法只定义不去调用是不会执行的,只有在调用的时候才会执行

  • 语法规则:《方法的修饰符列表当中有static》

    ​ 类名.方法名(实参列表);<这是一条Java语句,表示调用某个类的某个方法,传递这样的实参。>

    如果被调用的方法与要执行的方法在同一个类中类名. 可以省略,否则不可以省略

package methodtest;

//public表示公开的
//class表示定义类
//MethodTest02是一个类名
public class MethodTest02 {//表示定义一个公开的类,起名MethodTest02

//    类体
//    类体中不能直接编写Java语句,除声明变量之外
//    方法出现在类体当中

//    方法
//    public表示公开的
//    static表示静态的
//    void表示方法执行结束之后不返回任何数据
//    main是方法名:主方法
//    (String[] args):形参列表,其中String[]是一种引用数据类型,args是一个局部变量的变量名
//    所以以下只有args这个局部变量的变量名是随意的
//    主方法就需要这样固定编写,这是程序的入口

    public static void main(String[] args){
//main方法是JVM负责调用的,是一个入口,可以在这里编写java语句来调用其他的方法,一个方法可以重复调用
//        调用MethodTest02的sum方法,传递两个实参

        MethodTest02.sum(10,20);//(10,20)实参列表

    }
//    自定义方法,不是程序的入口
//    方法作用:计算两个int类型数据的和,不要求返回结果,但是要求将结果直接输出到控制台
//    修饰符类型:public static
//    返回值类型:void
//    方法名:sum
//    形式参数列表:(int x,int y)
//    方法体:主要任务是求和之后输出计算结果
    public static void sum(int i ,int j){//(int i ,int j)形参列表

        System.out.println(i + "+" + j + "=" + (i+j ));
    }
}
    

2.7深入return语句

  • 带有return关键字的Java语句只要执行,所在的方法执行结束
  • 在""同一个作用域"当中,return语句下面不能编写任何代码,因为这些代码永远都执行不到
  • 如果无法保证“return 值 ;”会执行,编译会报错
  • "return;"语句出现在返回值为void的方法当中主要是为了用来结束当前方法

3.方法在执行过程当中,在JVM中的内存分配

方法只定义,不调用,是不会执行的,并且在JVM中也不会给该方法分配运行所属的内存空间。只有在调用时才会给这个方法分配所属的内存空间

3.1在JVM内存划分上有这样三块主要的内存空间

  • 方法区内存
  • 堆内存
  • 栈内存

3.2关于 “栈” 数据结构:

  • 栈:stack,是一种数据结构
  • 数据结构反映的是数据的存储形态
  • 常见的数据结构:数组、队列、栈、链表、二叉树、哈希表/散列表

在这里插入图片描述

3.3 方法执行内存分析

  1. 方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候,将其放到了方法区当中。所以JVM中的三块主要的内存空间中方法区内存最先有数据,存放了代码片段
  2. 代码片段虽然在方法区内存当中只有一份,但是可以被重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配。【栈内存中分配方法运行的内存空间】
  3. 方法在调用的瞬间,会给该方法分配内存空间,会在栈中发生压栈动作,方法执行结束之后,给该方法分配的内存全部释放,此时发生弹栈动作。
    • 压栈:给对方分配内存空间
    • 弹栈:释放该方法的内存空间
  4. 局部变量在“方法体”中声明。局部变量运行阶段内存在栈中分配

在这里插入图片描述

  1. 方法调用的时候,在参数传递的时候,实际上传递的是变量中保存的那个值传过去了
    • 栈内存:主要存储局部变量

4.方法重载机制

方法重载又被称为:overload

4.1 满足方法重载的条件

  • 在同一个类当中
  • 方法名相同
  • 参数列表不同:数量不同,顺序不同,类型不同

4.2方法重载和什么有关系和什么无关系

  • 方法重载和方法名+参数列表有关系
  • 方法重载和返回值类型无关
  • 方法重载和修饰符列表无关

5.方法递归

  • 方法自身调用自身

    ​ a(){

    ​ a();

    ​ }

  • 递归是很耗费内存的,递归算法可以不用的时候尽量别用。

  • 递归必须有结束条件,没有结束条件一定会发生栈内存溢出错误。

  • 递归即使有了结束条件,即使结束条件正确,也可能会发生栈内存溢出错误,因为溢出的太深了

  • 递归可以不使用尽量别用,

  • 但是有些情况下该功能的实现必须依靠递归方式,例如:目录拷贝

package methodtest;

public class RecursionTest01 {
//    5的阶乘
    public static void main(String[] args){
        int n = 5;
        int retValue = method(n);
        System.out.println(retValue);
    }
    public static int method(int n){
        if(n == 1){
            return 1 ;
        }
        return n * method(n-1);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值