首页 > 编程语言 >Java基础之方法 | 方法概述 | 方法格式 | 方法重载 | 方法的参数传递

Java基础之方法 | 方法概述 | 方法格式 | 方法重载 | 方法的参数传递

时间:2024-09-09 09:52:29浏览次数:10  
标签:Java void System 参数传递 static println 方法 public

目录

什么是方法

方法基本使用

定义方法格式

方法案例

定义方法的两个明确

案例一

案例二

案例三

方法小结

定义方法注意事项

调用方法三种形式

方法重载

方法重载概述

方法重载案例

案例一

案例二

案例三

方法的参数传递

方法参数传递基本类型

方法参数传递引用类型


什么是方法

方法(method)完成某一个特定功能的代码块

方法基本使用

比如: 打怪物发射炮弹重复的代码,把一些重复代码进行抽取(封闭)思想.

  • 抽取代码

    public static void fire() {
        System.out.println("准备发射5发炮弹");
        System.out.println("发射第1发炮弹* * * *");
        System.out.println("发射第2发炮弹* * * *");
        System.out.println("发射第3发炮弹* * * *");
        System.out.println("发射第4发炮弹* * * *");
        System.out.println("发射第5发炮弹* * * *");
        System.out.println("发射5发炮弹结束");
    }

  • 在main方法中使用

    public static void main(String[] args) {
        System.out.println("游戏开始...");
        System.out.println("看到了一个怪物...血牙野猪...");
        //调用方法,发射炮弹
        fire();
        System.out.println("...血牙野猪被打倒...");
    }

  • 调用格式
    方法名();

  • 注意
    • 方法必须先创建才可以使用,该过程成为方法定义
    • 方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用

定义方法格式

修饰符 返回值类型 方法名(参数列表){
    //代码省略... 
    return 结果; 
}
  • 修饰符: public static 目前固定写法
  • 返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者
  • 参数列表: 方法在运算过程中的未知数据,调用者调用方法时传递
  • return: 将方法执行后的结果带给调用者,方法执行到 return ,整体方法运行结束

小贴士:return 结束; 这里的结束在开发中,我们正确的叫法成为方法的返回值

方法案例

定义方法的两个明确

  • 明确参数列表

    该方法在完成一个功能时,需要的参数有几个,参数的类型是什么,需要在我们明确给出的。

  • 明确返回值类型

    方法的功能完成之后,是否有结果返回,如果有,使用return 将结果返回给调用者。没有返回值void

    什么情况下,我们用return, 除了void以外的都要有return

案例一

  • 需求

    在控制台打印10次HelloWorld

  • 分析

    • 明确参数列表

      方法中打印出 HelloWorld 即可,没有计算结果,返回值类型 void

    • 明确返回值

      打印几次已经明确规定10次,参数不需要定义

  • 代码实现

    public class MethodDemo01 {
        public static void main(String[] args) {
            //调用方法printHelloWorld打印10次HelloWorld
            printHelloWorld();
        }
    ​
        public static void printHelloWorld() {       
            for (int i = 0; i < 10; i++) {
                System.out.println("HelloWorld");
            }
        }
    }

案例二

  • 需求

    实现不定次数打印HelloWorld

  • 分析

    • 明确参数列表

      方法中打印出 HelloWorld 即可,没有计算结果,返回值类型 void

    • 明确返回值

      打印几次不清楚,参数定义一个整型参数

  • 代码实现
    public class MethodDemo02 {
        public static void main(String[] args) {
            //调用方法printHelloWorld,传递整数
            printHelloWorld();
        }
    ​
        /*
            定义打印HelloWorld方法
            返回值类型,计算没有结果 void
            参数:不确定打印几次
        */
        public static void printHelloWorld(int n) {        
            for (int i = 0; i < n; i++) {
                System.out.println("HelloWorld");
            }
        }
    }

案例三

  • 需求

    定义方法实现两个整数的求和计算

  • 分析

    • 明确参数列表

      计算哪两个整数的和,并不清楚,但可以确定是整数,参数列表可以定义两个int类型的

      变量,由调用者调用方法时传递

    • 明确返回值

      方法计算的是整数的求和,结果也必然是个整数,返回值类型定义为int类型。

  • 代码实现
     
    public class MethodDemo03 {
        public static void main(String[] args) {
            // 调用方法getSum,传递两个整数,这里传递的实际数据又称为实际参数        
            // 并接收方法计算后的结果,返回值     
            int sum = getSum(5, 6);
            System.out.println(sum);
        }
     
        /*
            定义计算两个整数和的方法
            返回值类型,计算结果是int
            参数:不确定数据求和,定义int参数.参数又称为形式参数
        */
        public static int getSum(int a, int b) {
            return a + b;
        }
    }

