Java基础--方法

news2024/9/29 21:18:22

前言:介绍 Java 中方法的基本语法、分类、执行并分析参数传值。
关键字:方法、形参、实参、返回值、实例方法、静态方法、参数传值


程序引例–为什么要「方法」

public class IntroduceOfMethod {
    // 入口主方法。
    public static void main(String[] args){
        // 需求1:请编写程序,计算 100 和 200 的和
        int x = 100;
        int y = 200;
        int z = x + y;
        System.out.println(x + "+" + y + "=" + z);

        // 需求2:请编写程序,计算666和888的求和。
        int a = 666;
        int b = 888;
        int c = a + b;
        System.out.println(a + "+" + b + "=" + c);
    }
}

代码分析:需求 1 和需求 2 本质上相同,只是参与运算的数值不同,但是重复编写多行相似代码,复用性差。如果功能/业务逻辑相同,可以借助 Java 语言中的「方法」机制,简化程序。

方法

「方法」本质是一段代码片段,但这段代码重复使用以完成某个特定的功能。

方法定义在类体当中,一个类当中可以定义多个方法,方法定义没有先后顺序

方法体中不能定义方法

语法规则

请添加图片描述

[修饰符列表] 返回值类型 方法名([形式参数列表]){
    方法体;
}

注意:

  1. 中括号 [] 中的内容不是必须的

  2. 方法体由 Java 语句构成

  3. 方法定义后被调用才能执行其中的语句,不调用是不会执行的

返回值

一个方法执行结束之后是需要返回执行结果的,而因为结果通常是一个具体存在的数据,所以被称为返回值

返回值语句分为以下两种:

  1. 返回值是具体的数据,如:1、0.24、true等。返回值的数据类型须和方法定义中返回值类型一致

    return;
    
  2. 方法没有返回值时,返回值类型为 void,表示该方法执行结束后不返回任何结果

    return; // return语句所在的方法结束
    

关于返回值的常见报错

  1. 当返回值类型不是 void(表示方法运行结束后会返回一个具体的数据类型),然而方法运行之后却没有返回一个具体的数据类型
  2. 当返回值类型是 void(表示方法运行结束后不会返回一个具体的数据类型),然而方法运行之后返回了一个具体的数据类型
  3. 缺少返回语句

返回值的接收

当方法有返回值时,可以选择是否不接收。若不接受,返回值仍会返回,只是因为无变量接收,返回后其内存会马上释放。若接收,

需使用变量接收方法的返回值,变量的数据类型与返回值类型保持一致,如:

int a = MethodTest03.sum(100, 200);

对于没有返回值的方法,不能用变量接收,否则收到报错:错误: 不兼容的类型: void无法转换为int

方法名

遵循标识符命名规范,首字母小写,后面每个单词首字母大写(驼峰命名方式);

见名知意,一般是动词。

形式参数列表(形参)

结构:

(数据类型1 变量名1, 数据类型2 变量名2, ……)
  1. 形参的数据类型起决定性作用,变量名只要求是合法的标志符。

  2. 形参的个数是:0~N个,多个形参间用逗号 , 隔开

  3. 形式参数列表中的每一个参数都是局部变量,方法结束之后其内存释放。

  4. 需要对每一个参数进行独立的数据类型声明。例如:maxScore(int num1,int num2) 是正确的,而 maxScore(int num1,num2) 是错误的。

public static void sumInt(){}

public static void sumInt(int x){}

public static void sumInt(int x, int y){}

public static void sum(int a, int b, double d, String s){}

实参参数(实参)

向被调用的方法传递的真实数据被称为实参。

实参和形参须一一对应:类型对应相同(类型不同可以进行数据类型转换),个数相同。

方法体

方法体当中编写的是业务逻辑代码,为了完成某个特定功能。

{} 括起,以 Java 语句构成;

遵循自上而下的顺序依次逐行执行


方法分类

根据修饰符列表中有无 static 可将方法分为实例方法静态方法

实例方法

特点:修饰符列表中无 static

方法调用:必须先创建对象,再调用方法

引用数据类型 引用 = new 构造方法名();

实例方法名(实参);

使用情况:

  1. 如果方法描述行为必须由某个对象触发,那么应定义该方法为实例方法;

  2. 方法体中需直接访问实例变量,则应定义该方法为实例方法

静态方法

特点:修饰符列表中有 static

