系统默认初始值、方法以及方法重载

时间:2024-10-26 12:56:12

JavaBasis

  • 0、系统默认初始值
  • 1、方法
  • 2、方法重载

0、系统默认初始值

    类型      初始值
  byte、short、int ——> 0
  char      ——> ‘\u0000’(\u代表以 u16 进行编码)
  long      ——> 0L
  float      ——> 0.0F
 double     ——>0.0
boolean     ——> false
 引用数据类型  ——> null

1、方法

  1. 概述 :把重复且有效的代码进行抽取,抽取的形式称为~
  2. 格式 :
      修饰符 返回值类型 方法名(参数列表){
        方法体;
        (return 返回值;)
      }
      解析 :
       修饰符 :public static
       返回值类型 :给定对应返回值类型来接收返回值;
             如果没有返回值,则用 void 表示;
       方法名 :标识符
       参数列表 :由参数类型、参数个数以及参数顺序决定的
       方法体 :重复且有效的代码
       return :把方法的返回值进行返回;结束方法
//没有返回值的方法
public void add(){
	int i = 1;
	int j = 1;
	System.out.println(i + j);
}

//有返回值的方法
public int add(int i, int j){
	return i + j;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 应用 :
      1) 方法只有调用才会执行
      2) 抽取 / 定义方法,两个明确 :
       Ⅰ、方法返回值类型
       Ⅱ、参数列表
       Ⅲ、return 两个功能 :① 结束方法; ② 把返回值进行返回
       Ⅳ、考虑参数所有取值情况,都要提供对应的返回值的情况

2、方法重载

  1. 概述 : 当一个类中。方法名一致,参数列表不一致
       java 根据方法签名(方法名和参数列表共同作用)能唯一确定方法
       参数列表 :类型、数量、顺序
  2. 调用重载方法时 :
      a、如果提供精确匹配方法就进行精确匹配
      b、如果没有提供精确匹配方法进行相对精确匹配;如果提供多个相对精确匹配的方法,无法调用到方法就会报错
      c、尽量提供精确匹配
    不符合方法重载 :
//不符合方法重载的
//当方法名和参数列表相同而返回值不同时,编译报错
public void add(int i){}
public int add(int i){return 0;}

//当方法名和参数列表相同而修饰符和返回值不同时,编译报错
private void add(){}
public int add(){return 0;}

//当方法名不相同时,不属于方法重载
public void add(){}
public void add1(){}
public int add2(int i){}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

符合方法重载 :方法名相同,参数列表不同;方法重载与返回值类型和修饰符无关

//符合方法重载
//方法名相同,参数列表不同;方法重载与返回值类型和修饰符无关
public void add(){}
public void add(int i){}
public void add(double i, int j){}
public double add(int i, double j){return i + j;}
public int[] add(int[] arr){return arr;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

精确匹配与相对精确匹配 :如下图,若存在两个重载的 add 方法时,如在 main() 方法中调用 add 方法,并传入两个 int 类型的值时,由于没有 add(int i,int j)方法进行精确匹配,所以进行相对匹配;由于 int 类型可以提升为 double 类型,所以会同时匹配到下面两个方法,就会编译错误
相对匹配和精确匹配

6. 方法传值 :
  a、当实参是基本数据类型时,传递值就是值得拷贝
  b、当实参是引用数据类型时,传递就是地址值的拷贝;当根据拷贝的地址值可以找到原堆内存,那么所做的改变就会有影响;如果没有找到,则不会有影响
7. 形参和实参
  形参是指定义方法时,参数列表中的参数;
  实参是指在调用方法时,所传入的实际数据;
  形参时局部变量,作用域在方法体内,出了方法后不可见;形参可以用 final 修饰,被 final 修饰后的形参被赋初始值后,值就不可改变

案例一 :

public static void main(String[] args) {
    int[] arr1 = {1,2,3,4,5};
    System.out.println(arr);
    change01(arr1);
    System.out.println(Arrays.toString(arr1));
}

public static void change01(int[] arr){
    arr = new int[3];
    System.out.println(arr);
    arr[0] = 10;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

   结果 :

实参数组地址值 : [I@45ee12a7
形参数组地址值 : [I@330bedb4
[1, 2, 3, 4, 5]
  • 1
  • 2
  • 3

   原因 :当实参是引用数据类型时,传递就是地址值的拷贝;
      当调用 change01(arr) 方法时,将地址值拷贝给形参,执行 arr = new int[3]; 时,将新地址值赋给形参 arr;当执行 arr[0]=10; 时,将具有新地址形参 arr 的第一个数改为 10,而新地址并不指向原地址,所以原地址中的内容不会有影响;所以 main() 方法里 arr 数组地址值所指向的原堆内存不受影响,即 arr 里的值不会改变

   案例二 :

public static void main(String[] args) {
    int[] arr2 = {1,2,3,4,5};
    System.out.println(arr);
    change02(arr2);
    System.out.println(Arrays.toString(arr2));
}

public static void change02(int[] arr){
	System.out.println(arr);
    arr[0] = 10;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

   结果 :

实参数组地址值 : [I@45ee12a7
形参数组地址值 : [I@45ee12a7
[10, 2, 3, 4, 5]
  • 1
  • 2
  • 3

   原因 :当实参是引用数据类型时,传递就是地址值的拷贝;
      当调用 change02(arr) 方法时,将地址值拷贝给形参,当执行 arr[0]=10; 时,将形参 arr 的第一个数改为 10,因为形参 arr 指向的地址值能找到原堆内存,所以做出的改变会对原数组内容有影响; main() 方法里 arr 数组内容被改变