31从零开始学Java之详解如何定义方法

news2024/11/24 2:16:53

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦

千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者

前言

经过前面两篇关于面向对象、类和对象的文章,壹哥相信你现在对面向对象已经有了基本的了解。我们知道,在一个类中,包括属性和行为两大核心要素。我们之前已经给大家讲解了如何定义属性,但很多同学对方法还不了解,那么今天这篇文章,壹哥就带大家学习Java中的方法。

在前面的文章中,壹哥跟大家说过,Java的类中包括两个核心要素:属性和行为。所谓的行为,其实就是用方法来表现出来。那么到底方法是什么?有哪些作用?怎么定义方法?这就是我们今天要学习的内容。

------------------------------------------------前戏已做完,精彩即开始----------------------------------------------

全文大约【3600】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图视频,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

配套开源项目资料

Github:

GitHub - SunLtd/LearnJava

Gitee:

一一哥/从零开始学Java

一. 方法简介

1. 背景

我们想一个问题,如果让你实现下图所示的效果,用现有的知识,你该如何实现?

在上图中,每一句诗都用虚线分割,我们可以采用蓝色方框所示的方式进行打印出来。但不论如何打印,都存在冗余的代码。如果后面需要修改这些冗余的代码,就需要修改多处。比如以后我们想要将虚线修改为直线,则需要修改图中的四个地方,从而增加了维护成本。那么有没有办法做到只修改一次,就能将四个地方的虚线全都修改掉呢?学习了今天的内容之后,我们就可以做到只修改一次,达到四个地方全都修改的目的。

2. 概念

要想实现上面的目标,我们就可以使用Java里的方法。方法中封装了一些为解决某个问题而编写的代码片段,可以反复使用从这句话可以得知,方法是若干语句的集合,这些语句合在一起共同实现一个功能。我们可以在一个类中定义多个方法,方法之间可以互相引用。另外A类中定义的方法,在特定条件下,也可以在B类中引用。

3. 分类

Java中的方法,根据是否带有static修饰符,我们可以分为两种:

  • 实例方法也可以叫做成员方法。这种方法不能通过"类名.方法名"的形式直接调用,需要先创建出类的对象,通过"对象名.方法名"的形式调用。
  • 静态方法:也叫做类方法,方法上带有static关键字。可以通过"类名.方法名"的形式直接调用。

4. 优点

我们在Java中定义的方法,具有如下优点:

  • 方法可以实现某个特定的功能,减少了冗余代码,使程序变得简短清晰,便于后续的维护和修改;
  • 方法采用单一职责,就是一个方法只做一件事情,降低了程序的耦合性;
  • 方法的创建,提高了代码的复用性,提高了开发效率。

了解了这些基本概念之后,接下来就请大家跟着壹哥学习如何定义方法吧。

二. 方法定义

1. 基本语法

如果我们想定义一个方法,基本语法如下:

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    
    return 返回值;
}

2. 组成部分

从方法定义的语法中可知,一个方法有如下几个重要组成部分:

修饰符方法的修饰符是可选的,用于定义该方法的访问类型,可用的修饰符包括public/private/protected/默认的。

返回值方法可以有返回值,也可以没有返回值。当有返回值时,需要指定返回值的数据类型;如果没有返回值,要使用void关键字声明。

方法名定义方法时需要给方法取个名称,方便我们进行引用,该名称要符合Java的命名规范。方法名和方法参数共同构成了方法的签名。

参数方法中可以带参数,也可以不带参数。如果不带参数,该方法就是无参方法。如果带有参数,需要指明参数的类型,且一个方法中可以带多个参数,这些参数叫做“形式参数(形参)”。当有多个参数时,要注意参数的类型、顺序和个数可以任意排列组合,不同的组合会形成不同的方法。当有参方法被调用时,需要传递真实的数据值给形参,这个值被称为“实际参数(实参)”

方法体方法体就是方法中具体的执行语句,用于实现该方法的核心功能。

