1、方法概念
Java方法是语句的集合,他们在一起执行一个功能
-
方法是解决一类问题的所需步骤的有序集合
-
方法包含于类或对象中
-
方法在程序中被创建,在其他地方被引用
设计方法时,要尽量保证方法的原子性,就是一个方法只完成一个功能,有益于后续扩展
2、方法定义和调用
2.1、定义
//语法
修饰符 返回值类型 方法名(参数类型 参数名){
方法体
return 返回值;
}
//示例1
public int add(int a,int b){
int c = a + b;
return c;
}
//示例2
public void test(){
System.out.println("这个方法没有返回值");
}
-
修饰符:定义了该方法的访问类型,告诉编译器如何调用该方法,可选
-
返回值类型:方法可能存在返回值,像示例1,返回一个数据类型为int整形的数据,方法也可能不存在返回值,在这种情况下,返回值类型的关键字为void,如示例2所示
-
方法名:方法的实际名称,和参数列表共同构成方法签名
-
参数类型和参数名:两者共同构成参数列表,参数列表是指方法的参数类型,参数先后顺序,参数的个数
-
参数相当于是一个占位符,可选,当方法被调用时,传递具体的值(实参,参数实际的值)给参数
-
形参:当该方法被调用时用于接受外界输入的数据
//这里的a和b就是方法的形参,提前定义好的当该方法被调用时,一个接受外界输入数据的盒子
public int add(int a,int b) -
实参:调用方法时,实际传给该方法的数据
//该方法被调用时,1传递给了a,2传递给了b
add(1,2);
-
-
方法体:方法体包含具体的语句,定义该方法的功能
2.2、调用
//语法
对象名.方法名(实参列表)
-
Java支持两种调用方法的方式,根据是否有返回值来选择
-
当方法返回一个值的时候,方法调用通常被当作一个值
public class Test {
public static void main(String[] args) {
//add方法被调用方法调用,结果为一个整型数据
int add = add(1, 2);
System.out.println(add);
}
public static int add(int a,int b) {
int c = a + b;
return c;
}
}
-
如果方法的返回值是void,方法调用的结果一定是一条语句
public class Test {
public static void main(String[] args) {
//noReturn方法被调用,方法没有返回值,所有不用定义变量来接收返回值
noReturn();
}
public static void noReturn() {
System.out.println("这个方法没有返回值");
}
}
-
-
值传递和引用传递
-
基本数据类型作为参数的方法调用
public class Test02 {
/*
这里的change方法中,形参是a,实参是b
实参给形参传递数据的方式为:实参b将值20复制一份给形参a
实参和形参是两个方法中的相互独立的局部变量,所以修改形参a不会影响实参b的值
*/
public static void change(int a){
a = 10;
System.out.println("a = " + a);//输出结果为:a = 10
}
public static void main(String[] args) {
int b = 20;
change(b);
System.out.println("b = " + b);//输出结果为:b = 10
}
} -
引用类型作为参数的方法调用
//定义一个Point类
class Point{
int x;
int y;
public Point(int x,int y){
this.x = x;
this.y = y;
}
public void show(){
System.out.println("(x = " + x + ",y = " + y + ")");
}
}
public class TestReferencePassing {
/*
这里的change方法中,形参是point对象中的两个属性 x 和 y,实参是change方法中实际赋值给 x 和 y的值。实参给形参传递数据的方式为:实参将直接覆盖修改原先形参的值
*/
public static void change(Point p1){
p1.x = 5;
p1.y = 5;
}
public static void main(String[] args) {
Point point = new Point(1,1);
//调用change方法前,show()方法的输出结果为(x = 1,y = 1)
point.show();
change(point);
//调用change方法前,show()方法的输出结果为(x = 5,y = 5)
//说明Point对象中x和y的值已经发生改变
point.show();
}
}内存分配过程如下图所示:
-