方法及方法参数传递:
一、方法
概念:方法也叫函数(JAVA中一般称为方法),在类或者对象中,是一个可以完成独立功能的代码块,每次调用都是独立的。
作用:
- 完成功能,数据的处理;
- 方法可以拿来反复使用,也就是提高了重用性;
- 独立完成,可以增加维护的便捷,也可以提高编码的效率。
在我们接触java语言的时候,学会的第一个java语言,Hello world
class Hello{
public static void main(String[] args){
System.out.println("Hello world!");
}
}
在整个语言里面:
- 修饰符:[public] [static]
- 返回值类型:void 表示无返回值类型
- 方法名:main 主方法名,主方法必须按照当前格式书写
- 参数列表:(String[] args)String[] args 表示字符串数组的类型,args是数组名
- 方法的结构体:{}
- 功能语句: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));
}
}