3. 命名规则

我们在上面说过,每个方法都需要有名称,并且方法的命名要符合Java的命名规则。另外除了必须遵循的命名规则之外,我们在对方法命名时还要遵循一定的命名规范:

  • 方法名称的首字母应该是小写但如果方法名由多个单词组成,第一个单词的首字母应该是小写,后面的单词要用大写字母,且不要使用连接符。例如:showMsg。

4. 基本案例

接下来我们就通过一个案例,来看看如何定义一个实例方法。

/**
 * @author 一一哥Sun
 * QQ:2312119590
 * CSDN、掘金、知乎找我哦
 * 千锋教育
 */
public class Demo01 {
	//定义一个带有返回值的方法
	//访问修饰符   返回值 方法名  参数类型 参数名
	public String showMsg(int age, String name, String msg) {
		//方法体
		String result;

		if (age >= 18) {
			result = name + ",恭喜你成年啦," + msg;
		} else {
			result = name + ",你还没成年," + msg;
		}

		//返回结果
		return result;
	}
}

大家注意,如果上面这个方法多加一个“static”关键字,就会变成静态方法哦,就是这么简单。

5. 方法调用

我们现在定义好了一个方法,那么该怎么来调用该方法呢?根据是否是静态方法,可以有两种不同的调用方式,我们来看看具体的代码吧。

5.1 同类中静态方法的调用

如果两个方法都在同一个类中,且A方法和B方法都是静态方法,A方法可以直接调用B方法。另外一个方法调用就是一个语句,所以不要忘了在末尾加“;”,如下所示:

/**
 * @author 一一哥Sun
 * QQ:2312119590
 * CSDN、掘金、知乎找我哦
 * 千锋教育
 */
public class Demo01 {
	public static void main(String[] args) {
		//调用方法,获取到返回结果
		String result = showMsg(16, "一一哥", "要好好学习");
		System.out.println(result);
	}

    //定义一个静态方法
	//访问修饰符   返回值 方法名  参数类型 参数名
	public static String showMsg(int age, String name, String msg) {
		//方法体
		String result;

    	.....
        
		//返回结果
		return result;
	}
}

大家要注意,静态方法不能调用非静态方法,否则编译会出错!

5.2 不同类中静态方法的调用

如果两个方法不在同一个类中,且A方法和B方法都是静态方法,我们可以在另一个类中,通过“类名.方法名”的形式进行调用,如下所示:

/**
 * @author 一一哥Sun
 * QQ:2312119590
 * CSDN、掘金、知乎找我哦
 * 千锋教育
 */
public class Demo02 {
	public static void main(String[] args) {
		//调用方法,获取到返回结果
		String result = Demo01.showMsg(16, "一一哥", "要好好学习");
		System.out.println(result);
	}
}

5.3 实例方法的调用

假如我们定义了一个非静态的实例方法,如下所示:

/**
 * @author 一一哥Sun
 * QQ:2312119590
 * CSDN、掘金、知乎找我哦
 * 千锋教育
 */
public class Demo01 {
	//定义一个非静态的实例方法
	// 访问修饰符 返回值 方法名 参数类型 参数名
	public String showMsg2(int age, String name, String msg) {
		// 方法体
		String result;

		if (age >= 18) {
			result = name + ",恭喜你成年啦," + msg;
		} else {
			result = name + ",你还没成年," + msg;
		}

		// 返回结果
		return result;
	}
}

则可以采用“对象名.方法名”的形式调用,如下所示:

/**
 * @author 一一哥Sun
 * QQ:2312119590
 * CSDN、掘金、知乎找我哦
 * 千锋教育
 */
public class Demo02 {
	public static void main(String[] args) {
    	//调用非静态的实例方法,先创建出类对象
		Demo01 demo=new Demo01();
        //对象.方法名
		String result = demo.showMsg2(19, "以一个", "你好啊");
		System.out.println(result);
	}
}

6. 小结

