教妹学Java(二十四):一文了解 Java 中的方法

article/2025/8/26 16:24:32

你好呀,我是沉默王二,CSDN 排名前十的博客专家。这是《教妹学 Java》专栏的第二十四篇,我们来了解一下 Java 中的方法——什么是方法?如何声明方法?方法有哪几种?什么是实例方法?什么是抽象方法?

本专栏中的代码已收录到 GitHub github.com/itwanger ,里面还有我精心为你准备的一线大厂面试题。

三妹上的洛阳理工,校区离我家很近, 所以每逢周末她都会来我家,让我辅导她学习 Java。作为一名拥有十余年编程经验的程序员,以及父母给我们的这份血缘关系,我觉得义不容辞。

“二哥,这次我们要学习的内容是‘方法’,对吧?”看来三妹已经提前预习了我上次留给她的作业。

“是的,三妹。通常,一个方法可以用执行一些任务,同样的,Java 中的方法是用来执行特定任务的指令集合。”

01、Java 中的方法是什么?

方法用来实现代码的可重用性,我们编写一次方法,并多次使用它。通过增加或者删除方法中的一部分代码,就可以提高整体代码的可读性。

只有方法被调用时,它才会执行。Java 中最有名的方法当属 main() 方法,点击下面的链接可以关于 main() 方法的知识点。

https://qingmiaogu.blog.csdn.net/article/details/104000411

02、如何声明方法?

方法的声明反映了方法的一些信息,比如说可见性、返回类型、方法名和参数。如下图所示。

访问权限:它指定了方法的可见性。Java 提供了四种访问权限修饰符:

  • public:该方法可以被所有类访问。
  • private:该方法只能在定义它的类中访问。
  • protected:该方法可以被同一个包中的类,或者不同包中的子类访问。
  • default:该方法如果没有使用任何访问权限修饰符,Java 默认它使用 default 修饰符,该方法只能被同一个包中类可见。

返回类型:方法返回的数据类型,可以是基本数据类型、对象和集合,如果不需要返回数据,则使用 void 关键字。

方法名:方法名最好反应出方法的功能,比如,我们要创建一个将两个数字相减的方法,那么方法名最好是 subtract。

方法名最好是一个动词,并且以小写字母开头。如果方法名包含两个以上单词,那么第一个单词最好是动词,然后是形容词或者名词,并且要以驼峰式的命名方式命名。比如:

  • 一个单词的方法名:sum()
  • 多个单词的方法名:stringComparision()

一个方法可能与同一个类中的另外一个方法同名,这被称为方法重载。

参数:参数被放在一个圆括号内,如果有多个参数,可以使用逗号隔开。参数包含两个部分,参数类型和参数名。如果方法没有参数,圆括号是空的。

方法签名:每一个方法都有一个签名,包括方法名和参数。

方法体:方法体放在一对花括号内,把一些代码放在一起,用来执行特定的任务。

02、方法有哪几种?

方法可以分为两种,一种叫预先定义方法,一种叫用户自定义方法。

1)预先定义方法

Java 提供了大量预先定义好的方法供我们调用,也称为标准类库方法,或者内置方法。比如说 String 类的 length()equals()compare() 方法,以及我们在初学 Java 阶段最常用的 println() 方法,用来在控制台打印信息。

/*** @author 微信搜「沉默王二」,回复关键字 PDF*/
public class PredefinedMethodDemo {public static void main(String[] args) {System.out.println("沉默王二,一枚有趣的程序员");}
}

在上面的代码中,我们使用了两个预先定义的方法,main() 方法是程序运行的入口,println() 方法是 PrintStream 类的一个方法。这些方法已经提前定义好了,所以我们可以直接使用它们。

我们可以通过集成开发工具查看预先定义方法的方法签名,当我们把鼠标停留在 println() 方法上面时,就会显示下图中的内容:

println() 方法的访问权限修饰符是 public,返回类型为 void,方法名为 println,参数为 String x,以及 Javadoc(方法是干嘛的)。

预先定义方法让编程变得简单了起来,我们只需要在实现某些功能的时候直接调用这些方法即可,不需要重新编写。

2)用户自定义方法

当预先定义方法无法满足我们的要求时,就需要自定义一些方法,比如说,我们来定义这样一个方法,用来检查数字是偶数还是奇数。

public static void findEvenOdd(int num) {if (num % 2 == 0) {System.out.println(num + " 是偶数");} else {System.out.println(num + " 是奇数");}
}

方法名叫做 findEvenOdd,访问权限修饰符是 public,并且是静态的(static),返回类型是 void,参数有一个整形(int)的 num。方法体中有一个 if else 语句,如果 num 可以被 2 整除,那么就打印这个数字是偶数,否则就打印这个数字是奇数。

方法被定义好后,如何被调用呢?

