2020/6/30 JAVA方法的重载和自定义数据类型

一、引用数据类型分类

  第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。

  第二种,我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我们使用。

二、自定义数据类型概述

  我们在Java中,将现实生活中的事物抽象成了代码。这时,我们可以使用自定义的数据类型(类)来描述(映射)现实生活中的事物。

  类,它是引用数据类型,与之前学习的所有引用数据类型相同,自定义类也是一种数据类型。

  只是自定义类型并非Java为我们预先提供好的类型,而是我们自己定义的一种引用数据类型用来描述一个事物。

 

1、类的定义格式

创建java文件,与类名相同  
public class 类名{
    数据类型  属性名称1;
    数据类型  属性名称2;
    …
}

例:

复制代码
public class Phone {
    /*
     * 属性
     */
    String brand;// 品牌型号
    String color;// 颜色
    double size; // 尺寸大小
}
复制代码

2、类的使用格式

  Phone类定义好后,我们就可以使用这个类了,使用方式和使用引用数据类型Scanner类相似。格式如下:

  导包:我们将所有的类放到同一个文件夹下,可以避免导包。

  创建对象:数据类型  变量名 = new 数据类型();

  调用方法:目前我们定义的自定义类不涉及方法,只是属性(自定义类中的方法部分在面向对象部分讲解)

  访问属性:变量名.属性 (这是当前的方式,后期会采取调用方法的方式替代掉直接访问的方式来完成对属性的访问。)

三、方法的重载

  Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。

  下面的三个方法互为重载关系

  l public static int add(int x,int y) {逻辑} //两个整数加法

  l public static int add(int x,int y,int z) {逻辑} //三个整数加法

  l public static int add(double x,double y) {逻辑} //两个小数加法

复制代码
public class MethodDemo03 {
    public static void main(String[] args) {
        // 下面是针对求和方法的调用
        int sum1 = add(1, 2);
        int sum2 = add(1, 2, 3);
        double sum3 = add(1.2, 2.3);
        // 下面的代码是打印求和的结果
        System.out.println("sum1=" + sum1);
        System.out.println("sum2=" + sum2);
        System.out.println("sum3=" + sum3);
    }

    // 下面的方法实现了两个整数相加
    public static int add(int x, int y) {
        return x + y;
    }
    // 下面的方法实现了三个整数相加
    public static int add(int x, int y, int z) {
        return x + y + z;
    }
    // 下面的方法实现了两个小数相加
    public static double add(double x, double y) {
        return x + y;
    }
}
复制代码

  运行结果:

 

 

   上述代码中定义了三个同名的add()方法,它们的参数个数或类型不同,从而形成了方法的重载。

  在main()方法中调用add()方法时,通过传入不同的参数便可以确定调用哪个重载的方法,如add(1,2)调用的是两个整数求和的方法。

  值得注意的是,方法的重载与返回值类型无关,它只有两个条件,一是方法名相同,二是参数个数或参数类型不相同。

重载的注意事项

   重载方法参数必须不同:

    参数个数不同,如method(int x)与method(int x,int y)不同

    参数类型不同,如method(int x)与method(double x)不同g

    参数顺序不同,如method(int x,double y)与method(double x,int y)不同

   重载只与方法名与参数类型相关与返回值无关

    如void method(int x)与int method(int y)不是方法重载,不能同时存在

   重载与具体的变量标识符无关

    如method(int x)与method(int y)不是方法重载,不能同时存在

参数传递

  在这里,定义方法时,参数列表中的变量,我们称为形式参数  调用方法时,传入给方法的数值,我们称为实际参数

复制代码
public class ArgumentsDemo01 {
    public static void main(String[] args) {
        int a=5;
        int b=10;
        change(a, b);//调用方法时,传入的数值称为实际参数
        System.out.println("a=" + a);
        System.out.println("b=" + b);
    }

    public static void change(int a, int b){//方法中指定的多个参数称为形式参数
        a=200;
        b=500;
    }
}
复制代码

  运行结果

 

 

   另一段代码:

复制代码
public class ArgumentsDemo02 {
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3 };
        change(arr);// 调用方法时,传入的数值称为实际参数
        
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static void change(int[] arr) {// 方法中指定的多个参数称为形式参数
        for (int i = 0; i < arr.length; i++) {
            arr[i] *= 2;
        }
    }
}    
复制代码

  运行结果

 

 

  参数传递图解与结论

 

 

    当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响

    当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响

posted @ 2020-06-30 18:25  企鹅22  阅读(241)  评论(0编辑  收藏  举报