方法及方法参数传递:

一、方法

概念:方法也叫函数(JAVA中一般称为方法),在类或者对象中,是一个可以完成独立功能的代码块,每次调用都是独立的。

作用:

  1. 完成功能,数据的处理;
  2. 方法可以拿来反复使用,也就是提高了重用性;
  3. 独立完成,可以增加维护的便捷,也可以提高编码的效率。

在我们接触java语言的时候,学会的第一个java语言,Hello world

class Hello{
	public static void main(String[] args){
		System.out.println("Hello world!");
	}
}

在整个语言里面:

  1. 修饰符:[public] [static]
  2. 返回值类型:void 表示无返回值类型
  3. 方法名:main 主方法名,主方法必须按照当前格式书写
  4. 参数列表:(String[] args)String[] args 表示字符串数组的类型,args是数组名
  5. 方法的结构体:{}
  6. 功能语句:System.out.println(“Hello world!”);打印语句

语法定义:

    修饰符 返回值类型 方法名(参数列表){
    	功能语句;
    }

下面是整个方法中必须有的格式

    返回值类型 方法名(){
    }

返回值类型:如果没有返回值就用void,如果有返回值,那么需要根据返回值的 数据类型来做到一致,比如int,String,long,double
方法名:命名使用驼峰命名格式,做到见名知义
方法签名:方法名+参数列表。一个类里面是不允许有多个方法签名一样的方法
示例:

//要求定义方法,计算2个整数,3个整数的和。
class Hello{
	public static void main(String[] args){
	}
	static void add(int a,int b){
		int sum = a+b ;
		System.out.print(sum);
	}
	static int add(int a,int b,int c){
		return a+b+c;
	}
}

上面定义了2个方法,一个是2位数的和,一个是3位数的和,但是定义的方法名字是一样的,这种情况编译是不会报错的,这种情况称为方法重载
方法重载:方法名相同的情况下,参数列表不同。参数列表包括:数据类型,顺序,个数

二、方法调用

方法的调用其实在接触java语言的时候也是碰到过的,也是我们非常常见的

System.out.println("这是方法调用");

其中System表示系统类,out表示类的对象,print就是方法名,是一个打印的方法
方法的调用分为2大类

  • 有static修饰的情况下:
    • 不同类:类名.方法名(参数列表);
    • 同类的情况下:方法名(参数列表);
  • 没有static修饰的情况下:
    • 类的对象名.方法名(参数列表);

示例1:有返回值

有返回值的情况,可以用返回值做任何事情,就有了做其他事情的价值,除了打印,还能做运算等等

//定义一个方法,传入一个整数,求出0~该整数范围,中,是3的倍数的所有的数字和
class MethodTypeReturn{
    public static void main(String[] args){
    	int a=sumThree(9);//其中的sumThree(9)是一个返回值类型的数值
		System.out.println(a);
    }
	static int sumThree(int a){//定义一个方法,返回值类型是int
		int sum=0;//声明变量 初始值为0
		for (int i=0;i<=a ;i++ ){//外部循环,罗列整数
			if(i%3==0){//判断是否为3的倍数
				sum+=i;//3的倍数累加  可以看成相当于sum=sum+3
			}
		}
		return sum;//返回值,倍数之和
	}
}

需要注意的是,在有判断结构,如果都不执行判断,要考虑最后有return语句
示例2:无返回值
无返回值的情况一般都是只能是一个语句,最常见的是打印语句

//定义方法,接受三个int参数,计算打印最大的一个数。
class MethodNoReturn{
    public static void main(String[] args){
		max(20,30,55);//调用方法,同类下
    }
	static void max(int a,int b,int c){//定义一个方法,打印最大的数
		if(a>=b&&a>=c){                          
			System.out.println(a);//打印a最大的情况
		}
		if(b>=a&&b>=c){
			System.out.println(b);//打印b最大的情况
		}
		if(c>=a&&c>=b){
			System.out.println(c);//打印c最大的情况
		}	
	}
}

三、方法参数传递

1.值传递

基本数据类型传递的时候,传递的是具体的值,相当于只是拷贝了一份到方法中,而原来的值是不变的,因为值是存放在栈当中。

示例:

class MethodType1{
    public static void main(String[] args){
		int a=11;
		int b=12;
		add(a,b);//输出值3
		System.out.println("a="+a+" b="+b);//输出值:a=11 b=12
    }
	static void add(int a,int b){
		a=1;b=2;
		int sum=a+b;
		System.out.println(sum);
	}
}

方法及方法参数传递:

2.引用传递

引用数据类型传递的时候是传递的地址值,是值的引用;然后需要注意的是String除外。
地址值存在栈当中,真正的值存放在堆当中,当引用类型数据传输的时候,复制的是一份地址值,2份地址值引用的都是堆当中的具体值,

示例:

import java.util.Arrays;
class MethodType1{
    public static void main(String[] args){
		int[] a={1,2,3,4};
		get(a);//输出值:[2,3,4,5]
    }
	static void get(int[] a){
		for (int i=0;i<a.length ;i++ ){
			a[i]+=1;
		}
		System.out.println(Arrays.toString(a));
	}
}