什么是方法
方法是程序中最小的执行单元。
在之前写的helloworld时main方法是主方法。
这玩意就是C语言的函数
方法可以提高代码的复用性
方法可以提高代码的可维护性
方法的格式
-
方法需要先定义然后才能调用。
-
方法的参数分为形参和实参
形参:全称形式参数,指的是方法定义中的参数。
实参:全称实际参数,指的是方法调用中的参数。
-
形参和实参必须一一对应要不然会报错
-
如果方法不需要返回值一般就定义无值即,void,并且不需要写return
-
方法和方法之间是平级关系,不能相互嵌套定义:就方法之间不能嵌套定义,但是可以嵌套调用。
-
方法的编写顺序和执行顺序无关
-
return下方不能写代码,因为永远不会执行return下方的代码
方法定义
把一些代码打包在一起,这个过程称之为方法的定义。
最简单的格式(不带参数的)
public static void 方法名(){
方法体(就是打包起来的代码);
}
//static是静态的意思,具体在后面static关键字详将
带参数的方法定义
public static void 方法名(数据类型 参数1,数据类型 参数2...){
方法体;
}
带返回值的方法定义
public static 返回值类型 方法名(参数){
方法体;
return 返回值;
}
方法的调用
方法定义后并不是直接运行的,需要手动调用才能运行,这个过程叫方法调用。
方法不带参数的调用
方法名();
方法带参数的调用
方法名(参数);
带返回值的方法的调用
//1,直接调用
方法名(实参);
//2.赋值调用,把返回值赋值给遍历
数据类型 变量名=方法名(参数);
//3.输出调用
System.out.println(方法名(实参));
方法的重载
-
在同一个类当中,定义了多个同名的方法,这些同名的方法具有同种功能。
-
每个方法具体有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系。
-
简记:同一个类中,方法名相同,参数不同的方法,叫重载关系,与返回值无关。
参数不同:个数不同,类型不同,顺序不同(不建议)
这些重名的方法构成了重载关系、
-
Java虚拟机,会通过参数的不同来区分同名的方法
public class MethodDemo{
public static int sum(int a,int b){
return a+b;
}
public static int sum(int a int b,int c){
return a+b+c;
}
}
方法的内存
方法调用的基本内存原理
方法在调用的时候会进栈,在用完后出栈。
多个方法进栈出栈会遵循栈的定义:从栈顶进栈顶出
这就导致了main方法是第一个进去的最后一个出去的。
栈顶
| 方法2 |
| 方法1 |
|main方法|
|______________________________|
基本数据类型和引用数据类型
基本数据类型:
- 整数类型
- 浮点数类型
- 布尔类型
- 字符类型
引用数据类型:除了基本数据类型之外的所有类型都叫引用数据类型。
总结:引用数据类型变量存储的是一段地址,基本数据类型存储的一段数据
从内存的角度区解释
-
基本数据类型就是数据值是存储在自己的空间中
特点:赋值给其他变量,也是赋的真实值。
-
引用数据类型数据是存储在其他空间中,自己空间存储的是地址值。
方法的值定义
举例
public class Text9{
public static void main(String[] args){
int number=100;
System.out.println("调用change方法前:"+number);
change(number);
System.out.println("调用change方法后:"+number);
}
public static void change(int number){
number=200;
}
}
//这样即使在方法中修改了number=200但下面输出还是100
流程:
- main方法压入栈空间中
- 在main方法中先输出100
- 调用change方法,将change方法压入栈空间中
- 在栈空间中change方法内number从传入的100变成200
- 调用change完毕change方法出栈
- 此时在main方法继续执行输出语句,number值不受到change方法的任何影响
- 这是因为change方法只是影响了它自己里面的number而没有影响到main方法中的number
- 这里的number是基本数据类型,可以理解为俩个地址不一样的number
结论:
- 传递基本数据类型时,传递的是真实的数据,形参的改变,不会影响到实际参数的值。
- 传递引用数据类型时,传递的是一段地址,形参的改变,会影响到实参数的值。
原文地址:http://www.cnblogs.com/wdadwa/p/java_learning_08.html