TODO: 无参无返回值的方法 无参有返回值的方法

有参无返回值的方法 有参有返回值的方法

试着去写返回值类型各种情况, 试着去写参数列表的各种数据类型

方法小结

定义方法注意事项

  • 定义位置:类中方法外,不能嵌套定义
  • 方法必须先定义,再使用
  • void表示无返回值,可以省略return,也可以单独的书写return
  • 不能在return后面写代码,return意味着方法结束,所有后面的代码记永远都不会执行,属于无效代码
  • 定义方法时()中的参数,我们称之为:形式参数,在调用该方法时传递的参数,我们称之为:实际参数
  • 你可以不接收返回的值,但你必须给出参数

调用方法三种形式

  • 直接调用:直接写方法名调用
    public static void main(String[] args) {    
        print();
    }
    public static void print() {
        System.out.println("方法被调用");
    }

  • 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
    public static void main(String[] args) {    
        int sum = getSum(5,6);
        System.out.println(sum);
    }
    public static int getSum(int a,int b) {
        return a + b;
    }

  • 输出语句调用:在输出语句中调用方法
    public static void main(String[] args) {    
        System.out.println(getSum(5,6));
    }
    public static int getSum(int a,int b) {
        return a + b;
    }
    • 注意事项

      不能用输出语句调用void无返回值类型的方法。因为方法执行后没有结果,也就打印不出任何内容

      public static void main(String[] args) {
          // 错误,不能输出语句调用void类型方法
          System.out.println(printHello());
      }
      public static void printHello() {
          System.out.println("Hello");
      }

方法重载

方法重载概述

在同一个类中,具有相同的方法名, 参数列表不同(参数的个数及类型不同),与返回值无关

参数列表:个数不同,数据类型不同,顺序不同。

重载方法调用:JVM通过方法的参数列表,调用不同的方法。

  • 注意事项
    * 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
    * 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载

方法重载案例

案例一

  • 需求

    使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)

  • 思路

    ①定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数

    ②定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数

    ③定义所有的重载方法,两个byte类型与两个short类型参数

    ④完成方法的调用,测试运行结果

  • 代码实现
    public class MethodTest1 {
        public static void main(String[] args) {
            //调用方法
            System.out.println(compare(10, 20));
            System.out.println(compare((byte) 10, (byte) 20));
            System.out.println(compare((short) 10, (short) 20));
            System.out.println(compare(10L, 20L));
        }
    ​
        //int
        public static boolean compare(int a, int b) {
            System.out.println("int");
            return a == b;
        }
    ​
        //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;
        }
    ​
        //long
        public static boolean compare(long a, long b) {
            System.out.println("long");
            return a == b;
        }
    ​
    }

案例二

判断哪些方法是重载关系

public static void open(){}
public static void open(int a){}
public static void open(int a,int b){}
public static void open(double a,int b){}
public static void open(int a,double b){}
public void open(int i,double d){}
public static void OPEN(){}
public static void open(int i,int j){}

案例三

  • 需求

    模拟输出语句中的println方法的效果,传递什么类型的数据就输出什么类型的数据,只允许定义一个方法名println

  • 代码实现
     
    public class MethodTest2 {
        public static void println(byte a) {
            System.out.println(a);
        }
     
        public static void println(short a) {
            System.out.println(a);
        }
     
        public static void println(int a) {
            System.out.println(a);
        }
     
        public static void println(long a) {
            System.out.println(a);
        }
     
        public static void println(float a) {
            System.out.println(a);
        }
     
        public static void println(double a) {        
            System.out.println(a);
        }
     
        public static void println(char a) {
            System.out.println(a);
        }
     
        public static void println(boolean a) {       
            System.out.println(a);
        }
     
        public static void println(String a) {        
            System.out.println(a);
        }
    }

方法的参数传递

