Java 笔记 11:Java 方法相关内容,方法的设计原则,以及方法的定义和调用

一、前言

记录时间 [2024-05-01]

系列文章简摘:
Java 笔记 01:Java 概述,MarkDown 常用语法整理
Java 笔记 02:Java 开发环境的搭建,IDEA / Notepad++ / JDK 安装及环境配置,编写第一个 Java 程序
Java 笔记 09:Java 流程控制相关,常见的三种控制结构(顺序、选择、循环)
Java 笔记 10:Java 流程控制内容补充,常见的跳转语句,以及一些小案例

更多 Java 相关文章,请参考上面专栏哦。

本文对 Java 方法进行简单介绍,从输出语句 print 引入对方法的介绍,讲述方法的设计原则和命名规范,以及方法定义和调用的一些要点。


二、方法概述

1. 思考引入

在之前的学习中,我们接触过 System.out.println(); 这个 Java 语句,它是用来在控制台输出信息的命令。

在 Java 中,System.out 是一个代表标准输出流的对象,而 println() 是一个方法,它会在控制台输出括号内的内容,并在最后自动换行。如果括号内没有任何内容,它将输出一个空行。

  • System:这是 Java 中的一个类,位于 java.lang 包中。它提供了与系统相关的方法和属性,包括标准输入、标准输出等。
  • out:这是 System 类的一个静态属性,类型为 PrintStreamPrintStream 是 Java 中用于打印输出的类。
  • println()这是一个方法,它会在控制台输出括号内的内容,并在最后自动换行。

2. 何谓方法

在 Java 中,方法是用来执行特定任务的一组语句的集合,它们在一起执行一个功能。方法可以接受参数,执行操作,并返回一个值。

  • 方法是解决一类问题的步骤的有序组合;
  • 方法包含于类或对象中;
  • 方法在程序中被创建,在其他地方被引用。

3. 方法设计原则

方法的本意是功能块,就是实现某个功能的语句块的集合。设计方法时,应遵循一些原则,以确保方法的可读性、可维护性和可重用性。

  • 单一职责原则:一个方法应该只有一个明确的功能或职责(原子性)。使方法更加清晰和易于理解,降低方法的复杂性。
  • 开放封闭原则:方法应该对扩展开放,对修改封闭。当需要修改方法时,应该通过扩展,而不是修改现有方法来实现。
  • 参数数量原则:尽量避免方法接受过多的参数。参数数量过多会增加方法的复杂性和理解难度。如果方法需要大量参数,可以考虑将这些参数封装成对象或者使用构建器模式。
  • 清晰明确的命名原则:方法的名称应该清晰、明确地描述方法的功能。
  • 提高可见性原则:在设计方法时,应该尽量将方法的可见性设置为最小化。如果可能,应该将方法设置为私有 private,只有在需要在类的外部调用时,才将方法设置为公共 public 或受保护 protected
  • 避免副作用原则:方法应该尽量避免对外部状态的修改,即所谓的副作用。副作用会增加方法的复杂性,降低方法的可预测性和可维护性。
  • 一致性原则:方法的设计应该保持一致性,即相似的功能应该采用相似的方法设计。这样做可以提高代码的可读性和可维护性。
  • 错误处理原则:方法应该提供良好的错误处理机制,包括抛出异常、返回错误码等。良好的错误处理可以增强方法的健壮性和可靠性。

4. 方法命名原则

在 Java 中,方法的命名应该遵循一定的规则和约定,以提高代码的可读性和可维护性。

以下是一些常用的方法命名规则:

  • 使用动词或动词短语:方法名称应该能够清楚地描述方法执行的操作。通常使用动词或动词短语来命名方法。例如:calculateTotal()getUserInfo()
  • 采用驼峰命名法:首字母小写,后续单词的首字母大写,没有下划线或其他分隔符。例如:calculateTotalAmount()
  • 清晰明确:方法名应该尽可能清晰和明确,避免使用缩写或简写,以确保其他开发者能够准确理解方法的作用。
  • 使用一致的命名风格:在整个代码库中,应该保持一致的命名风格。以提高代码的可读性,降低沟通成本。
  • 避免使用保留字:方法名不应该与 Java 中的保留字相同,以免引起歧义或编译错误。
  • 根据约定命名特殊方法:一些特殊用途的方法,例如构造方法、getter 和 setter 方法,有一定的命名约定。例如,构造方法应该与类名相同,getter 方法应该以 get 开头,setter 方法应该以 set 开头。
  • 反映方法的功能:方法名应该反映方法的功能,而不是具体的实现细节或内部实现。
  • 具有一定的描述性:避免使用过于简单或过于通用的名称,以免造成混淆或命名冲突。

