方法的执行在栈中,加载在方法区
访问修饰符 返回值类型 方法名(参数1,参数2);
public static void delect(int i,int j) { }
这个方法的方法签名是delect(int,int)
调用方法的时候:先是进行精确匹配,如果没有精确匹配的方法,那么就进行相对精确的匹配
方法调用的时候如果传入的是基本数据类型,相当于是值的拷贝,那么形参的改变不影响实参,如果是引用数据类型,相当于传入的是地址,这个时候形参的改变会影响到实参
方法的重载:
在一个类中,出现了方法名一致但是参数列表不一致的方法 方法是根据方法签名进行区分的
相对精确匹配的数据类型必须小转大
public static void main(String[] args) { int i=1; //m(1.0,1.0); } public static void m(int i,int j) { System.out.println("int,int"); } public static void m(int i,double j) { System.out.println("int,double"); } public static void m(double j,int i) { System.out.println("double,int"); }
方法的传值
//所有的方法执行在栈中 public static void main(String[] args) { int i=1; int[] arr={1,2,3}; //调用方法 //实参---实际赋予参数的值 //如果传入的实参是基本类型,就是值的拷贝 //m(i);//1 //m(arr[1]);//1 数组元素---基本类型 //如果参数是引用数据类型,就是地址值的拷贝 //方法中拿到拷贝过来的地址值找到堆内存改变元素 //就会对原堆空间影响 //n(arr); //10 //方法中拿到拷贝过来的地址值如果找到的不是原堆空间 //做任何操作影响都不会影响原堆空间 //mn(arr);//1 System.out.println(arr[0]); } //形参---用于接收的参数 public static void m(int i){ i++; //System.out.println(i); } public static void n(int[] arr){//数组类型---数组地址值 arr[0]=10; } public static void mn(int[] arr){ arr=new int[4]; arr[0]=10; }
方法的递归
方法中调用了方法的本身
public class HellowWorld { public static void main(String[] argv ) { System.out.println(sum(11)); }//endmain, public static int sum(int i) { if(i==1) //递归的出口 return i; return i+sum(--i); } }//endclass