首页 > 编程语言 >Java 方法

Java 方法

时间:2022-12-26 01:22:41浏览次数:35  
标签:调用 Java int 参数 return 方法 public

方法的由来

如果需要经常做某一操作,则需要重复写类似的代码,比如查找某个数。此外,某些复杂的操作需要分成多个步骤进行,以便理解和维护。

为此,引入函数的概念,以减少重复代码,分解复杂操作。

与数学中的函数类似,Java 函数又称方法,有方法名,参数(0或多个,类比 x ),结果(0或1个,类比 y)。

方法的基本结构

修饰符 返回值类型 函数名(参数类型 参数名, ...) {
    // 操作
    return 返回值;
}
public static void test(int a){
    System.out.println(a);
}
  • 修饰符

可选,主要有权限修饰符、static、final、abstract 等。

  • 返回值类型

如果没有返回值,返回值类型设为 void;

如果返回值类型不为 void,则必须返回,且 return 返回值的数据类型和声明的返回值类型必须一致。

  • 参数

可选,也叫形参,由参数类型和参数名组成,可以看成作用域在方法内的局部变量,负责接收外部参数,调用方法时传递参数实际就是给形参赋值。

可变参数:个数不定的参数,必须是参数列表的最后一个,一个方法内也只能有一个可变长度参数。语法是在数据类型后面加三个点 “... ”,实际上会转为数组。

public static int getSum(int... a){
	// todo
	return 0;
}
  • return

return 用于显示结束函数执行,返回调用方。

可选,返回值类型为 void 时,return 不是必需的,没有 return 时,执行到方法结尾自动返回调用方。

return 可以用于方法内的任何地方,可以结合选择结构来提前结束方法,返回调用方。

public static void test(){
  int a = 1;
  int b = 2;
  if(a == b){
    return;
  }
  System.out.println("a 不等于 b");
}

方法重载

同一个类中,方法名相同,参数签名不同,称为方法重载,与返回值无关。

参数签名不同指:参数类型不同 或 参数个数不同 或 参数类型顺序不同。

public class Math {
   public static double max(double a, double b)
   public static float max(float a, float b)
   public static int max(int a, int b)
   public static long max(long a, long b)
}

方法调用匹配

调用方法的时候,参数传递实际上是给参数赋值,传递的数据需要与函数声明的参数数据类型匹配,编译器会自动进行类型转换,寻找最匹配的方法。

char a = 'a';
char b = 'b';
System.out.println(Math.max(a, b));

方法调用的基本原理

程序从 main 方法开始执行,方法调用可以看作无条件跳转,跳转到方法对应的指令处开始执行,方法执行完毕或者遇到 return 语句的时候,再无条件跳转回调用处,执行方法调用后的下一条指令。

计算机系统使用栈内存来存放方法调用过程中需要的数据,包括参数、返回地址以及方法内定义的局部变量,返回值不太一样,可以简单认为内存中存在一个专门的 返回值存储器

每调用一次方法,都会将相关方法的数据入栈,调用结束出栈,main 方法的数据在栈的最下面。

public class Sum {
  
  public static void main(String[] args){
    int d = Sum.sum(1,2);
    System.out.println(d);
  }
  
  public static int sum(int a,int b){
    int c = a + b;
    return c;
  }
}

image

如上,程序从 main 方法开始,main 方法入栈,main 方法有一个 args 参数用来接收用户输入,然后定义了一个局部变量 int d,接收 sum 方法的返回值。

调用 sum 方法,sum 方法入栈,传入参数 1、2 以及返回地址,sum 方法中定义了一个局部变量 int c,存储参数 a + b 计算的结果,最后 return 返回。

在返回之前,返回值暂时保存到了专门的返回值存储器中。

在返回之后,指令指示器跳转到返回地址处,sum 方法出栈,然后继续往下执行 main 方法。

递归方法

自己调用自己的方法叫递归方法。

递归方法自己调用自己,直到遇到终止条件才会 return 返回,而方法调用主要是通过栈来存储相关数据,每调用一次方法就会在栈内存中开辟一块空间,当递归调用次数过多时,可能导致内存溢出,一般不建议使用。

public static int factorial(int n){
    if(n == 1){
        return 1;
    }
    return n * factorial(n-1);
}
/**
 * 汉诺塔问题
 */
public class HanNuoTa {

    public static void run(int num,char a,char b,char c){
        if(num < 1) {
            System.out.println("请输入正整数");
        } else if(num == 1) {
            System.out.println(a + " --> " + c);
            return;
        } else {
            run(num - 1, a, c, b);
            System.out.println(a + " --> " + c);
            run(num - 1, b, a, c);
        }
    }

    public static void main(String[] args) {
        run(3,'A','B','C');
    }
}

标签:调用,Java,int,参数,return,方法,public
From: https://www.cnblogs.com/knhap/p/17004897.html

相关文章

  • 企业级数据中台的建设方法、架构和技术栈
    ​多数企业都意识到数据的重要性,都希望利用数据来驱动业务发展。但经常会听到这样一句话:“我们企业现在业务都还没做起来,连数据都没有,还不到考虑数据利用的时候。”这句话在......
  • Java开发学习(四十七)----MyBatisPlus删除语句之多记录操作
    1、多记录操作先来看下问题:之前添加了很多商品到购物车,过了几天发现这些东西又不想要了,该怎么办呢?很简单删除掉,但是一个个删除的话还是比较慢和费事的,所以一般会给用......
  • Java编程思想14
    第十九章:枚举类型关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。enum的基本特性  我们......
  • Java编程思想15
    使用EnumSet代替标志  Set是一种集合,只能向其中添加不重复的对象。当然,enum也要求其成员都是唯一的,所以enum看起来也具有集合的行为。不过,由于不能从enum中删除或添加元......
  • Java编程思想16
    第二十章:注解注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用某些数据。定义注释packageannotations;impor......
  • bat执行java程序的脚本解析
     使用java执行带Package的class文件javapackage1.package2.className 或java-cp. package1.package2.className-cp将当前路径设置到classpath,windows默认情况下会......
  • Eclipse启动后一直Initializing Java Tooling (1%)
     问题症状:工作中eclipse崩溃,再次启动后cpu占用99%,状态栏一直显示Initializing JavaTooling:(1%)。 解决方案:删除\workspace\.metadata\.plugins\org.eclipse.core.reso......
  • Java 之 CAS 原理及实现是怎样的?
    面试官:今天我们来聊聊CAS吧?你对CAS了解多少?候选者:好,CAS的全称为compareandswap,比较并交换候选者:虽然翻译过来是「比较并交换」,但它是一个原子性的操作,对应到CPU指令......
  • java 学习
    javacJunior.javajavaJunior  Employee.java//importjava.io.*;//下面的命令行将会命令编译器载入java_installation/java/io路径下的所有类publicclass......
  • SAP UI5 应用 FlexBox 控件 growFactor 的使用方法
    使用FlexBoxLayout布局方式,开发人员可以让浏览器处理元素的分布。这确保应用的元素始终填充沿主轴的可用空间。为了达到这个目的,需要为FlexItem设置一个弹性系数(......