三、方法定义

1. 定义语法

以下是定义方法的一般语法:

<访问修饰符> <返回类型> <方法名>(<参数列表>) {
    // 方法体
    <语句>;
    // 可选的返回语句
    return <返回值>;
}
  • <访问修饰符>:指定了谁可以调用这个方法以及在什么情况下可以调用。常见的访问修饰符包括:

    • public:公共的,任何类都可以访问;
    • private:私有的,只有同一个类中的其他方法可以访问;
    • protected:受保护的,只有同一个包内的类和子类可以访问;
    • 默认:没有修饰符,只有同一个包内的类可以访问。
  • <返回类型>:指定了方法返回的数据类型:

    • 如果方法不返回任何值,则返回类型应为 void
    • 如果方法返回一个值,则返回类型应该是具体的数据类型,如 intdoubleString 等。
  • <方法名>:方法的名称,用来唯一标识方法。

  • <参数列表>:方法可以接受零个或多个参数,参数是方法执行时需要的输入值。参数列表是用括号括起来的,多个参数之间用逗号分隔。

    • 形参:定义方法时写的参数,指明类型;
    • 实参:调用方法时传入的参数,参数按照定义时的类型。
  • <方法体>:方法体包含了方法执行的实际操作。这里是方法中的语句集合。

  • return <返回值>;:可选的返回语句,用于将结果返回给调用者。return 语句会结束方法的执行并返回一个值给调用者。如果方法的返回类型是 void,则不需要返回语句。


2. 简单示例

以下是一个简单的 Java 方法示例:

public class MyClass {
    public static void main(String[] args) {
        int sum = addNumbers(5, 3);
        System.out.println("Sum: " + sum);
    }

    public static int addNumbers(int a, int b) {
        return a + b;
    }
}

在这个例子中,addNumbers 方法接受两个整数作为参数,并返回它们的和。main 方法调用了 addNumbers 方法,并将返回的结果打印到控制台。


3. 形参与实参

在 Java 中,形参和实参是函数或方法中的两个概念,用于传递数据。

形参和实参之间的关系:形参是函数或方法定义中声明的参数,而实参是在函数或方法调用时传递给函数或方法的实际数据。

以下是它们的定义和区别:

形式参数(形参)

  • 形式参数是函数或方法定义中声明的参数。
  • 它们位于函数或方法的参数列表中,并且用于标识函数或方法将要接收的数据类型和数量。
  • 在函数或方法内部,形式参数充当占位符,用于表示传递给函数或方法的实际数据。

示例:在这个例子中,add 方法有两个形式参数 ab

// 形式参数:用来定义作用的
public void add(int a, int b) {
    int sum = a + b;
    System.out.println("Sum: " + sum);
}

实际参数(实参)

  • 实际参数是在函数或方法调用时传递给函数或方法的实际数据。
  • 它们是调用函数或方法时提供的具体值,用于填充函数或方法定义中的形式参数。
  • 实际参数的数量、顺序和数据类型必须与函数或方法的形式参数相匹配。

示例:在这个例子中,add 方法被调用时传递了两个实际参数 53,分别对应于方法定义中的形式参数 ab

public class Main {
    public static void main(String[] args) {
        Main obj = new Main();
        
        // 实际参数:实际调用方法,传递给他的参数
        obj.add(5, 3);
    }
    
    // 形式参数:用来定义作用的
    public void add(int a, int b) {
        int sum = a + b;
        System.out.println("Sum: " + sum);
    }
}

4. return 用法

从方法中返回值

在 Java 中,return 语句用于从方法中返回值。返回值的类型必须与方法声明中的返回类型匹配

如果方法声明的返回类型是 int,那么 return 语句必须返回一个整数值;如果方法声明的返回类型是 String,那么 return 语句必须返回一个字符串值,依此类推。

以下是一些示例:

// 返回整数类型的值
public int getInteger() {
    return 10;
}

// 返回字符串类型的值
public String getString() {
    return "Hello, World!";
}

// 返回布尔类型的值
public boolean getBoolean() {
    return true;
}

// 返回自定义类的对象
public MyClass getObject() {
    MyClass obj = new MyClass();
    // do something with obj
    return obj;
}

