Java自学第六课值方法成员——自学笔记

方法即行为,方法的声明如下:
【public或者protected或者private】 【static】 【final】 【abstract】 【native】 【synchronized】 【Type{,Type}】返回类型 方法名(【参数列表】)【throws exceptionList】{
方法体
}
方法体中可以声明在该方法内使用的局部变量,这些变量只在该方法内部有效,所以声明变量时不能给他就修饰符,如果非要加修饰符的话只能是fina的。

  1. public或者protected或者private是访问权限修饰符;static说名这是一个类的方法;final说明这一个终结方法,不能被子类重写;abstract说明这个方法是一个抽象方法;native用来将java代码和其他语言的代码集成起来synchronized用来控制多个并发线程对共享数据的访问
  2. 方法名前面的类型是方法返回值的类型,返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型是void。
  3. 参数的类型可以是简单数据类型,也可以是引用类型(数组、类或接口)。也可以没有参数,参数传递分为值传递和引用传递。
  4. 方法中声明的局部变量只在方法内部有效
  5. throws exceptionList用来处理异常

方法分为实例方法和静态方法,和变量一样。

1.实例方法

实例方法表示对象的行为,在声明是前面不加static修饰符,这种方法依赖于对象,使用时需要发送给一个类实例。调用方法通过:
实例(对象).方法名(【参数】);
在不同的类中声明了同名,参数个数和类型相同的方法时,系统会根据接受者对象的类型来找到对应类的方法。也可以说是对象和方法绑定在一起。

2.类方法(静态方法)

类方法也称为静态方法,在方法声明前要加static,这种方法表示该类的实例共有的行为。调用这种方法通过:
类名.方法名();

当然也通过 实例名.方法名();
但是这样需要实例化对象,代码不清晰。花费大。

3.可变长参数

从Java5开始,在方法中可以使用可变长参数,可变长参数使用省略号表示,其实质是数组,例如,String…s表示String[] s
对于可变长参数的方法,传递给可变长参数的实际参数可以是多个对象,也可以是一个对象或者没有对象。参数也可以是基本数据类型。

可变长参数意思是传递参数的长度也就是参数的个数是可以变化的,在没有可变长参数的时候如果要实现参数个数不同时都能响应的话,需要写多个、参数个数不同的方法,但这样代码太多,太麻烦。

1.用数组包裹实参
用数组包裹实参的做法分为三步:首先,为这个方法定义一个数组型的参数;然后调用时,生成一个包含所有要传递的实参的数组;最后,把这个数组作为一个参数传过去。
这种方法可以解决可变长参数的问题,但调用不够简单。

2.可变长参数的方法
Java5新增了可变长参数的方法后,调用显得简单
用以下代码来说明以下

public class LianXi{
    public static void main(String[] args) {
        System.out.println(getMaxNumber());//不传入任何参数
        System.out.println(getMaxNumber(1, 2, 3, 4));//传入可变参数
        System.out.println(getMaxNumber(new int[]{4, 3, 24, 6}));//传入数组,因为可变参数的实现就是用数组
        System.out.println(getLowerNumberCounts(4, new int[]{2, 3, 5, 7}));
    }


    /**
     * 获取可变长度参数中的最大值
     *
     * @param nums 可变参数列表
     * @return
     */
    public static int getMaxNumber(int... nums) { //在类型后面加... 即可定义可变参数

        //如果可变参数长度为0
        if (nums.length == 0) {
            System.out.println("没有传入参数");
            return -1;
        } else {
            int max = nums[0];
            for (int i : nums) {
                max = (i > max) ? i : max;
            }
            return max;
        }
    }

    /**
     * 获取可变参数列表中比某个数小的个数
     *
     * @param number 作为基准比较的数
     * @param nums   可变长参数列表
     * @return
     */
    public static int getLowerNumberCounts(int number, int... nums) { //如果一个方法中不止一个参数,那么可变参数列表必须放到最后
        int count = 0;
        for (int i : nums) {
            if (i < number)
                count++;
        }
        return count;
    }
}
/*没有传入参数
-1
4
24
2
*/

从结果中可以看出当调用方法没有传递参数时,程序不会报错,然而如果我们调用的方法不是一个可变长参数的方法,而是调用的一个需要传参数的普通方法,那么如果我们不传参数,程序在写的过程中就会报错。这是为什么呢?

还有传递数组的,为什么数组作为参数的时候也可以。
这是因为,可变长参数的实质就是把参数包裹成数组,然后作为参数传递。没有参数的时候,也就是数组中没有元素,但是数组还在,数组作为参数的时候更是可以了,接收后,操作元素就像操作数组中 的元素一样。

需要注意的是,在一个方法中,可变长参数只能有一个,而且该可变长参数必须是最后一个。

最后要说的是,对象作为参数的时候,传递的是引用,即实参是引用,形参是引用变脸,在方法中使用形参变量访问就和方法外部一样

猜你喜欢

转载自blog.csdn.net/weixin_42477031/article/details/83038664