方法参数传递基本类型

  • 测试代码:
    public class ArgsDemo01 {
        public static void main(String[] args) {
            //实际参数
            int number = 100;
            System.out.println("调用change方法前:" + number);
            //调用方法
            change(number);
            System.out.println("调用change方法后:" + number);
        }
    ​
        //形式参数
        public static void change(int number) {
            number = 200;
        }
    }
  • 结论:

    基本数据类型的参数,形式参数的改变,不影响实际参数

  • 结论依据:

    每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失

方法参数传递引用类型

  • 测试代码
    public class ArgsDemo02 {
        public static void main(String[] args) {
            int[] arr = {10, 20, 30};
            System.out.println("调用change方法前:" + arr[1]);//20
            
            change(arr);
            System.out.println("调用change方法后:" + arr[1]);//200
        }
    ​
        public static void change(int[] arr) {
            arr[1] = 200;
        }
    }
     
  • 结论

    对于引用类型的参数,形式参数的改变,影响实际参数的值

  • 结论依据

    引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果

标签:Java,void,System,参数传递,static,println,方法,public
From: https://blog.csdn.net/DominicT/article/details/142047486

相关文章

  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    SSM?中小型药店信息管理系统摘要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论......
  • 审批流程超简单实现(Java版)
    工作流审批功能是办公OA系统核心能力,如果让你设计一个工作流审批系统,你会吗?千万不要小瞧OA内部系统的复杂性,大家可以头脑风暴思考一下实现方案。要明白工作流审批涉及多个用户的任务流转,多个流程分支跳转,虽然是办公内部系统,但是这个系统并不简单如果没有强大的工作流引擎,难以高效扩......
  • Java基础 | 数组 | 一维数组 | 二维数组 | 数组初始化 | 索引
    目录一维数组什么是数组数组定义格式格式一格式二数组初始化数组动态初始化什么是动态初始化动态初始化格式动态初始化格式详解等号左边等号右边数组静态初始化什么是静态初始化静态初始化格式完整版格式简化版格式示例代码数组元素访问什么是索引访问数......
  • Java毕设项目II基于Spring Boot的在线远程考试系统设计与实现
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育模式的不断......
  • 【JavaScript系列八】—讲述JS学习历程的知识分享!
    前言本篇主要讲述JS中较为重要的一环,函数的用法,深拷贝和浅拷贝的概念和区别,闭包和递归,包括一些案例:例如递归实现斐波那契数列,求阶乘等等一、关于函数定义函数的方式function关键字函数表达式(匿名函数)varfn=function(){}newfunction()函数的调用及其this指向普通函数—......
  • 【JavaScript系列九】—讲述JS学习历程的知识分享!
    前言本篇主要是讲述ES6的新增语法和相关运用一、ES6ES的全称是ECMAScript,它是由ECMA国际标准化组织,制定的一项脚本语言的标准化规范。泛指2015年6月之后发布的版本为什么使用ES6语言更加完善功能更加强大变量提升特性增加了程序运行时的不确定性语法过于......
  • 装win7系统蓝屏0x0000007b怎么办?装win7出现0x0000007b蓝屏解决方法
        最近有网友问我装win7出现0x0000007b蓝屏怎么办?0x0000007b电脑蓝屏通常情况是硬盘的存储控制器驱动加载错误导致故障。出现0x0000007b蓝屏代码的原因有很多比如硬盘模式、安装的系统没有集成相关的磁盘控制器驱动等,下面小编就教大家装win7出现0x0000007b蓝屏解决方......
  • 看板方法
    看板是Scrum之后用于软件开发的最流行的敏捷框架。它提供了工作的实时性和透明性。在看板中,所有任务都是可见的,允许团队成员随时查看每项任务的状态。看板方法的特点灵活性在看板方法中,团队专注于“进行中”状态的工作。一旦团队完成任务,它就会完成产品待办事项的下一个第......
  • Java中String、StringBuffer以及StringBulider的区别
    String、StringBuffer以及StringBulider的比较在Java中,String、StringBuilder和StringBuffer是三种用来表示和操作字符串的对象。它们之间的主要区别在于可变性、线程安全性和性能方面。下面是这些类的主要区别:可变性String:是不可变的(immutable)。这意味着一旦一个Str......
  • java导入json数据至doris
    表结构字段名称与json key名称一致:packagecom.ruoyi.doris;importcn.hutool.core.io.FileUtil;importcn.hutool.http.HttpRequest;importcn.hutool.http.HttpResponse;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importlomb......