方法
***本质:
**一段代码片段,并且这段代码片段可以完成某个特定的功能,并且能重复使用。
*方法定义在类体当中,方法体之外。
*一个类中可以定义多个方法,位置先后可以随意。
***语法结构:**
[修饰符列表] 返回值类型 方法名 (形式参数列表){
方法体;
}
*对以上语法结构的解释说明:
**关于修饰符列表
可选项,不是必须的
需要注意:
若方法修饰符列表中有“static关键字”的话,以【类名.方法名(实际参数列表)】的形式调用此方法
**返回值类型
*返回值:
一个方法是可以完成某个特定功能的,这个功能结束之后大多数是需要返回最终执行结果的,执行结果可能是一个具体存在的数据。而这个具体存在的数据就是返回值*返回值类型:
返回值是一个具体存在的数据,数据都是有类型的,此处需要指定的是返回值的具体类型。*返回值的类型可以是Java中任意一种类型,包括基本数据类型和所有的引用数据类型。 例如byte, short, int, float, double, boolean, char, String, void …
*也可能方法执行结束后不返回任何数据,Java中规定,当一个方法执行结束之后不返回任何数据的话,返回值类型位置必须写void关键字。
注意:
此时不可以在方法体中编写“return 值”这样的语句,但是可以写“return;”
**方法名
*只要是合法的标识符就好
*最好见名知意
*方法名最好是动词
*方法名首字母要求小写,后面每个单词首字母大写
**形式参数列表:简称形参
*形参是局部变量
*形参的个数可以是0-N个
*多个形参之间用逗号隔开
*方法在调用的时候,实际给这个方法传递的真是数据被称为:实际参数,简称实参
*实参列表和形参列表必须满足:
-数量相同
-类型对应相同
**方法体
*必须由大括号括起来,Java语句遵循自上而下的顺序依次执行。
*方法的调用
***语法规则****
类名.方法名(实参列表)
**以下情况类名可以省略:
- -对于方法中的修饰符列表当中有static关键字的:“类名.”可以省略不写
- -m1方法和m2方法在同一个类体当中的时候可以省略不写
**方法调用的时候实参和形参要求个数对应相同,数据类型对应相同。类型不同的时候要求能够进行相应的自动类型转换。
*注意:在一个Java源文件当中只定义一个class,比较清晰。
*方法执行过程中的内存分配
**方法只定义,不调用,是不会执行的,并且在JVM(Java虚拟机)中也不会给该方法分配“运行所属”的内存空间,只有在调用这个方法的时候,才会动态的给这个方法分配所属的内存空间。
**在JVM内存划分上有这样三块主要的内存空间(当然除了这三块之外还有其他内存空间)
-
-方法区内存:
在类加载的时候,class字节码代码片段被加载到该内存空间。
-
-堆内存:
new的对象在堆内存中存储
-
-栈内存(局部变量):
方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈。
**方法代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配?
*方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候,将其放到了方法区中,所有JVM中的三块主要的内存空间中方法区内存最先有数据,存放了代码片段。
*代码片段虽然在方法区内存当中只有一份,但是可以被重复调用。每次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配【栈内存中分配方法运行的所属内存空间】
*方法在调用的瞬间,会给该方法分配内存空间,会在栈中发生压栈动作,方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作。
- -压栈:给方法分配内存
- -弹栈:释放该方法的内存空间