案例分析

下面是一个比较大小的方法示例,它接受两个参数,并使用 return 语句返回它们中较大的值。

public class Comparison {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        
        int max = getMax(num1, num2);
        System.out.println("The maximum number is: " + max);
    }
    
    public static int getMax(int a, int b) {
        int result = 0;
        
        if (a==b) {
            System.out.println("num1 == num2");
        }
        
        if (a > b) {
            result = a;
        } else {
            result = b;
        }
        
        // return 的类型是方法上定义的返回类型 int
        return result;
    }
}

这个 getMax 方法接受两个整数参数 ab,然后比较它们的值。如果 a 大于 b,则返回 a,否则返回 b。在 main 方法中,我们调用 getMax 方法,并打印出返回的最大值。


终止方法

在 Java 中,return 语句不仅可以从方法中返回值,并可以选择性地终止方法的执行

当在方法中遇到 return 语句时,方法将立即停止执行并返回指定的值(如果有)。如果方法的返回类型是 void,则可以使用 return; 语句来显式地终止方法的执行。

在一些情况下,特别是在条件分支或循环中,使用 return 语句可以提前终止方法的执行。例如:

public int findIndex(int[] arr, int target) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == target) {
            return i; // 在找到目标时立即返回索引值
        }
    }
    return -1; // 如果未找到目标,则返回 -1
}

在这个例子中,如果数组中找到了目标值 target,则立即返回该值的索引;否则,当遍历完整个数组后,返回 -1 表示未找到目标值。


另外,如果方法的返回类型是 void,可以使用 return; 来显式地终止方法的执行,如下所示:

public void printMessage() {
    if (condition) {
        // 执行一些逻辑
        return; // 终止方法的执行
    }
    // 如果条件不满足,则执行下面的逻辑
}

在这个例子中,如果条件满足,return; 语句将会终止方法的执行,不再执行后续的逻辑。


四、方法调用

在 Java 中,方法调用是通过使用方法名和传递给方法的参数来执行的。

方法调用的一般语法是:方法名(参数列表)。对于静态方法,可以直接使用类名调用,而对于实例方法,则需要先创建类的实例,然后使用该实例调用方法。

当一个方法返回一个值时,方法调用可以被视为一个值。这意味着可以在表达式中使用方法调用,并且该表达式的值将是方法返回的值。这使得方法调用可以作为参数传递给其他方法,或者赋值给变量,或者用于表达式中的其他操作。

以下是几种方法调用的示例:

1. 调用类的静态方法

在 Java 中,调用类的静态方法是通过使用类名来调用的。静态方法可以直接通过类名调用,而不需要创建类的实例。

在以下示例中,myStaticMethod() 是一个静态方法,它属于 MyClass 类。在 Main 类的 main 方法中,我们通过使用类名 MyClass 来调用 myStaticMethod() 方法。

这种调用方式在没有创建 MyClass 类的实例的情况下就可以进行。

public class MyClass {
    // 定义一个静态方法
    public static void myStaticMethod() {
        System.out.println("This is a static method.");
    }
}

public class Main {
    public static void main(String[] args) {
        // 调用静态方法
        MyClass.myStaticMethod();
    }
}

2. 调用类的实例方法

调用类的实例方法需要先创建类的实例,然后使用该实例来调用方法。

在以下示例中,myMethod() 是一个实例方法,它属于 MyClass 类。在 Main 类的 main 方法中,我们首先创建了 MyClass 类的实例 obj,然后使用该实例来调用 myMethod() 方法。

这种调用方式是在对象上执行方法。

public class MyClass {
    // 定义一个实例方法
    public void myMethod() {
        System.out.println("This is an instance method.");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建类的实例
        MyClass obj = new MyClass();
        
        // 调用实例方法:对象名.方法名(实参列表)
        obj.myMethod();
    }
}

3. 其他方法中调用方法

在 Java 中,可以在一个方法中调用另一个方法。这种调用方法的方式可以是类内部的方法调用,也可以是不同类之间的方法调用。以下是两种情况的示例。

同一个类中调用方法

在这个示例中,method1 方法调用了 method2 方法。当 method1 方法被调用时,它会输出一条消息,并且会调用 method2 方法,输出另一条消息。

public class MyClass {
    public void method1() {
        System.out.println("Inside method1");
        // 在 method1 中调用 method2
        method2();
    }
    
