什么是方法
方法:封装了特定功能的代码块;
方法的定义格式:
有返回值的方法:
修饰符 返回值类型 方法名(形式参数列表){
方法体;
return 返回值;
}
无返回值的方法:
修饰符 void 方法名(形式参数列表){
方法体;
}
格式解释:
修饰符:
若在main方法所在的类中定义方法,修饰符写 public static (在下一篇关于static介绍中解释)
若在事物描述类中定义方法,修饰符写 public
返回值类型:
1.约束了方法的返回值的数据类型;
2.约束了调用方法接收方法结果变量的数据类型;
方法名:提供我们找到方法的方式
形式参数列表:
参数类型 参数名
参数类型:约束调用方法传入实际参数的数据类型;
参数名:接收调用方法传入实际参数的具体值;
方法体:完成功能的代码
return:
1.用于结束方法;
2.在有返回值的方法内,结束方法并把方法的结果返回给调用者
返回值:方法的结果
//方法只能由一个结果,若有多个结果需要返回,可以使用容器把结果包裹起来一并返回;
void:被 void 修饰的方法是无返回值的方法;
方法的调用方式:
有返回值的方法:
1.直接调用:方法执行了但是没意义
2.输出调用:可以在控制台看到方法的结果,但是没有接收方法的结果
3.赋值调用:接收方法的结果并可以进行进一步操作 -->推荐
无返回值的方法:
只能使用直接调用;
方法的重载:
在同一个类中,出现了方法名相同,形式参数列表不同的情况且不报错叫方法的重载;
注意:
1.在同一个类中;
2.方法名相同
3.形式参数列表不同:
a.形式参数的个数不同;
b.形式参数的类型不同;
c.形式参数的类型顺序不同;
4.与返回值无关
方法的形式参数是基本数据类型的时候,形式参数的改变不影响实际参数;
方法的形式参数是引用数据类型的时候,形式参数的改变直接影响实际参数;
//注意:String作为方法的形参时,把它当做基本数据类型来看;
可变参数:
格式:
数据类型...数组名
注意:
1.可变参数写在形式参数的位置上,在调用方法的时候可以传入任意个该类型的实参;
2.可变参数的后面不可以再接任何类型的形式参数
3.可变参数的前面可以有其他类型的形式参数
下面通过内存图的方式了解方法
1.方法的形式参数是基本数据类型的时候形式参数的改变不影响实际参数
这个图的过程是这样的:
首先这个字节码文件(.class文件)加载到方法区,创建相应的空间.成员方法main方法先进栈,在栈中开辟一块空间,创建两个变量并赋值,然后调用function方法,function方法入栈,开辟一块空间,此时形参a,b分别被赋值10,和20.然后,局部变量a和b又在方法内操作,值发生变化,但不会影响main方法中a和b的值.function方法运行完,出栈销毁,main方法运行完也要出栈销毁.
2.当方法的形式参数是应用数据类型的时候形式参数的改变直接影响实际参数
这个图的过程是这样的:
首先这个字节码文件(.class文件)加载到方法区,创建相应的空间.成员方法main方法先进栈,在栈中开辟一块空间,new一个数组,则在堆内存中开辟一块空间存数组的内容,默认赋值,把这个数组在堆内存的地址传给数组名.然后对数组赋值,根据数组索引,对数组赋值.调用打印方法,将数组内容打印(因为板块问题,没有展示).调用method方法.method方法入栈,开辟一块空间,arr数组的地址传给method方法的参数.之后method的操作都是对地址是0x001的数组操作,所以当方法的形式参数是应用数据类型的时候形式参数的改变直接影响实际参数.