Java基础学习——方法

简介: 赋值调用的好处是当程序复杂时,若想调用某个方法的结果,就可以直接用一个变量来代替,便于代码的编写。同样,在将方法的结果赋值给变量后,不打印输出该变量,控制台输出也为空

前言


本文将介绍有关Java面向对象编程的知识之一:方法;其中包括方法的概念,三类方法的格式、方法的重载以及方法的内存


方法的概念


方法是程序中最小的执行单元


方法定义:将一些代码打包在一起的过程


方法调用:在定义方法以后,手动输入代码调用已定义的方法


方法的三类格式


1.简单的方法定义与调用


方法定义


public static void 方法名(){
  方法体;
 }


方法调用


方法名(参数)


用IDEA来实现一下


public class test1 {
    public static void main(String[] args) {
        test();
    }
    //方法定义
    public static void test(){
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
    }
}


2.带参数的方法定义与调用


首先要先介绍参数的两种形式


1.形参(形式参数):指方法定义中的参数

2.实参(实际参数):指方法调用中的参数


方法定义


public static void 方法名(参数1,参数2...){
  方法体;
 }


方法调用


方法名(参数1,参数2,参数3…)


用IDEA来实现一下


public class 求和 {
    public static void main(String[] args) {
        sum(10,20);
    }
  //方法调用
    public static void sum(int num1 , int num2){
        int result = num1 + num2;
        System.out.println("两个数的和是:"+ result);
    }
}

cac47fcbc4814627ab63a5112d347de4.png


3.带返回值的方法定义与调用


方法定义


public static 返回值类型 方法名(参数1,参数2,参数3...){
  方法体;
  return返回值;
 }


方法调用


1.直接调用


方法名(实参)


public class 求和 {
    public static void main(String[] args) {
        sum(10,20);
    }
    public static int sum(int num1 , int num2){
        int result = num1 + num2;
        System.out.println(result);
        return result;
    }
}

cb19b4431dae4ba0addb1a336205127b.png


在使用直接调用时,要在方法定义中写上打印输出语句


直接调用方法是不使用返回值。就像上述程序中的result值为30,但是既没有在main方法中调用result,又没有在sum方法中调用result,所以控制台输出为空


c434629656b04a209828449b9a0845ed.png


2.赋值调用


整数类型 变量名 = 方法名(实参)


public class 求和 {
    public static void main(String[] args) {
        int result = sum(10,20);
        System.out.println(result);
    }
    public static int sum(int num1 , int num2){
        int num = num1 + num2;
        return num;
    }
}

cb19b4431dae4ba0addb1a336205127b.png


赋值调用的好处是当程序复杂时,若想调用某个方法的结果,就可以直接用一个变量来代替,便于代码的编写

同样,在将方法的结果赋值给变量后,不打印输出该变量,控制台输出也为空


4631eb8ea5314402a76d97996e3c50b9.png


3.输出调用


System.out.println(方法名(实参))


public class 求和 {
    public static void main(String[] args) {
        System.out.println(sum(10,20));
    }
    public static int sum(int num1 , int num2){
        int result = num1 + num2;
        return result;
    }
}

cb19b4431dae4ba0addb1a336205127b.png


输出调用的好处是代码简洁,在main方法中只需要写一句输出语句即可,不用像上面两种一样增添新的语句


方法的重载


概念


在同一类中,方法名相同,但是参数的个数/类型/顺序不同的方法,构成重载关系


重载判断


下面会有四道关于判断两个方法是否构成重载的例题


public class MethodDemo{
  public static void fn(int a){
    //方法体
  }
  public static void fn(int a){
  //方法体
  }
}


这两个不构成重载,因为方法名相同,参数也相同


public class MethodDemo{
  public static void fn(int a){
    //方法体
  }
  public static void fn(int a , int b){
  //方法体
  }
}


这两个构成重载,因为在同一类中且方法名相同的情况下,参数个数不同


public class MethodDemo1{
  public static void fn(int a){
    //方法体
  }
}
public class MethodDemo2{
  public static void fn(int a){
  //方法体
  }
}


这两个不构成重载,因为不在同一类中


public class MethodDemo{
  public static void fn(int a){
    //方法体
  }
  public static void fn(double a ){
  //方法体
  }
}


这两个构成重载,因为在同一类中且方法名相同的情况下,参数类型不同


方法的内存


1.方法调用的基本内存原理


方法运行时使用的内存是栈,原理是先进后出,运行完就出栈;新定义出来的,带“new”的都在堆内存中开辟了一个小空间


b95724c887c14c86b76b8fcf47fb7669.png


2.方法传递基本数据类型的内存原理


785e36174a3b4c87b6f286aac8b949ec.png


变量中存储的是地址值,引用了其他空间中数据


3.方法传递引用数据类型的内存原理


在传递基本数据类型时,传递的是真实数据的值,形参的改变并不影响实参的值


public class test2 {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用前的值:" + number);
        change(number);
        System.out.println("调用后的值:" + number);
    }
    public static void change(int number) {
        number = 200;
    }
}

6cf07e424820444bbdc7c5b295ae5991.png


在change方法中改变的number值由于没有返回值也没有输出语句,所以调用前后的值相同,如果我们将代码的方法定义改为 带返回值类型 的方法定义时,就可以实现数据传递了


public class test2 {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用前的值:" + number);
        System.out.println("调用后的值:" + change(number));
    }
    public static int  change(int number) {
        number = 200;
        return number;
    }
}


0e219723fa0648d4b9214053353848d3.png


方法的注意点


1.如果定义了一个方法后却不调用,那么该方法就不会执行


58a5d69b62d247ccb54ec4f7c903bc33.png


2.方法之间是平级关系,不可嵌套,所以在定义方法的时候不能写在main方法中,否则会报错


add2e8aaa1224405b6de219d2266c1f6.png


3.方法的编写顺序和执行顺序无关


6e2d62d892324a32ad4e40b638e2e797.png


4.若方法返回值类型为void,则该方法无返回值,可以省略return语句,但如果要写,则return后不能加具体数据,否则会报错


a2e9fd59facc4a519db06e176d0e5654.png


结语


方法是Java中重要的知识点,特别是方法的内存以及重载是面试时容易被问到的,所以掌握基础知识点很重要,练习也必不可少,具体练习在《每章练习》专栏中,感兴趣的可以做一下文章中相关习题以巩固知识。


相关文章
|
3月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
3月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
113 9
|
30天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
3天前
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
Java容器及其常用方法汇总
|
5天前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
22 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
3天前
|
Java API
java.time常用方法汇总
`java.time` API 是从 Java 8 开始引入的时间日期处理库,旨在替代老旧的 `java.util.Date` 和 `Calendar`。它提供了更简洁、强大和灵活的方式处理日期、时间、时区及时间间隔,支持全球化和时间计算需求。API 包含获取当前时间、创建指定时间、解析和格式化字符串、进行加减运算、比较时间、获取年月日时分秒、计算时间间隔、时区转换以及判断闰年等功能。示例代码展示了如何使用这些功能,极大简化了开发中的时间处理任务。
|
26天前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
22天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
55 9
|
26天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
33 10
|
28天前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
60 12