    public void method2() {
        System.out.println("Inside method2");
    }
    
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.method1();
    }
}

不同类中调用方法

在这个示例中,Main 类的 main 方法中创建了 MyClass 类的实例,并调用了 MyClass 类中的 myMethod 方法。这种方式是在不同类之间调用方法的常见做法。

public class MyClass {
    public void myMethod() {
        System.out.println("Inside myMethod");
    }
}

public class Main {
    public static void main(String[] args) {
        
        // 创建 MyClass 类的实例
        MyClass obj = new MyClass();
        
        // 在 Main 类的 main 方法中调用 MyClass 类的方法
        obj.myMethod();
    }
}

五、总结

本文对 Java 方法进行简单介绍,从输出语句 print 引入对方法的介绍,讲述方法的设计原则和命名规范,以及方法定义和调用的一些要点。


一些参考资料

狂神说 Java 零基础:https://www.bilibili.com/video/BV12J41137hu/
TIOBE 编程语言走势: https://www.tiobe.com/tiobe-index/
Typora 官网:https://www.typoraio.cn/
Oracle 官网:https://www.oracle.com/
Notepad++ 下载地址:https://notepad-plus.en.softonic.com/
IDEA 官网:https://www.jetbrains.com.cn/idea/
Java 开发手册:https://developer.aliyun.com/ebook/394
Java 8 帮助文档:https://docs.oracle.com/javase/8/docs/api/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/603903.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Day22 代码随想录打卡|字符串篇---实现 strStr()

题目&#xff08;leecode T28&#xff09;&#xff1a; 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1…

WSL2中使用USB串口实验

一、主要参考网站: Connect USB devices | Microsoft Learn 连接 USB 设备 | Microsoft Learn 二、安装usbipd-win WSL 本身并不支持连接 USB 设备,因此你需要安装开源 usbipd-win 项目 PS C:\Users\issta> winget install --interactive --exact dorssel.usbipd-win …

yaml配置文件的在深度学习中的简单应用

1 .创作灵感 小伙伴们再阅读深度学习模型的代码的时候&#xff0c;经常会遇到yaml格式的配置文件。用这个配置文件是因为我们在训练模型的时候会涉及很多的参数&#xff0c;如果这些参数东一个&#xff0c;西一个&#xff0c;我们调起来的时候就会很不方便&#xff0c;所以用y…

Springboot+vue项目人事管理系统

开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue JDK版本&#xff1a;jdk1.8 文末获取源码 系统主要分为管理员和普通用户和员工三部分&#xff0c;主要功能包括个人中心&#xff0c;普通用户管理&…

4.用python爬取保存在text中的格式为m3u8的视频

文章目录 一、爬取过程详解1.寻找视频的m3u8链接2.从网页源码中寻找视频的m3u8链接的第二部分内容3.从视频的m3u8链接获取视频 二、完整的代码 一、爬取过程详解 1.寻找视频的m3u8链接 这个文档承接了爬虫专栏的 第一节.python爬虫爬取视频网站的视频可下载的源url&#xff0…

头歌实践教学平台:CG3-v2.0-图形几何变换

第1关&#xff1a;平移、缩放、旋转正方体 一. 任务描述 1. 本关任务 (1) 理解几何变换基本原理, 掌握平移、旋转、缩放变换的方法; (2) 根据平移算法原理补全translation、scale、rotation_x、rotation_y和rotation_z函数; (3) 根据几何变换基本原理,将main函数中的transla…

RK3568 学习笔记 : Linux emmc 内核启动 rootfs 根文件系统无法正常挂载问题的分析

问题描述 平台 &#xff1a; NanoPi-R5C 开发板 RK3568 平台。 手动编译的 Linux 内核&#xff0c;结果发现大概率 emmc 无法正常初始化&#xff0c;导致 rootfs 根文件系统无法正常挂载 Linux 内核版本&#xff1a; 6.1 Linux 内核代码位置&#xff1a; https://github.com…

上网行为监控软件有哪些(上网审计软件)【收藏】

上网行为监控软件&#xff08;也被称为上网审计软件&#xff09;正逐渐成为企业信息安全管理的必备工具。 没错&#xff01; 这些软件通过对员工的上网行为进行全面、细致的监控和审计&#xff0c;帮助企业提升工作效率、保护数据安全&#xff0c;并规范员工的网络使用行为。 …

Springboot+vue项目健身房课程预约平台