/*** @author 微信搜「沉默王二」,回复关键字 PDF*/
public class EvenOddDemo {public static void main(String[] args) {findEvenOdd(10);findEvenOdd(11);}public static void findEvenOdd(int num) {if (num % 2 == 0) {System.out.println(num + " 是偶数");} else {System.out.println(num + " 是奇数");}}
}

main() 方法是程序的入口,并且是静态的,那么就可以直接调用同样是静态方法的 findEvenOdd()

当一个方法被 static 关键字修饰时,它就是一个静态方法。换句话说,静态方法是属于类的,不属于类实例的(不需要通过 new 关键字创建对象来调用,直接通过类名就可以调用)。

03、什么是实例方法?

没有使用 static 关键字修饰,但在类中声明的方法被称为实例方法,在调用实例方法之前,必须创建类的对象。

/*** @author 微信搜「沉默王二」,回复关键字 PDF*/
public class InstanceMethodExample {public static void main(String[] args) {InstanceMethodExample instanceMethodExample = new InstanceMethodExample();System.out.println(instanceMethodExample.add(1, 2));}public int add(int a, int b) {return a + b;}
}

add() 方法是一个实例方法,需要创建 InstanceMethodExample 对象来访问。

实例方法有两种特殊类型:

  • getter 方法
  • setter 方法

getter 方法用来获取私有变量(private 修饰的字段)的值,setter 方法用来设置私有变量的值。

/*** @author 沉默王二,一枚有趣的程序员*/
public class Person {private String name;private int age;private int sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}
}

getter 方法以 get 开头,setter 方法以 set 开头。

04、什么是抽象方法?

没有方法体的方法被称为抽象方法,它总是在抽象类中声明。这意味着如果类有抽象方法的话,这个类就必须是抽象的。可以使用 atstract 关键字创建抽象方法和抽象类。

/*** @author 微信搜「沉默王二」,回复关键字 PDF*/
abstract class AbstractDemo {abstract void display();
}

当一个类继承了抽象类后,就必须重写抽象方法:

/*** @author 微信搜「沉默王二」,回复关键字 PDF*/
public class MyAbstractDemo extends AbstractDemo {@Overridevoid display() {System.out.println("重写了抽象方法");}public static void main(String[] args) {MyAbstractDemo myAbstractDemo = new MyAbstractDemo();myAbstractDemo.display();}
}

输出结果如下所示:

重写了抽象方法

05、ending

“二哥,结束了吗?我还想学呢?”三妹虽然精神焕发,没有丝毫的疲惫,但我已经犯困了。

“三妹啊,哥要休息会,咱们下次再学好不好?”我站起来,转了转僵硬的脖子。。。。。。与此同时,耳朵的右后方传来了几声“叭叭叭”的声音。

二哥肝了两天两夜,《程序员不可或缺的软实力》第一版强势来袭,纯手敲,足足 20 万字精华文章,贯穿了我十余年的编程生涯,涉及到了生活和工作中的方方面面,如果你是迷茫的在校大学生,或者刚入职的新人,相信我的个人经历,可以给你带去一些思考,从而树立起正确的人生观和价值观。

那这份 PDF 该怎么获取呢?

链接:https://pan.baidu.com/s/1TA3txLvHxQNJEOJUHSZEqQ 密码:ps7z

如链接失效,请转至备用链接:https://shimo.im/docs/pJQv6qVcHqdYwrxx

最后,真心希望这份 PDF 能够对大家起到实质性的帮助,我也会在后面不断完善这本电子书,敬请期待。


http://chatgpt.dhexx.cn/article/sdAqbSxj.shtml

相关文章

java方法详解

