一.方法

1.方法的介绍与定义

  Java中的方法,即函数(文中我们统称之为“方法”),是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能。而且,同时还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值传入子程序,供计算机处理;所谓出口,就是指函数的返回值,在程序段执行之后,由此返回值将值传回给调用它的程序。

/*
1.简单的说:方法就是完成特定功能的代码块
    在很多语言里面都有函数的定义
    函数在Java中被称为方法
*/

方法就是完成特定功能的代码块,为了避免一些重复的代码

2.方法的格式

/*
2.格式:
    修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
                函数体;
                return 返回值;
        }
*/

3.方法格式的解释

  1. 修饰符: 目前记住 public static
  2. 返回值类型: 用于限定返回值的数据类型
  3. 方法名: 一个名字,为了方便我们调用方法
  4. 参数类型: 用于接收调用方法时传入的数据的类型
  5. 参数名: 用于接收调用方法时传入的数据的变量
  6. 方法体: 完成功能的代码
  7. return: 结束方法,把返回值带给调用者

4.简单的示例代码(有返回值)

package com.it_01;
/*
 * 需求:求两个数的和
 * */

public class MethonDemo {
    public static void main(String[] args) {
        //1.单独调用
        //sum(10,20);
        
        //2.输出调用
        //System.out.println(sum(10,20));
        
        //3.赋值调用
        int result = sum(10,20);
        //4.可以对result进行操作
        //result += 10;
        System.out.println(result);
        
    }
    
    public static int sum(int a, int b ) {
        //1.返回方式一
        return a+b;
        
        //2.返回方式二
//        int c = a+b;
//        return c;
        
        
    }
    
}

5.几个简单的小练习

1.键盘录入两个数据,返回两个数中的较大值

package com.it_01;
import java.util.Scanner;;
/*
 *     键盘录入两个数据,返回两个数中的较大值
 * */

public class MethonDemo02 {
    public static void main(String[] args) {
        
        //创建一个对象
        Scanner sc = new Scanner(System.in);
        
        //接受数据
        System.out.println("请输入第一个数字:");
        int a = sc.nextInt();
        
        System.out.println("请输入第二个数字:");
        int b = sc.nextInt();
        
        int max = getMax(a, b);
        
        System.out.println("max:"+max);
        
    }
    
    /*
     * 返回两个数中的较大值
     * 
     * 两个明确:
     *         返回值类型:int
     *         参数列表:int a,int b
     */
    
    //求出输入的两个数中较大数据的函数
    public static int getMax(int a,int b) {
        if(a>b) {
            return a;
        }else {
            return b;
        }    
    }
            
}

2.键盘录入两个数据,比较两个数是否相等

package com.it_01;

import java.util.Scanner;

/*
 * 需求:
 *     键盘录入两个数据,比较两个数是否相等
 * */

public class MethonDemo03 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        
        //接收数据
        System.out.println("请输入第一个数据:");
        int x = sc.nextInt();
        
        System.out.println("请输入第二个数据:");
        int y = sc.nextInt();
        
        //调用方法
        boolean b = compare(x,y);
        
        //输出结果
        System.out.println("b:"+b);
        
    }
    
    /*
     * 比较两个数是否相等
     * 
     * 两个明确:
     *         返回值类型:boolean
     *         参数列表:int a,int b
     */
    public static boolean compare(int a,int b) {
        if(a == b){
            return true;
        }else {
            return false;
        }
    }

}

3.键盘录入三个数据,返回三个数中的最大值

package com.it_01;

import java.util.Scanner;
/*
 * 键盘录入三个数据,返回三个数中的最大值
 * */

public class MethonDemo04 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        
        //接收数据
        System.out.println("请输入第一个数据:");
        int a = sc.nextInt();
        
        System.out.println("请输入第二个数据:");
        int b = sc.nextInt();
        
        System.out.println("请输入第三个数据:");
        int c = sc.nextInt();
        
        //调用方法
        int max = getMax(a,b,c);
        
        //输出结果
        System.out.println("max:"+max);
    }
    /*
     * 返回三个数中的最大值
     * 
     * 两个明确:
     *         返回值类型:int
     *         参数列表:int a,int b,int c
     */
    public static int getMax(int a,int b,int c) {
        //1.利用普通的方法进行比较
//        if(a > b) {
//            if(a > c) {
//                return a;
//            }else {
//                return c;
//            }
//        }else {
//            if(b > c) {
//                return b;
//            }else {
//                return c;
//            }
//        }
        //2.新建一个数组,把数据都放到数组中,然后在进行比较
        
        //定义一个数组,把数据方法数组中来进行比较
        int [] arr = {a,b,c};
        
        //选择一个参照物
        int max = a;
        for(int i = 0;i<arr.length;i++) {
            if(max<arr[i]) {
                max = arr[i];
            }
            
        }
        return max;
        
    }
        
}

