天天看点

Java入门:Day05—方法Day05—方法

Day05—方法

1、成员方法

在程序开发中重复代码的定义,为了方便这些重复的代码,通过方法来保存,实现重复地调用。

访问修饰符  返回值数据类型  方法名(参数列表(数据类型 变量名1,数据类型 变量名2……){
        方法体(程序)
        [return;]  //带返回值方法定义(定义时return后面的返回值与方法定义时的数据类型要匹配)
    }
           

2、方法调用格式

(1)不带参方法的定义和调用
public class Test{
        public static void main(String[] args){
            //调用方法
            isNumber();
        }
        //定义方法
        public static void isNumber(){
             int num = 10;
             //判断10是否为偶数
             if(num % 2 ==0){
                 System.out.println("true");
             }else{
                 System.out.println("false");
             }
        }
}
           
(2)带参方法的定义和调用
public class Test{
        public static void main(String[] args){
            //常量值的调用方法
            isNumber(10);
            //变量值的调用方法
            int num = 9;
            isNumber(num);
        }
        //定义带一个参数的方法
        public static void isNumber(int num){
             //判断是否为偶数
             if(num % 2 ==0){
                 System.out.println("true");
             }else{
                 System.out.println("false");
             }
        }
    }
           
(3)带返回值方法的定义和调用
public class Test{
        public static void main(String[] args){
            //1、方法名(参数)——一般没有意义,不推荐
            isNumber(10);
            //2、数据类型 变量名 = 方法名(参数);
            boolean flag = isNumber(10); //判断完成后相当于 boolean flag = true
            System.out.print(flag);
            
            //System.out.print(isNumber(10));  不要变量接收,直接输出,一般不推荐
        }
        //定义带返回值的方法
        public static void isNumber(int num){
             //判断是否为偶数
             if(num % 2 ==0){
                 return true;
             }else{
                 return false;
             }
        }
    }
           
(4)方法特点
①方法必须先定义再调用,否则程序将报错。

②方法调用时,参数数量与类型必须与方法定义中的设置相匹配,否则程序将报错。

③方法不能嵌套定义。

④void表示无返回值,可以省略return,也可以单独书写return,后面不加数据。

⑤调用方法时,void类型的方法直接调用即可;非void类型的方法,推荐使用变量接收调用。
           

3、形参和实参

(1)形参

方法定义中的参数,等同于变量定义格式。

(2)实参:

方法调用中的参数,等同于使用变量或常量。

4、可变参数

public int method(int...data){ //调用时可以直接传递一个数组
            int sum = 0;
            for (int i = 0; i < data.length; i++) {
               sum += data[i];
            }
            return sum;
     }

    public int method(String name,int age,int...data){ //在使用中,前两个参数必须传递,可变的参数根据需求进行传递
            int sum = 0;
            for (int i = 0; i < data.length; i++) {
                sum += data[i];
            }
            return sum;
    }
           

5、方法重载

(1)定义

方法名重用的一种技术形式。 一个方法不能满足要求,需要定义多个不同名称的方法。

(2)特点

在同一类中,方法名相同,参数的类型或个数不同,跟返回值没有关系。

public class Test{
        public static void main(String[] args){
            int result1 = sum(10,20);
            System.out.print(result1);
            
            int result2 = sum(10,20,30);
            System.out.print(result2);
            
            double result3 = sum(10.0,20.0,30.5);
            System.out.print(result3);
        }
        //方法重载
    	public static int sum(int x,int y){
            return x + y;
        }
    
        public static int sum(int x,int y,int z){
            return x + y + z;
        }
    
        public static double sum(double x,double y,double z){  //doulbe --->int
            return x + y + z;
        }
     }
           

6、方法的参数传递

(1)方法参数传递(基本数据类型)

形参的改变,不影响实参的值

public class Test3 {
        public static void main(String[] args) {
            int num = 100;
            System.out.println("调用change方法前:"+num);
            change(num);	//形参的改变,不影响实参的值
            System.out.println("调用change方法后:"+num);
        }
        public static void change(int num){
            num = 200;
        }
    }
           
(2)方法参数传递(引用数据类型)

形参的改变,影响实参的值

public static void main(String[] args) {
            int[] arr = {10,20,30};
            System.out.println("调用change方法前:"+arr[1]);
            change(arr);	//形参的改变,不影响实参的值
            System.out.println("调用change方法后:"+arr[1]);
    }
    public static void change(int[] arr){
            arr[1] = 200;
    }
           

7、方法的递归

是一种特殊方法嵌套调用形式,自己调用自己。是一层层带入,再一层层带出。

注意:

①递归调用必须有结束条件;

②每次调用的时候都需要改变传递的参数内容

③递归方法影响程序的性能,使用递推方式   
           
//计算阶乘  1! + 2!  + 3! + 4! + 5!
public class TestRecursion {
    public int factorial(int num) { //实现阶乘的方法
        if (num == 1) {
            return 1;
        }
        return num * factorial(num - 1);
    }

    public int sum(int num){
        if(num == 1){
            return 1;
        }
        return factorial(num) + sum(num - 1); //5! + sum(4)  4! + sum(3)
    }

    public static void main(String[] args) {
        TestRecursion testRecursion = new TestRecursion();
        System.out.println(testRecursion.sum(5)); //153
    }
}
           

8、构造方法

(1)定义

是一种特殊的方法,与类名相同,没有返回值 ,不能写void,写了void就变成普通方法了。

(2)作用

创建对象时给成员属性进行初始化。

访问修饰符 类名(参数列表){
        构造方法体;
    }
           
注意:

①构造方法在创建对象时被自动调用,当没有自己定义构造方法时,编译器会提供一个无参构造方法。

②一个类中至少要有一个构造方法。

③当定义了构造方法时,编译器不会再提供一个默认的无参数构造方法。