壹哥给大家总结一下使用方法时的几个注意事项:

  • 方法的定义位置:方法需要定义在类中其他方法的外面,方法之间不能互相嵌套;
  • 方法的实参要与形参保持一致(个数、类型、顺序);
  • 方法的返回值,并不一定非要接收。但一般方法既然定义了返回值,如果不去接受那么也没有意义。

7. 配套视频

本节配套视频链接如下:

Bilibili External Player

三. 方法返回值

1. 概述

壹哥在上面说过,Java的方法中可以有返回值,也可以没有返回值当有返回值时,需要指定返回值的数据类型;如果没有返回值,要使用void关键字进行声明。

2. void关键字

如果方法没有返回值,则该方法的返回类型要设置为void,表示该方法没有任何返回值,可以省略return。我们来看下面的案例:

/**
 * @author 一一哥Sun
 * QQ:2312119590
 * CSDN、掘金、知乎找我哦
 * 千锋教育
 */
public class Demo02 {
	public static void main(String[] args) {
		//调用方法
		printTriangle(6);
	}
	
	//定义一个没有返回值的方法,打印三角形(三角形行数由调用者来确定)    
	public static void printTriangle(int rows) {
	    for (int i = 1; i <= rows; i++) {
	        for (int j = 1; j <= i ; j++) {
	            System.out.print("*");
	        }
	        System.out.println();
	    }

        //返回值为void时,返回值可以写成如下格式,但实际上没必要
	    //return ;
	}
}

注意,当返回值为void时,返回值可以写成“return ;”的形式,但实际上没必要。

3. return关键字

如果方法有返回值,则要使用return关键字进行值的返回,其格式如下所示。

return 表达式; 或 return (表达式);

其中,表达式可以是常量、变量、对象等,且表达式的数据类型必须与声明方法时给出的返回值类型一致。我们来看下面的案例:

/**
 * @author 一一哥Sun
 * QQ:2312119590
 * CSDN、掘金、知乎找我哦
 * 千锋教育
 */
public class Demo04 {
	public static void main(String[] args) {
		//调用方法
		int num = max(6,10);
		System.out.println("num="+num);
	}
	
	//定义一个带参数和返回值的方法,该方法包含2个参数num1和num2,返回这两个参数中的最大值。
	public static int max(int num1,int num2) {
	    if(num1 > num2) {
	        return num1;
	    }else {
	        return num2;
	    }
	}
}

4. 小结

壹哥给大家总结一下return关键字的作用:

  • return表示当前方法的执行结束了;
  • return可以用在有返回值的方法中;
  • return也可以用在没有返回值的方法中;
  • 在return的后面不能直接写任何代码,因为不可能执行的到;
  • 没有返回值的方法可以只写return,而有返回值的方法必须要写“return 返回值”;
  • 另外我们还要知道void和return null的区别。

void的表示方法没有返回值,但是大家要注意,void和“return null;”是不一样的!void表示啥也不用返回,根本不用考虑返回值的事!而“return null;”表示要返回一个引用类型的值,只是该值是一个空值!

------------------------------------------------​​​​​​​正片已结束,来根事后烟----------------------------------------------

四. 结语

至此,壹哥就给大家把方法的定义介绍完毕了,现在你知道方法怎么创建了吗?其实关于方法的内容还有很多,比如方法的参数、方法的重载、构造方法等内容,接下来壹哥会在下一篇文章中继续给大家进行讲解,敬请期待哦。另外如果你独自学习觉得有很多困难,可以加入壹哥的学习互助群,大家一起交流学习。

五. 今日作业

1. 第一题

写一个方法,打印九九乘法表。

2. 第二题

定义一个方法,求100以内所有的质数并输出。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序配置实现中英文国际化语言切换

目录 1,在根目录新建文件夹和js文件 2. 在main.js中设置全局语言状态&#xff08;默认设置为中文&#xff09; 3. 页面添加 语言切换按钮&#xff08;登录页面&#xff09; 4. 在需要显示的页面导入使用 1,在根目录新建文件夹和js文件 根目录新建一个locales.js文件, 通用…

