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


相关文章
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
101 9
|
3天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
1天前
|
算法 Java API
Java 方法注释:规范、实用和高质量的写法
本文深入探讨了如何编写高质量的 Java 方法注释
22 11
|
1天前
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
20 5
|
1天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
18 4
|
1天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
18 4
|
1天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
10 1
|
2月前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
60 4
|
2月前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
84 4