方法调用: 不需要new对象,直接调用

类名.静态方法名(实参);

负责调用的程序和被调用的方法在同一个类中,调用语句的 类名. 可以省略(类名省略默认从当前类中找方法),否则调用语句的 类名. 必须写

大部分情况下,为了调用方便,工具类中的方法都是静态的。

方法调用语句不一定要写在main方法中,只要是程序可以执行到的位置都可以调用方法


方法的执行

程序从 main 方法开始执行,main 方法由 JVM 自动调用的。

方法只有调用的时候才会执行,方法不调用是不会执行的。

注意:

在其他某些编程语言中,方法称为过程(procedure)或函数(function)。通常,带返回值的方法称为函数,返回值类型为void的方法称为过程。

定义方法声明变量两者的细微差别:定义是指被定义的项目是什么,而声明通常是指为被声明的项目指明所属的类型(分配内存空间)


参数传值

Java 中关于方法调用时的参数传递规则:将变量中保存的传过去,这个值可能是一个 Java 对象的地址值字面值

例题1–字面值

注意两处 i 的输出。

public class Test1{
	public static void main(String[] args){
		int x = 100;
		int y = x; // x赋值给y,是将x变量中保存的100这个值复制一份传给y
		
		int i = 10;
		add(i); 
		System.out.println("main ---> " + i); //10
	}


	public static void add(int i){ // i是局部变量,域是add()方法
		i++;
		System.out.println("add ----> " + i); //11
	}
}

内存分析:
在这里插入图片描述

例题2–引用

注意两处 p.age 的输出

public class Test2{
	public static void main(String[] args){
		Person p = new Person(10);
		add(p);
		System.out.println("main--->" + p.age); //11
	}
	
	public static void add(Person p){
		p.age++;
		System.out.println("add--->" + p.age); //11
	}
}


class Person{
	int age;
	//构造方法
	public Person(int i){
		age = i;
	}	
}

在这里插入图片描述

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

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

相关文章

docker 高级篇

一、DockerFile 1.1、概述 dockerfile 是用来构建docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 为什么要有dockerfile呢 在基础篇我们讲过,比如我们下载个 ubuntu镜像里面不包含 vim、ifconfig等组件,这个时候 新增…

DES加密算法

DES算法原理 对称密码算法中的分组加密算法(对应于流密码) 密钥64位,56位参与运算8位校验位(校验位为:8、16、24、32、40、48、56、64) 加密原理 1. IP置换 将明文数据转化为二进制数,并将它…

Lnix文件权限的修改

首先我们要清楚Linux文件的权限信息 在Linux中输入ls -l 或者 ll查看文件和目录的详细信息 文件详情实例中,a目录的第一个属性用“d”标识这个a是一个目录。 anaconda-ks.cfg第一个属性用“-”标识他是一个文件。 在Linux文件详情的后面属性需要分为三组查看 rwx&am…

三种调用机制: 同步调用、异步调用、回调(同步/异步)

c并发编程-01-并发与并行_发如雪-ty的博客-CSDN博客 c并发编程02-什么是I/O_发如雪-ty的博客-CSDN博客 c并发编程03-I/O多路复用_发如雪-ty的博客-CSDN博客 c并发编程04-同步与异步_发如雪-ty的博客-CSDN博客_c同步和异步 c并发编程05-什么是回调函数_发如雪-ty的博客-CSDN…

Web前端:使用ReactJS构建的应用类型

使用ReactJS,你可以构建各种各样的应用程序,包括单页应用程序、渐进式web应用程序、移动应用程序、仪表板、电子商务平台、企业web应用程序以及社交媒体和消息应用程序。1.单页应用程序(spa)单页应用程序(SPA)基本上是一个网页,它通过使用从w…

MySQL(七):undo日志——保证事务的原子性

目录一、前言1.1 如何回滚事务1.2 事务id1.3 roll pointer 隐藏列1.4 trx_id 隐藏列二、undo日志2.1 undo日志的格式2.2 insert 对应的undo日志2.3 delete 操作对应的undo日志2.4 update操作对应的undo日志2.5 Undo页面链表2.6 undo日志写入过程2.6.1 Undo Log Header2.7 回滚段…

springboot请求参数绑定原理篇

