方法:实现特定功能的一块代码,用来被调用,将重复有效的代码抽取的形式就是方法
书写格式:
修饰符 方法返回值类型 方法名(参数列表){方法体}
public void methodName(参数…){…}
修饰符:public static
方法返回值类型:提供返回值对应的类型
没有返回值使用void
方法:标识符
参数列表:由参数类型、参数个数以及参数顺序共同决定的
方法体:重复且有效的代码
return :将返回值来进行返回
public class method {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入行数和列数");
int i1 = sc.nextInt();
int i2 = sc.nextInt();
//调用方法,只有被调用额时候才能进行使用
printXingXing(i1, i2);
//打印五行六列的星星
for (int i = 0; i <5 ; i++) {
for (int j = 0; j <6 ; j++) {
System.out.print("*");
}
System.out.println();
}
}
//因为java不支持方法的嵌套,所以必须要在方法外定义方法
public static void printXingXing(int x,int y){
for (int i = 0; i <x ; i++) {
for(int j=0;j<y;j++){
System.out.print("*");
}
System.out.println();
}
}
}
注意:
方法只有被调用才能执行,
明确:方法返回值类型,参数列表
return功能:结束方法,把返回值进行取回
当方法有返回值,考虑所有值的情况给定对应的返回值
*return的作用:
1.作为程序的结束标志,方法的结束
2,作为方法的返回值,进行方法的结果的返回值
**注意:****方法不支持嵌套,所以方法里面不能进行方法的嵌套**
方法传值:
1.当实参为基本数据类型时传递的是拷贝值(基本数据类型的地址值不变)
**String类型的传值时,不会改变原有的string类型的值,基于常量池中的原则,最终传递的是还是常量:**还是值的拷贝,不会继续宁地址的操作
2.当实参为引用数据类型时传递的是地址值的拷贝
如果拷贝的地址值是原来的堆内存的值就有可能会影响
如果拷贝的地址值没有找到原堆内存做任何操作都不会影响原来的值
有参数有返回值:
有参无返回值:
无参有返回值:
无参无返回值:
package cn.tedu;
public class MethodDemo3 {
//java中的方法被调用都是被加载到栈中执行
//JVM调用main方法加载到栈中执行
public static void main(String[] args) {
int i=1;
//实参--实际传入的值
/**
* 当实参类型是基本数据类型的时候,传递的是拷贝值(固化在系统中的编码值),不会影响原来的值
* 当实参类型是应用数据类型时传递的是地址值的拷贝,数组中的值依旧是拷贝的值
*/
//m(i);//方法执行后进行会被立即出栈
int []arr={1,2,3};
//数组元素是基本数据类型传递的是值的拷贝
/*int[] arr={1,2,3};*/
n(arr);
System.out.println(arr[0]);
}
private static void n(int[] arr) {
arr=new int[2];
arr[0]=9;//根据拷贝的地址值找到堆内存改变堆内存的值,进行相关的覆盖
System.out.println(arr[0]);
}
//形参,接收实参的值
private static void m(int i) { //i的值来自于实参的拷贝
i+=2;
}
}
方法的重载:在一个类中,方法名一直,但是参数列表不一致
在调用重载方法的时候,如果提供精确匹配的方法如果没有提供精确匹配的方法就做相对匹配,如果提供多个相同程度的相对精确匹配的方法就匹配不到就会进行报错(最好提供精确匹配的方法)
**方法签名**
在java中唯一确定方法--方法签名(由方法名和参数列表共同进行决定)
重载的过程:
1.方法名相同,相同参数类型,参数个数不同
2.方法名相同,参数个数相同,参数类型不同
3.方法名相同,参数类型和参数的个数相同,但是参数的顺序不一样
package cn.tedu;
public class MethodDemo1 {
/**
* 方法的重载-->方法名一定要相同
* 1.参数个数相同,参数的类型不同
* 2.参数个数不同,参数的类型相同
* 3.参数个数相同,参数类型相同,参数顺序不同
*/
public static void main(String[] args) {
}
private static int add(int a,int b) {
return a+b;
}
private static int add(int a,int b,int c) {
return a+b+c;
}
private static double add(double a,double b) {
return a+b;
}
private static double add(double a,double b,double c){
return a+b+c;
}
private static double add(int a,double b){
return a+b;
}
private static double add(double a,int b){
return a + b;
}
}