苹果手机通话怎么录音?通话录音的详细教程!

案例&#xff1a;iPhone怎么一边通话一边录音&#xff1f; 【苹果手机通过普通的方式不能边通话边录音&#xff0c;有什么方法可以帮到我吗&#xff1f;感谢&#xff01;】 录制通话可以帮助用户记录重要的电话内容&#xff0c;如商务谈判、家庭事务等。但是录音涉及隐私&…

Java基础(41)Java输入/输出流

在Java中所有数据都是使用流读写的。流是一组有序的数据序列&#xff0c;将数据从一个地方带到另一个地方。根据数据流向的不同&#xff0c;可以分为输入&#xff08;Input&#xff09;流和输出&#xff08;Output&#xff09;流两种。 什么是输入/输出流 Java 程序通过流来完…

Unity3D :创建您的第一个运行时 UI

ygtu May 16, 2023 • 27 min read 推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 创建您的第一个运行时 UI 本页将指导您完成使用 UI 工具包设置简单字符选择屏幕的步骤。它涵盖了 UI 元素和模板的创建、场景设置以及如何将脚…

公网SSH远程连接Termux - 电脑使用安卓Termux【cpolar内网穿透】

文章目录 1.安装ssh2.安装cpolar内网穿透3.远程ssh连接配置4.公网远程连接5.固定远程连接地址 使用安卓机跑东西的时候&#xff0c;屏幕太小&#xff0c;有时候操作不习惯。不过我们可以开启ssh&#xff0c;使用电脑PC端SSH远程连接手机termux。 本次教程主要实现在安卓手机te…

如何提高PID控制器离散化精度(SCL+梯形图代码)

通常采样率(执行频率)1/Ts的典型取值为闭环带宽的5~10倍。实际上大部分工程采样率范围会使我们所期望的闭环性能下降,要忽略采样造成的影响,采样率至少是典型值的10倍。原则上,采样率1/Ts在允许的计算能力范围内越大越好。当采样率较低时,提高PID控制器离散化精度的一种方…

DSSR122 4899001-NK汽车电子电气架构进化的终点在哪里

​ DSSR122 4899001-NK汽车电子电气架构进化的终点在哪里 随着人们对汽车性能要求的不断提高&#xff0c;越来越多的汽车电子/电气&#xff08;E/E&#xff09;架构系统被集成到汽车中&#xff0c;成为智能交通、自动驾驶、智能城市等更广泛生态系统的组成部分。汽车行业自动化…

Spring Boot 集成 Redis

Spring Boot 集成 Redis 一 集成Jedis1.1 Jedis1.2 集成步骤1.2.1 建Module1.2.2 改POM1.2.3 写YML1.2.4 主启动1.2.5 业务类 二 集成lettuce2.1 lettuce2.2 lettuce Vs Jedis2.3 集成步骤2.3.1 改pom2.3.2 业务类 三 集成RedisTemplate3.1 单机集成3.1.1 POM3.1.2 YML配置3.1.…

terrapos处理pospac数据(二)

上篇&#xff08;参考文献2&#xff09;说到terrapos不能处理pospac中的GPS数据&#xff0c;博主猜测可能的原因是没有记录主天线、方向天线和差分天线的原始数据&#xff0c;但是&#xff0c;即使记录这三种原始数据&#xff0c;当从pospac中提取IMU和GPS数据的时候&#xff0…

macOS Ventura 13.4 RC3(22F66)发布

系统介绍 5 月 17 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.4 RC 3 更新&#xff08;内部版本号&#xff1a;22F66&#xff09;&#xff0c;本次更新距离上次发布隔了 5 天。 macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力等功能。其中&…

我和C++的故事---第一次见面.

