Java方法

  1. 基本类型和引用类型的不同
    对于基本类型,它的值直接保存在变量中;
    对于引用类型,它保存的是实际对象的地址,引用指向实际对象,实际对象中保存着内容;
  2. 赋值运算符对基本类型与引用类型的作用
    对于基本类型,赋值运算符会直接改变变量的值,原来的值会被覆盖掉;
    对于引用数据类型,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉,但是原来的对象不会被改变;
  3. 值传递:方法接收的是实参值的拷贝,会创建副本。
    引用传递:方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。
  4. 在java中只有值传递
  5. 代码的实践:
     //1. 传递基本数据类型参数
     public static void main(String[] args) {
       int num = 10;
       to(num);
       System.out.println("num = " + num);
     }
    
     public static void swap(int a, int b) {
      int temp=num;
      temp=num*num;
      System.out.println("temp = " + temp);
     }
     //执行结果:
     //temp = 100
     //num = 10
     //num没有变,传递的副本变化了,无论副本内容怎么修改,都不会影响原来的值;
    
     //2. 传递引用数据类型参数:数组,字符串都是引用数据类型
     public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        System.out.println(arr[0]);
        change(arr);
        System.out.println(arr[0]);
      }
    
     public static void change(int[] array) {
       // 将数组的第一个元素变为0
       array[0] = 0;
     }
     //执行结果:
     //1
     //0
     //这里要注意:这里传递的还是值,只不过这个值是实参的地址;也就是说change方法的参数拷贝的是 arr 实参)的地址,因此,它和arr指向的是同一个数组对象。这也就说明了为什么方法内部对形参的修改会影响到实参。
    
     //3. 传递引用数据类型参数ii
     //一个person的类
     public class Person {
       private String name;
       // 省略构造函数、Getter&Setter方法
     }
    
     public static void main(String[] args) {
       Person xiaoZhang = new Person("小张");
       Person xiaoLi = new Person("小李");
       swap(xiaoZhang, xiaoLi);
       System.out.println("xiaoZhang:" + xiaoZhang.getName());
       System.out.println("xiaoLi:" + xiaoLi.getName());
    }
    
     public static void swap(Person person1, Person person2) {
       Person temp = person1;
       person1 = person2;
       person2 = temp;
       System.out.println("person1:" + person1.getName());
       System.out.println("person2:" + person2.getName());
     }
     //输出的结果:
     //person1:小李
     //person2:小张
     //xiaoZhang:小张
     //xiaoLi:小李
     //swap 方法的参数 person1 和 person2 只是拷贝的实参 xiaoZhang 和 xiaoLi 的地址。因此, person1 和 person2 的互换只是拷贝的两个地址的互换罢了,并不会影响到实参 xiaoZhang 和 xiaoLi 。
    
  6. 因此java中只有值传递,没有引用传递
    如果参数是基本类型的话,很简单,传递的就是基本类型的字面量值的拷贝,会创建副本。
    如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。
  7. 方法的重载
    重载就是在一个类中,有相同函数的名称,但是形参不同的函数
    方法重载的规则:
    • 方法名称必须相同
    • 参数列表必须不同(个数不同,类型不同,参数排列顺序不相同)
    • 方法的返回类型可以相同也可以不相同
    • 仅仅返回类型不同不足以称为方法的重载
  8. 可变长参数:一个方法中只能指定一个可变参数,且必须是方法的最后一个参数
  9. 递归:自己调用自己,必须要有递归头(终止条件)和递归体(处理方法),不然会有栈溢出。
posted @ 2024-04-29 14:07  Hanyta  阅读(2)  评论(0编辑  收藏  举报