关于java的方法及定义

我们在之前的文章中介绍了java的流程控制等内容,本篇文章,我们要介绍一下java中的方法,这个是非常关键的😀!

什么是方法

我们用之前我们最常见的System.out.println(); 来举例。

System是类,out是对象(我们后期会详细说明对象的概念)println();就是方法。

  • java的方法就是语句的集合,一些语句在一起执行一个功能。
public class Demo
{
    //main方法
    public static void main(String[] args)
    {
        System.out.println("Hello,World!");//执行了输出Hello,World!
    }
}
  • 方法是解决一类问题的步骤的有序组合。
  • 方法包含在类或对象里。(用我们之前学习过的Scanner举例)
import java.util.Scanner;

public class Demo
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        
        scanner.close();//close就是创建对象后,包含于Scanner这个类中,所以可以使用。

    }
}
  • 如果创建一个对象,或者这个方法在类里面,可以用. 点出里面可以使用的方法。
  • 方法在程序中被创建,在其他的地方被引用。

设计方法的原则

  • 方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。比如以后在工作中,别人写了个方法,需要改动,如果一个方法中实现很多功能并且引用的地方很多的话,是不好轻易改动的,所以一个方法中写一个功能,这样改动起来也是很舒适的😎
  • 方法的命名规则,我们在以前的标识符文章中谈到过,要首字母小写,然后遵循驼峰原则,例如:addNumber。

方法的定义

java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段一个方法包含以下语法,首先来介绍一下方法的结构,然后逐一介绍一下每个部分的作用。

修饰符 + 返回值类型 +方法名(参数类型 参数名)
{
	...
    方法体
    ...
    return 返回值;
}
  • 方法包含一个方法头和一个方法体。下面是一个方法的所有部分
    1、修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型(访问类型目前我们只见到了public,是公用类型,我们以后的文章中会介绍更多的访问类型)。
    2、返回值类型:方法可能会返回值。returnValueTvpe 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void,比如,返回int,就填int,没有返回值就写void。
    3、方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
    4、参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
    5、形参和实参:形参在方法被调用时用于接收外界输入的数据。实参是调用方法的时候,传递的实际参数。
    6、方法体:方法体包含具体的语句,定义该方法的功能。

我们了解完基本的方法结构以后,要用代码去演示一下,光看文字是不能更好的理解,去代码中看的更清晰。

我们来定义一个加法,然后调用🤔

public class Demo
{
    //main方法
    public static void main(String[] args)
    {
        int sum=add(1,2);//实参
        System.out.println(sum);
    }
    
    //加法
    //修饰符  返回值类型 方法名 参数类型 参数名(可多个)
    public static int add(int num1,int num2)//形参
    {
        return num1+num2;//返回值
    }
}

我们运行一下上面的代码,可以看到一下内容

3
    
进程结束....

我们可以看到,定义方法的时候,用到了static修饰符,这里是为了方便调用,所以用了静态。

我们也可以看到,传的实际参数是1和2,形参是方法中定义的参数,通过把实际参数传递给方法,方法执行内容,返回一个值。

下面来了解一下没有返回值的方法,正好用我们以前文章中的for循环找数,我们将他封装成一个方法。

关于java循环结构for

我们就把用for循环输出1-300之间能被5整除的数,并且每行输出3个,这个题目封装成方法😎

public class Demo {
    public static void main(String[] args)
    {
        test();
    }

    //不用返回值,所以我们用void,可以直接调用输出。
    public static void test()
    {
        for (int i = 1; i < 300; i++)
        {
            if (i%5==0)
            {
                System.out.print(i+"\t");
            }
            if (i%15==0)
            {
                System.out.println();
            }
        }
    }
}

我们运行一下上面的代码,可以看到,输出的内容和我们不封装的时候输出的内容是一样的。

5	10	15	
20	25	30	
35	40	45	
50	55	60	
65	70	75	
80	85	90	
95	100	105	
110	115	120	
125	130	135	
140	145	150	
155	160	165	
170	175	180	
185	190	195	
200	205	210	
215	220	225	
230	235	240	
245	250	255	
260	265	270	
275	280	285	
290	295	

进程结束.....

在main方法中,其实越简洁越好,所以把一些代码封装成方法,也是一个好的程序猿要做的事情。

方法的调用

  • 调用方法:对象名.方法名(实参)
  • java 支持两种调用方法的方式,根据方法是否返回值来选择。
  • 一种是像上面说的有返回值,方法会被当成一个值。
int sum=add(1,2);
  • 另一种是没有返回值,返回值是void,调用就是一条语句。
test();

我们再写出一个两个数比大小的方法:

public class Test {
    public static void main(String[] args)
    {
        int sum=max(88,99);
        System.out.println(sum);
    }

    //比大小
    public static int max(int num1,int num2)
    {
        int result=0;
        if (num1==num2)
        {
            System.out.println("两个数相等不能比较");
            return 0;
        }
        if (num1>num2)
        {
            result =num1;
        }
        else
        {
            result =num2;
        }
        return result;
    }

}

这里我们可以发现,如果方法里面有判断的话,不能每个都去return,我们可以定义一个变量,这个变量初始化的时候可以是任意值,因为我们传实参的时候,会把这个值覆盖掉,例如我们上面代码中的result。我们把值先赋给result,然后最后返回result就可以了。

我们还可以发现,如果两个数相等的时候,不能做比较,就无法输出result,所以写了一个return 0,这里拓展一下,return既可以是程序返回,也可以是终止方法。遇到了就不再向下进行了,我们实参改为相同的数字,运行一下就会出现下面内容。

两个数相等不能比较
0

进程结束.....

一个方法中,我们如果出现了判断,一定要锻炼自己的逻辑完整性,考虑到各种会发生的情况😀。

值传递和引用传递

  • 值传递:是指在调用方法时,将实际参数复制一份传递到方法中,这样在方法中如果对形式参数进行修改,就不会影响到实际参数,java就是值传递。
public class Demo
{
    //main方法
    public static void main(String[] args)
    {
        int sum=add(1,2);//实参
        System.out.println(sum);
    }
    
    //加法
    //修饰符  返回值类型 方法名 参数类型 参数名(可多个)
    public static int add(int num1,int num2)//形参
    {
        return num1+num2;//返回值
    }
}

我们将方法中的num1和num2换成别的参数名,对上面调用的运算结果是没有影响的。

  • 引用传递:是指在调用方法时,将实际参数的地址传递到方法中,那么在方法中对形式参数进行修改,将会影响到实际参数。这个涉及到对象,我们后续了解到对象的时候会详细的说明。