6.没有返回值的方法

1.示例代码一

package com.it_02;
/*
 * 在控制台打印出10遍HelloWorld
 * */

public class MethonDemo {
    public static void main(String[] args) {
        printHelloWorld();
//        System.out.println(printHelloWorld());
        
    }
    
    //在控制台打印出相关的helloWorld
    public static void printHelloWorld() {
        for(int i = 0;i<10;i++) {
            System.out.println("HelloWorld");
        }
    }
}

2.示例代码二:

package com.it_02;
/*
 * 写一个方法,传递一个整数(大于1),在控制台打印1到该数据的值
 * */

import java.util.Scanner;

public class MethonDemo02 {
    public static void main(String[] args) {
        //创建一个对象
        
        Scanner sc = new Scanner(System.in);
        
        //接收数据
        System.out.println("请输入一个数字:");
        int a = sc.nextInt();
        
        printNum(a);
        
    }
    
    public static void printNum(int a) {
        for(int i = 1;i<=a;i++) {
            System.out.println(i);
            
        }
        
        
        
    }
    

}

3.示例代码三:

package com.it_02;
/*
 * 写一个方法,把所有的水仙花数打印在控制台
 * */

public class MethonDemo03 {
    public static void main(String[] args) {
        printNarcissisticNumber();
        
    }
    
    public static void printNarcissisticNumber() {
        for(int i = 100;i<=1000;i++) {
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/100%10;
            if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i) {
                System.out.println(i);
            }
            
            
        }
        
    }
}

二.方法的重载

java中方法重载必须满足的条件:

/*
1.在同一个类中
2.方法名必须相同
3.方法的参数类不同   (和返回值类型没有关系)
    ps:方法的参数类不同包括:
    (1).参数的个数不同
    (2).参数的类型不同
    (3).参数的顺序不同(这个指的是参数存在多种类型的数据类型,如果只存在同一种类型的数据,则不适用) 
*/

示例代码一:

package com.it_03;
/*
 * 方法重载:在同一个类中,出现了方法名相同的情况。
 * 方法重载的特点:
 *         方法名相同,参数列表不同。与返回值无关。
 *         参数列表不同:
 *             参数的个数不同
 *             参数对应的数据类型不同
 *             参数的顺序不同(参数中存在多种数据类型的时候)
 * 
 * 注意:
 *         在调用方法的时候,java虚拟机会通过参数列表的不同来区分同名的方法。
 */

public class MethonDemo {
    public static void main(String[] args) {
        //定义变量
        int a = 10;
        int b = 20;
        
        //求和方法
        int result = sum(a,b);
//        System.out.println("result:"+result);
        
        //求和方法
        float e = 100;
        float f = 300;
        float result2 = sum(e,f);
//        System.out.println("result2:"+result2);
        
        float result4 = sum(e,a);
        System.out.println("result4:"+result4);
        
        
        //定义变量
        int c = 30;
        //求和方法
        int result3 = sum(a,b,c);
//        System.out.println("result3:"+result3);
        
    }
    
    //定义两个数的求和方法
    public static int sum(int a, int b) {
        return a+b;
        
    }
    
    //定义两个数的的求和方法(float)
    public static float sum(float a,float b) {
        return a+b;
    }
    
    //
    public static float sum(int a,float b) {
        System.out.println("float1");
        return a+b;
    }
    
    public static float sum(float a,int b) {
        System.out.println("float2");
        return a+b;
    }
    
    //定义三个数的求和方法
    public static int sum(int a,int b,int c) {
        return a+b+c;
    }

}

示例代码二:

package com.it_03;
/*
 * 比较两个数据是否相等。参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,并在main方法中进行测试
 */
public class MethonDemo02 {
    public static void main(String[] args) {
        //int 类型
        //System.out.println(compare(10, 20));
        
        //byte类型
        //System.out.println(compare((byte)10, (byte)20));
        
        //short类型
        //System.out.println(compare((short)10, (short)20));
        
        //long类型
        System.out.println(compare(10L, 20L));
        
    }
    
    //byte
    public static boolean compare(byte a,byte b) {
        System.out.println("byte");
        return a == b;
    }
    
    //short
    public static boolean compare(short a,short b) {
        System.out.println("short");
        return a == b;
    }
    