java方法:(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集,并且能实现达到代码复用的效果 java方法包含于类或对象中(在面向对象的时候我们就知道,其实类和对象是…

【Java】保姆级“方法“教学

目录 一、前言 二、方法 1、方法的概述 2、方法的定义和调用 格式1: 示例图1: 示例图2: 代码1: 代码2: 格式2: 修饰符访问权限范围: 本章主要内容: 3、带参数方法的定义和调用 方法定…

java方法(超详细)

一、概述 方法,也称函数,如果想要重复一段或者多段代码块的使用,可以将这些代码封装成一个方法,方法具体表现为某种行为,使用方法可以提高代码的复用性。 二、方法的声明 1.组成 访问权限符 返回值 方法名&#x…

【自然语言处理】3. NMT机器翻译案例实战(基于TensorFlow Addons Networks with Attention Mechanism)

NLP系列讲解笔记 本专题是针对NLP的一些常用知识进行记录,主要由于本人接下来的实验需要用到NLP的一些知识点,但是本人非NLP方向学生,对此不是很熟悉,也是因为本人对NLP灰常感兴趣,想扎进去好好研究研究,所…

使用NMT和pmap解决JVM资源泄漏问题

NMT NMT是Native Memory Tracking的缩写,一个JDK自带的小工具,用来跟踪JVM本地内存分配情况(本地内存指的是non-heap,例如JVM在运行时需要分配一些辅助数据结构用于自身的运行)。 NMT功能默认关闭,可以在J…

机器翻译-subword-nmt预处理语料

在机器翻译中,目前都采用的方法是bpe切分子词的方法来处理翻译中的未登录词。 如何使用? https://github.com/rsennrich/subword-nmt这里面已经写了详细的方法,本文主要记录我处理中英语料时的步骤。 1.共享词典 直接clone了这个项目&…

学习CANopen --- [3] NMT报文

本文主要讲述CANopen中的NMT报文,即网络管理(Network ManagemenT),该服务可以用于启动网络和监控设备。 NMT报文由NMT主机发送,对从机进行启动、监控和重启,在CANopen网络中只允许有一个活动的NMT主机。如…

论文引介 | NMT with Conditional Sequence Generative Adversarial Nets

文章原名:Improving Neural Machine Translation with Conditional Sequence Generative Adversarial Nets 作者:Zhen Yang, Wei Chen, Feng Wang and Bo Xu 单位:Institute of Automation, Chinese Academy of Sciences 译者:韩旭…

NMT对抗训练的三部曲

来自:天宏NLP 进NLP群—>加入NLP交流群 本文主要介绍NMT模型鲁棒性的相关改进工作,介绍一下对抗训练的三部曲,一作皆是ChengYong,分别中了2018,2019和2020的ACL。 第一项工作为 Towards Robust Neural Machine Tran…

手把手教你用fairseq训练一个NMT机器翻译系统

以构建英-中NMT为例,在linux上运行,fairseq版本为0.8.0 环境准备 Requirements: fairseq:pytorch包,包括许多网络结构,https://github.com/pytorch/fairseqmosesdecoder:机器翻译的标准数据处…

00_NMT网络管理的模块控制

目录 NMT服务 NMT错误控制 NMT 节点守护 HeartBeat Message 心跳报文 NMT Boot-up 在can网络中,只有主站可以发送控制信息,来控制从站,从站不需要发送对网络控制消息的响应消息。 网络管理系统负责初始化、启动及停止网络及网络中的设备…

Canopen协议 (1):网络状态管理(NMT)

工控应用中,常常会遇到一些设备:电机或者其他传感器需要通过Can 这个硬件接口来通信,而且往往通信协议都是走的都是Canopen协议。自己当初搞的时候对协议也是云里雾里,为了大家不走歪路,早日走上人生巅峰,这…

canopen学习总结(一)——NMT网络管理

[1] NMT网络管理 [1-1]概念: NMT到底是啥? 答:简单理解就是由一台主机来管理从机,主机可以控制从机的状态。 那么机器到底有哪些状态呢? 答:看下面这图,总共就这些状态 [1-2]命令&#xff1…

NMT

1)刚开始时,在RNN的基础上引入attention,即将两者结合应用,完整解释并附上完整code。详见下链接: 基于RNNAttention的机器翻译 2)接着,Facebook在CNN的基础上引入attention,参见论…

Neural Machine Translation(NMT)技术概述

在神经网络语言模型处理NLP领域,我做的研究一直都和文本分类相关,其实还有很多其他的应用领域,比方说:语言翻译、词性标注、命名实体识别等。感觉还是有必要了解一下如何用神经网络语言模型对这些应用进行建模的。因此&#xff0c…

NMT with Attention

1.数据准备 termcolor.colered 对输出进行染色,凸显。colored(f"tokenize(hello): ", green) from termcolor import colored import random import numpy as npimport trax from trax import layers as tl from trax.fastmath import numpy as fastnp …

CANopen通信之NMT通信

在介绍NMT通信机制之前,先介绍一下NMT这个通信对象的定义。在以下部分中COB-ID使用的是 CANopen 预定义连接集中已定义的缺省标志符。 1) NMT 模块控制( NMT Module Control) 只有 NMT-Master 节点能够传送 NMT Module Control 报文。 所有从…

NMT:神经网络机器翻译

前言 SMT是在神经网络之前最主流的翻译模式,统计机器翻译;NMT则是基于神经网络的翻译模式,也是当前效果最好的翻译模式。现在基于几篇paper来梳理下神经网络下的翻译模型。 NMT based RNN 1) First End-to-End RNN Trial   2014年&…

神经机器翻译(Neural machine translation, NMT)学习笔记

神经机器翻译(Neural machine translation, NMT)是最近提出的机器翻译方法。与传统的统计机器翻译不同,NMT的目标是建立一个单一的神经网络,可以共同调整以最大化翻译性能。最近提出的用于神经机器翻译的模型经常属于编码器-解码器…

Java本机内存跟踪NMT实战详解

JVM通常会额外分配内存。这些额外的分配,会导致java程序占用的内存,超出-Xmx的限制。让我们使用NMT查看内存的使用情况 NMT 是什么 NMT 是一种 Java Hotspot VM 功能,用于跟踪 HotSpot VM 的内部内存使用情况。您可以使用该jcmd实用程序访问…