&#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f3e0;学习社区&#xff1a;夏目友人帐. 文章目录 前言一、第一个C程序二、C 关键字(C98)三、命名空间1、命名空间的定义2、命名空间的使用3、命名空间的三种展开方式 四、C输入&&输出&&换行1、…

doxygen: 在Windows上源码编译

文章目录 1. 目的2. 思路3. 安装 Chocolatey4. 用 choco 安装 bison 和 flex安装 gs:安装 libiconv 5. 编译报错 1. 目的 在 windows 上源码编译 doxygen&#xff0c; 改代码加功能。 2. 思路 doxygen 依赖 flex 和 bison&#xff0c; 手动编译 flex 和 bison 很麻烦可以用…

孤独患者的树洞?AI情感陪伴是如何实现的?

一、人工智能大模型 自ChatGPT发布以来&#xff0c;越来越多的中国企业和研究机构扎堆冲入AI大模型赛道&#xff0c;试图在自然语言处理、机器翻译、问答等方面取得重大突破。在未来&#xff0c;这些模型有机会应用于金融、医疗、电商等各领域。 人工智能大模型的应用不仅可以…

矿山电子封条 yolov8网络模型

矿山电子封条通过yolov8网络模型利用AI图像智能视频识别等技术&#xff0c;矿山电子封条yolov8网络模型智能分析异常情况&#xff0c;包括不限于人数变化情况、出入井人员以及相关现场设备开停状态进行自动全天候远程监控。YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOL…

为什么Windows/Linux 的端口数量最大限制为65535?

端口0&#xff1a;一般是用来表示所有端口&#xff0c;即1–65535。另外其他答主也提到1–1024是知名端口号&#xff0c;但那是很久以前数据&#xff0c;是该更新了。举几个大于1024的知名端口号&#xff1a;1614/1615&#xff1a;思科ISE用于AAA的端口号1812/1813&#xff1a;…

【腾讯云 Finops Crane 集训营】基于 Kubernetes 实现云资源分析与成本优化平台

基于 Kubernetes 实现云资源分析与成本优化平台 一、基本介绍1.主要功能2.整体架构 二、基于 Kubernetes 实现云资源分析与成本优化平台1.准备工作2.安装 Prometheus/Grafana 软件包3.安装 Crane 软件包4. 使用智能弹性 EffectiveHPA4.配置集群 三、功能验证1.成本展示2.资源推…

3分钟了解FactoryBean的作用和底层工作原理

大家好&#xff0c;我是冰点&#xff0c;本节我们通过对FactoryBean 接口源码解析&#xff0c;以及使用示例剖析&#xff0c;让大家3分钟了解FactoryBean的作用和底层工作原理。以及FactoryBean的使用场景&#xff0c;学以致用。 FactoryBean是Spring框架中的一个接口&#xf…

基于 resnet 对 CIFAR-10 图片进行分类和网络微调

本文基于李沐老师的 实战 Kaggle 比赛&#xff1a;图像分类 (CIFAR-10) 文章目录 数据格式数据加载标签转化划分数据集查看数据搭建网络主训练函数网络训练 数据格式 CIFAR-10 下载地址&#xff1a;https://www.kaggle.com/competitions/cifar-10/data 下拉到最下面有一个 Do…

JavaScript中的Event(事件)详解

Event 对象 Event 对象代表事件的状态&#xff0c;比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。 事件通常与函数结合使用&#xff0c;函数不会在事件发生前被执行&#xff01; 事件句柄 (Event Handlers) HTML 4.0 的新特性之一是能够使 HTML 事…

Maven uber-jar(带依赖的打包插件)maven-shade-plugin

文章目录 最基础的 maven-shade-plugin 使用生成可执行的 Jar 包 和 常用的资源转换类包名重命名打包时排除依赖与其他常用打包插件比较 本文是对 maven-shade-plugin 常用配置的介绍&#xff0c;更详细的学习请参照 Apache Maven Shade Plugin 官方文档 通过使用 maven-shade…