系列文章目录
Java基础01:JAVA概述和基础语法
Java基础02:运算符、流程控制语句、随机数
Java基础03:IDEA
Java基础04:数组、二维数组
Java基础05:方法
Java基础06:Debug、进制
Java基础07:面向对象基础
Java基础08:API、字符串
Java基础09:ArrayList集合
Java基础作业
文章目录
方法概述
方法:就是一段具有独立功能的代码块,不调用就不执行。
作用:封装一段特定的逻辑功能 ,使程序结构清晰提高可读性、提高代码的复用性。
方法并不能提高程序的执行效率,本质执行的代码并没有少。
使用须知
⚫ 方法必须先创建才可以使用,该过程称为方法定义
⚫ 方法创建后并不是直接运行的,需要手动使用后才执行,该过程称为方法调用
⚫ 方法不能嵌套定义
⚫ 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写
如果要编写return,后面不能跟具体的数据。
⚫ return语句下面,不能编写代码,因为永远执行不到,属于无效的代码
调用过程
⚫ 方法没有被调用的时候,都在方法区中的字节码文件(.class)中存储
⚫ 方法被调用的时候,需要进入到栈内存中运行,在栈内存中是先进后出。
形参和实参
形参:形式参数,定义方法时声明的参数,接受数据;形参作用域只在方法内起作用,方法调用结束后是释放。
实参:实际参数,调用方法时实际传入的数据。
注意:
⚫方法调用时,形参和实参的数量和类型必须相匹配,否则将出现编译错误
方法的通用格式
定义
定义方法三要素:(先把这三个要素分析出来再去定义方法)
1.返回值类型 (具体功能)
2.方法名
3.参数(有几个参数?是什么类型?)
public static 返回值类型 方法名(参数类型 参数名,参数类型2 参数名2,.....){
方法体;
return 返回值;
}
返回值 :就这件事情做完之后的结果
返回值类型: 这件事情做完后的结果的数据类型
方法名:这件事情的名字
参数:做这件事情需要的东西
参数类型 : 参数的数据类型
参数名:就是给参数取的一个名字
return :用来返回最终的结果. 两个作用:第一结束当前方法,第二将后面的返回值还给调用处
调用
格式:
方法名(参数1,参数2...);
注意:
⚫传参数的时候方法定义里有几个参数就传几个参数.方法定义的时候参数是什么类型就传什么类型.
⚫如果方法有返回值,一般是用变量接收返回值,这个变量的数据类型就是返回值类型
⚫针对有返回值的方法,强烈建议使用赋值调用(这也是最常用的.)
例如:
public static void test(){}
调用 : test();
public static void test(int a,int b){}
调用 :
int a = 10;
int b = 20;
test(a,b);
public static void test(int[] arr){}
调用 :
int[] arr = {1,2,3,4};
test(arr);
public static int test(int a,int b){...}
调用:
int a = 10;
int b = 20;
int r = test(a,b);
public static int[] test(int a,int b){...}
调用:
int a = 10;
int b = 20;
int[] r = test(a,b);
带参数方法定义和调用
定义格式(通用): public static void 方法名 ( 参数 ) { … … }
调用格式(通用):方法名 ( 参数 ) ;
定义格式(单个参数): public static void 方法名 ( 数据类型 变量名 ) { … … }
定义范例(单个参数): public static void method( int number) { … … }
调用格式(单个参数): 方法名 ( 变量名/常量值 ) ;
调用范例(单个参数): method( 5 ) ;
定义格式(多个参数): public static void 方法名 ( 数据类型 变量名1 ,数据类型 变量名2 ,…… ) { … … }
定义范例(多个参数): public static void getMax( int number1 , int number2 ) { … … }
调用格式(多个参数): 方法名 ( 变量名1/常量值1 ,变量名2/常量值2 ) ;
调用范例(多个参数): getMax ( 5,6 ) ;
注意:
⚫ 方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序将报错
⚫ 方法定义时,多个参数之间使用逗号( ,)分隔
⚫ 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错
带返回值方法的定义和调用
为什么要有带返回值的方法:
我们经常会根据一个方法产出的结果,来去组织另外一段代码逻辑为了拿到这个方法产生的结果,就需要定义带有返回值的方法
⚫ 定义格式: public static 数据类型 方法名 ( 参数 ) {
return 数据 ;
}
⚫ 定义范例1: public static boolean isEvenNumber( int number ) {
return true ;
}
⚫ 定义范例2: public static int getMax( int a, int b ) {
return 100 ;
}
⚫ 调用格式1: 方法名 ( 参数 ) ;
⚫ 调用范例: isEvenNumber ( 5 ) ;
⚫ 调用格式2: 返回的数据类型 变量名 = 方法名 ( 参数 ) ;
⚫ 调用范例: boolean flag = isEvenNumber ( 5 );
注意:
⚫ 方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
⚫ 方法的返回值通常会使用变量接收,否则该返回值将无意义
方法的重载
方法重载概述
方法重载(Overload)的定义:在同一个类中,方法名相同,参数列表不同的方法才叫重载。
方法名相同 , 参数也完全相同 , 称为方法的重复定义是一种冲突性的错误。
调用方法的时候,Java虚拟机会通过参数的不同来区分同名的方法。
好处:可以少记忆一些复杂的方法名,只需要记住唯一一个方法名称,就可以实现类似的多个功能。
注意:
⚫ 识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关。
⚫ 参数列表不同包括:1.参数个数不同;2.参数类型不同;3.参数的多类型顺序不同
⚫ 看参数列表是否相同的时候和参数名没有关系
⚫参数类型顺序不同可以构成重载,但是不建议!
练习题:
public static void method(int a,int b){}
以下的方法和method不属于重载的有哪些?
public static int method(int a,int b,int c){return a + b + c} √
public static int method(int num1,int num2) {return num1 + num2} ×:识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关。
public static void method(double d1,double d2){} √
public static void Method(int num1,double num2){} ×:方法名不同
public static double method(double num1,int num2) {return num1 + num2} √
public static void method(int b,int a){} ×:看参数列表是否相同的时候和参数名没有关系
方法的参数传递
总结:
java方法传递参数是单向值传递,参数类型的值是数值,引用数据类型的值是首地址。
1.当使用基本数据类型做为方法的形参时,在方法体中对形参的修改不会影响到实参的数值
2.当使用引用数据类型做为方法的形参时,若在方法体中修改形参指向的数据内容,则会对实参变量的数值产生影响,由于形参变量和实参变量共享同一块堆区
3.当使用引用数据类型做为方法的形参时,若在方法体中修改形参变量的指向,此时不会对实参变量的数值产生影响,所以形参变量和实参变量分别指向不一样的堆区
基础数据类型的参数
对于引用类型的参数,形式参数的改变,影响实际参数的值
结果:两次输出都是100
引用数据类型的参数
对于引用类型的参数,形式参数的改变,影响实际参数的值
change(arr):传入的arr是数组的内存地址