上篇文章写了SpringBoot 参数接收只看这一篇文章就够了,只是写了使用方法,没有写为什么,原理是什么,这篇文章也是之前的预先的计划,稍微花点时间整理下,知其然知其所以然,才算是能彻底掌握&…

如何用IDEA创建SpringBoot项目

一、创建一个 Spring Initializr 工程 next后选择2.7.8版本,勾选以下几个 Web里的spring bootTemplate Engines 里的 ThymeleafSQL里的MyBatis Framework 和 Mysql Driver 然后finish完成 二、配置resources文件 2.1、 application.properties: #??…

Docker容器命令无权限,WEB访问403

问题背景(描述) 部署dockerWeb后,重启访问403,详细如下 docker容器正常运行,且开机自启 #通过如下命令开机自启 docker update --restart always 容器id但是访问web服务出现403. 进入容器后,输入命令提示如下: 解决方案 关闭selinux SELinux(Security-Enhanced…

【网络安全】记一次红队渗透实战项目

前言 【一一帮助安全学习(网络安全面试题学习路线视频教程工具)一一】 一、信息收集 信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集 1、nmap扫描存活IP 由于本项目环境是nat模式需要项目…

【Java基础】——面向对象:封装

【Java基础】——面向对象:封装一、类和对象二、类的结构:属性、方法、构造器1、属性2、方法2.1、方法的定义2.2、方法的重载2.3、可变个数的形参2.4、方法参数的值传递机制3、构造器3.1、构造器的特征3.2、构造器的作用:3.3、构造器重载三、封装与隐藏1…

细菌,真菌,病毒——感染,免疫反应以及治疗用药差异

谷禾健康 与人类密切相关的微生物 我们的世界大到浩瀚宇宙,小到微观下的生物分子。我们总说漫天繁星,其实身边微生物数量可能更多。动物、植物、真菌、细菌、病毒等,共同构成了丰富多彩的生命世界。 细菌、真菌、病毒是其中的三个大类&#x…

spring integration使用:消息路由

系列文章目录 …TODO spring integration开篇:说明 …TODO spring integration使用:消息路由 spring integration使用:消息路由系列文章目录前言消息路由的概念二、路由的分类基于内容的路由器spring integration中的实现RecipientListRoute…

Python property()函数:定义属性

我们一直在用“类对象.属性”的方式访问类中定义的属性,其实这种做法是欠妥的,因为它破坏了类的封装原则。正常情况下,类包含的属性应该是隐藏的,只允许通过类提供的方法来间接实现对类属性的访问和操作。因此,在不破坏…

AOP的四种增强方式

1. 前置增强,在核心功能之前执行的额外功能 public class MyBeforeAdvice implements MethodBeforeAdvice{Overridepublic void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {System.out.print("this is my before advice!");Str…

渲染函数render

文章目录节点、树以及虚拟 DOM树节点虚拟 DOMvue中render函数的作用render函数去创建子组件内容createElement官方文档参考节点、树以及虚拟 DOM 在深入渲染函数之前&#xff0c;了解一些浏览器的工作原理是很重要的。以下面这段 HTML 为例&#xff1a; <div><h1>…

user-select:none真的能禁止文本的复制粘贴吗?

1. 前言 面向搜索引擎开发时&#xff0c;我们经常看到这样的情况&#xff1a;登录后复制。 由于设置了css属性 user-select:none&#xff0c;此时鼠标无法实现选中文本&#xff0c;也就无法复制文本&#xff0c;通常会采用这种方式来禁止复制文本。打开开发者工具-审查元素&am…

k-means聚类

一、概述 当前人工智能技术实现的一种主要手段是机器学习&#xff0c;而机器学习能够解决的问题主要有三种&#xff1a;分类、聚类、回归&#xff0c;有监督的是分类&#xff0c;无监督的是聚类。所谓聚类&#xff0c;就是以一定的方法将一堆样本依它们本身的数据特性划分成不同…

docker安装mongdb

MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。它支持的数据结构非常松散&#xff0c;是类似json的bson格式&#xff0c;因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非…

【操作系统】备忘录

进程上下文切换 用户态、内核态 内核态&#xff1a;也叫内核空间&#xff0c;是内核进程/线程所在的区域。主要负责运行系统、硬件交互。 用户态&#xff1a;也叫用户空间&#xff0c;是用户进程/线程所在的区域。主要用于执行用户程序。 内核态与用户态的区别 内核态与用户…