    //int
    public static boolean compare(int a,int b) {
        System.out.println("int");
        return a == b;
    }
    
    //long
    public static boolean compare(long a,long b) {
        System.out.println("long");
        return a == b;
    }
    
}

三.java中参数传递问题

  参数传递一般有两种,一种是“传值”(基本数据类型),另一种是“传地址值”(引用数据类型)。传值是指在调用方法时,把参数的值传递给方法,而传地址值则是给方法提供参数的地址值。Java中的参数传递方法都为传值调用。

java中的方法中的参数可以是基本数据类型和引用数据类型,我们可以这样简单的来理解:

1.当实际参数是基本数据类型的时候,形式参数的改变不影响实际参数的变化

2.当实际参数是引用数据类型的时候,形式参数的改变会影响实际参数的变化

示例代码一:(实际参数为基本数据类型的时候)

package com.it_04;
/*
 * 方法的参数如果是基本数据类型:形式参数的改变不影响实际参数。
 * 
 * 形式参数:用于接收实际参数的变量
 * 实际参数:实际参与运算的变量
 */

public class ArgsDemo {
    
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("a:"+a+",b:"+b);//a:10,b:20
        change(a,b);
        System.out.println("a:"+a+",b:"+b);// a:10,b:20
        
    }
    
    public static void change(int a,int b) {//a=10,b=20
        System.out.println("a:"+a+",b:"+b);//a:10,b:20
        a = b;//a=20
        b = a + b;//b=40
        System.out.println("a:"+a+",b:"+b);//a:20,b:40
    }
    
    
}

示例代码图解:

java  函数和类 java函数和方法_数据

 

java  函数和类 java函数和方法_System_02

 示例代码二:(引用数据类型)

package com.it_04;
/*
 * 如果参数是引用数据类型:
 *         形式参数的改变直接影响实际参数
 */
public class ArgsDemo02 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for(int x=0; x<arr.length; x++) {
            System.out.print(arr[x]+",");
        }
        System.out.println();
        change(arr);
        for(int x=0; x<arr.length; x++) {
            System.out.print(arr[x]+",");
        }
        
    }
    
    public static void change(int[] arr) {
        for(int x=0; x<arr.length; x++)
        {
            if(arr[x]%2==0)
            {
                arr[x]*=2;
            }
        }
    }
}

示例代码图解:

java  函数和类 java函数和方法_示例代码_03

java方法的几个小练习:

1.数组遍历练习

package com.it_05;
/*
 * 把遍历数组改进为方法实现,并调用方法
 */

public class ArgsDemo {
    public static void main(String[] args) {
        
        int [] arr = {1,2,3,4,5};
        printArray(arr);
        
    }
    
    //基本打印出来的格式
//    public static void printArray(int [] arr) {
//        for(int i=0;i<arr.length;i++) {
//            System.out.println(arr[i]);
//        }
//        
//    }
    
    // 把打印出来的格式变成为[1,2,3,4,5]
    public static void printArray(int [] arr) {
        System.out.print("[");
        for(int i=0;i<arr.length;i++) {
            if(i==arr.length-1) {
                System.out.print(arr[i]+"]");
            }else {
                System.out.print(arr[i]+",");
            }
        }
        
    }
    
}

2.数组求最值练习:

package com.it_05;
/*
 * 把获取数组最值改进为方法实现,并调用方法
 * 
 */

public class ArgsDemo02 {
    public static void main(String[] args) {
        int [] arr = {31,11,56,79,80,100};
        
        int max = getMax(arr);
        System.out.println("max:"+max);
        
        int min = getMin(arr);
        System.out.println("min:"+min);
        
    }
    
    // 最大值
    public static int getMax(int [] arr) {
        int max = arr[0];
        for(int i = 0;i<arr.length;i++) {
            if(max<arr[i]) {
                max=arr[i];
            }    
        }
        return max;
        
    }
    
    //最小值
    public static int getMin(int [] arr) {
        int min = arr[0];
        for(int i = 0;i<arr.length;i++) {
            if(min>arr[i]) {
                min=arr[i];
            }    
        }
        return min;
        
    }

}

3.数组求和练习

package com.it_05;

public class ArgsDemo03 {
    public static void main(String[] args) {
        int [] arr = {31,11,56,79,80,100};
        int sum =sum(arr);
        System.out.println("sum:"+sum);
        
    }
    
    public static int sum(int [] arr) {
        int sum = 0;
        for(int i = 0;i<arr.length;i++) {
            sum+=arr[i];    
        }
        return sum;    
    }

}