开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue JDK版本&#xff1a;jdk1.8 本系统主要实现了首页、个人中心、用户管理、教练管理、会员卡管理、购买会员管理、课程类型管理、课程信息管理、课程购买…

生信新包|LINGER·从单细胞多组学数据推断基因调控网络

题目&#xff1a;Inferring gene regulatory networks from single-cell multiome data using atlas-scale external data 原理 LINGER 是一个计算框架&#xff0c;旨在从单细胞多组学数据推断基因调控网络。 使用基因表达和染色质可及性的计数矩阵以及细胞类型注释作为输入&…

Linux下创建达梦数据库自动备份任务

分享一个自己用的银河麒麟下达梦数据库自动备份任务脚本。 达梦数据库备份脚本。按日期备份&#xff0c;备份后压缩为tar.gz文件&#xff0c;自动清理导出的文件。 备份脚本保留最后30天记录&#xff0c;以节省硬盘空间&#xff0c;可根据具体情况修改。 达梦数据库备份脚本 …

​​​【收录 Hello 算法】第 4 章 数组与链表

第 4 章 数组与链表 数据结构的世界如同一堵厚实的砖墙。 数组的砖块整齐排列&#xff0c;逐个紧贴。链表的砖块分散各处&#xff0c;连接的藤蔓自由地穿梭于砖缝之间。 本章内容 4.1 数组4.2 链表4.3 列表4.4 内存与缓存 *4.5 小结

解决github无法克隆私有仓库,Repository not found问题(2024最新)

一、背景 这个问题出现&#xff0c;是你用了其他主机设备&#xff0c;需要重新clone私有库时&#xff0c;发现一直报找不到仓库&#xff0c;如下报错&#xff1a; remote: Repository not found.二、解决方法 &#xff08;1&#xff09;账号密码方式&#xff08;已不支持&am…

CSDN上是不是有机器人点赞和收藏?

我在CSDN上写作&#xff0c;主要是本来是记录学习工作中的一些知识点&#xff0c;看得人不多本来就能预想到的。 但是今天发现五一写的一篇博客&#xff0c;出现了很奇怪的阅读、点赞、收藏数。只有2个人阅读&#xff0c;但是有8个点赞&#xff0c;还有5个收藏。 我不禁怀疑CS…

怎么扫描二维码看图片?在线制作图片二维码的方法

随着现在二维码的广泛使用&#xff0c;用这个方式来展现内容的情况越来越多&#xff0c;比如扫码看图就是一种很常见的一种类型。将图片生成二维码后通过扫码来调取云端存储的图片查看&#xff0c;这样可以一次预览多张图片并且不会占据内存&#xff0c;能够快速的实现图片内容…

Flutter笔记:Widgets Easier组件库(11)- 使用提示吐丝(Tip Toasts)

Flutter笔记 Widgets Easier组件库&#xff08;11&#xff09;使用提示吐丝 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this …

C++之QT文本处理QDir、QFileDialog、QStringList、QFile

一、相应的头文件 #include <QFileDialog> #include <QDir> #include <QStringList> 二、简介 1.QFileDialog 实际效果如下&#xff1a;比如需要选择打开的文件夹或者文件名&#xff0c;通过调用资源管理器的方式进行可视化操作。 代码示例为&#xff1a…

xss漏洞简介

漏洞简介 跨站脚本&#xff08;Cross-site scripting ,简称 XSS&#xff09;是一种经常出现在Web应用程序中的计算机安全漏洞&#xff0c;是由于web应用程序对用户的输入过滤不足而产生的&#xff0c;是代码注入的一种&#xff0c;XSS就是攻击者利用网站漏洞把恶意脚本代码&am…

4.5_shell的执行流控制

##1.for语句## &#xff08;1&#xff09;for语句作用 为循环执行动作 &#xff08;2&#xff09;for语句结构 for 定义变量 do 使用变量&#xff0c;执行动作 done 结束标志 &#xff08;3&#xff09;for语句的基本格式 格式1 格式1&#xff1a;#!/b…

flask框架的初步认识

flask框架的初步认识 这是一个轻量级的网页框架&#xff0c;在运行后&#xff0c;就相当于服务器&#xff0c;当用户输入URL就会触发对应的事件调用方法&#xff0c;返回给用户一个网页文件&#xff0c;并通过自动识别html标签&#xff0c;来为用户呈现对应的样式和效果&#…
最新文章