Java方法详解

Java方法详解

    • 方法
      • 1.方法的概念
        • (1).什么是方法
        • (2).方法的定义
        • (3).实参与形参的关系
      • 2.方法重载
        • (1).方法重载的概念
      • 3.递归(C语言详细讲过)

方法

1.方法的概念

(1).什么是方法

方法类似于C语言中的函数,我们重在体会与理解,不必去强硬地去背
1. 是能够模块化的组织代码(当代码规模比较复杂的时候).
2. 做到代码被重复使用, 一份代码可以在多个位置使用.
3. 让代码更好理解更简单.
4. 直接调用现有方法开发, 不必重复造轮子.

(2).方法的定义

我们最早见过的是main方法,我们可以把它作为C语言中的函数去理解
例如: 定义个main方法:

    public static void main(Sting[] args){}//public static(这两个东西不能省略掉) //void是指的是无类型的返回值, main是方法名,其后的括号中是形式参数列表所以我们应定义一个:public static 返回值 方法名(参数类型 形参){方法体代码return(返回值)}

在这里:我要先就关于大驼峰与小驼峰的命名方式先说一下
大驼峰:每个单词的首字母大写: 例如 DemoTest,MyClass
小驼峰:只有第一个单词的首字母大写,后续每个单词的首字母都大写,其余小写 例如:myFunction,userProfile等

示例:判断某年是不是闰年

public static boolean isLeapYear1(int year){if(0 == year % 4 && 0 != year % 100 || 0 == year %400){System.out.println(year + "是闰年");return true;//由于boolean类型,所以需要返回两个值}else{System.out.println(year + "不是闰年");return false;}
}public static void main(String[] args) {Scanner sc = new Scanner (System.in);int year = sc.nextInt();isLeapYear1(year);sc.close();}

注意事项:
1. 修饰符:现阶段直接使用public static 固定搭配
2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成
void
3. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
4. 方法体:方法内部要执行的语句
5. 在java当中,方法必须写在类当中,不能嵌套定义
6. 在java当中,没有方法声明一说,声明必须要在主函数之前,所以我们可以不用在意
7. 一个方法可以多次去调用
示例:

public static void main9(String[] args) {boolean flg1 = isLeapYear3(2025);//2025是实际参数System.out.println(flg1);boolean flg2 = isLeapYear3(2024);//2025是实际参数System.out.println(flg2);
}public static boolean isLeapYear3(int year) {//int year是形式参数if (0 == year % 4 && 0 != year % 100 || 0 == year % 400) {return true;//由于boolean类型,所以需要返回两个值} else {return false;}}  
(3).实参与形参的关系
import  java.util.Scanner;
public static int func1(int x) {int ret = 1;for (int j = 1; j <= x; j++) {ret *= j;}return ret;
}public static void main1(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();int ret = func1(a);System.out.ptrintln(ret);
}        

在Java中,实参的值永远都是拷贝到形参之中,形参和实参本质是两个实体。
但是两者的栈帧并不一样,都是在一个栈空间(虚拟机栈)中,但是所处的区域不同

//老生常谈的例子
//交换变量
//正常版:public static void main2(String[] args){int a = 10;int b = 20;int temp = 0;temp = a;a = b;b =temp;System.out.println(a + " " + b);}//方法版public static void swap4(int x ,int y) {int temp = 0;temp = x;x = y;y =temp;}//当这个方法走完,那么也就是把x和y的变量的值进行交换完成。//但是也只是把它们被赋予的值进行交换完成//对于a和b的本身没有任何影响public static void main3(String[] args){int a = 10;int b = 20;//a和b的局部变量//作用域:在方法中//生命周期:调用方法的创建,方法调用结束的时候来销毁//内存:储存在栈上//Java中由于其安全性,不会让你拿到局部变量的地址System.out.println("交换前"+ a + " " + b);//swap(a,b);System.out.println("交换后"+ a + " " + b);}

就目前来看,学完类和对象才能知道怎么交换,Java中没有指针这一个概念;
但是有引用这一个概念,“引用”叫做引用变量;引用变量中存入的是地址。
数组就是一个引用变量
当一个方法没有返回值,所以我们就要用void类型来接收

2.方法重载

(1).方法重载的概念

在Java中如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。

//    public static int addInt(int x,int y){
//        return x + y;
//    }
//
//    public static double addDouble (double x,double y){
//        return x + y;
//    }//这时候方法里的名字不一样,所以我们可以创建新的方法名从而计算。//当然这不是方法重载public static void main(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();
//        System.out.println(addInt(a, b));//System.out.println(add(a, b));double c1 = sc.nextDouble();double c2 = sc.nextDouble();
//        System.out.println(addDouble(c1,c2));//System.out.println(add(c1,c2));sc.close();}public static int add(int x,int y){return x + y;}public static double add(double x,double y){return (int)(x + y);//这么做强制转化,如果仅仅是返回值不同,这种仅有返回值改变,那么这就不叫做方法重载}//这部分方法的操作叫做重载,只有一个名字都是add

方法重载:
1.方法名相同
2.参数列表不同【数据类型,变量个数,顺序】
3.返回值不影响重载

3.递归(C语言详细讲过)

必要条件:
1.将原问题转为多个子问题,(子问题必须要与原问题解法相同)
2.递归出口

public static int func(int n){if(n == 1 || n == 0){return 1;}int ret = n * func(n-1);return ret;}public static void main5(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();System.out.println(func(5));}    

调用栈:
方法调用的时候,会有一个“栈”这样的内存空间描述当前的调用关系,称为调用栈.
每一次的方法调用就称为一个 “栈帧”, 每个栈帧中包含了这次调用的参数是哪些, 返回到哪里继续执行等信息.

按顺序打印1 2 3 4

public static void print (int n){if(n > 9){print(n / 10);}//当n为一个数时,那么可以直接打印System.out.print(n % 10 + " ");}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();print(n);}

求斐波那契数列第N项数

public static int funca(int n) {/*if(n <= 2)*/if(n == 1 || n == 2){return 1;//这两种写法均可以}else {return  funca(n - 1) + funca(n - 2);}
}public static void main8(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();System.out.println(funca(n));}

这个代码不适合用递归去写,程序执行速度极慢. 原因是进行了大量的重复运算.

//迭代写法
public static long funcaA(long n){long a = 1;long b = 1;long c = 1;while(n > 2){c = a + b;a = b;b = c;n--;}return c;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);long n = sc.nextInt();System.out.println(funcaA(n));}//后续:在二叉树我们经常需要使用递归去解决问题```
好了,今天我们就分享到这里了,如果有什么不足,劳烦大家帮忙在评论区指出,谢谢大家了!让我们下一次见!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:二叉树的链式结构及相关算法详解

目录 一.链式结构的实现 1.二叉树结点基本结构&#xff0c;初始化与销毁&#xff1a; 二.链式结构二叉树的几种遍历算法 1.几种算法的简单区分&#xff1a; 2.前序遍历&#xff1a; 3.中序遍历&#xff1a; 4.后序遍历&#xff1a; 5.层序遍历&#xff08;广度优先遍历B…

动态规划/贪心算法

一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术&#xff0c;尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题&#xff0c;并保存这些子问题的解以避免重复计算&#xff0c;从而提高效率。 动态规划的核心思想 最优子结…

【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】

一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…

软考中级-数据库-3.2 数据结构-数组和矩阵

数组 一维数组是长度固定的线性表&#xff0c;数组中的每个数据元素类型相同。n维数组是定长线性表在维数上的扩张&#xff0c;即线性表中的元素又是一个线性表。 例如一维数组a[5][a1,a2,a3,a4,a5] 二维数组a[2][3]是一个2行2列的数组 第一行[a11,a12,a13] 第二行[a21,a22,a23…

android亮灭屏流程分析

前言 亮灭涉及的东西非常多&#xff0c;因此单独写一个文档&#xff0c;进行详细说明&#xff0c;亮灭屏包括的东西不只是亮灭屏&#xff0c;还包括亮度调节、屏幕状态变化等东西。本文仅作学习使用&#xff0c;不涉及商业&#xff0c;侵权请联系删除。 framework层的学习链接…

V4L2框架基础

一、V4L2视频设备驱动基础 1.V4L2是专门为Linux设备设计的整合视频框架&#xff08;其主要核心在Linux内核&#xff0c;相当于Linux操作系统上层的视频源捕获驱动框架&#xff09;。为上层访问系统底层的视频设备提供一个统一的标准接口。V4L2驱动框架能够支持多种类型&#x…

C# 多线程

概述 进程和线程 进程&#xff1a;指在系统中运行的一个应用程序。 线程&#xff1a;进程中的一个执行任务。一个进程至少有一个线程&#xff0c;一个进程可以有多个线程&#xff0c;多个线程可共享数据。 多线程 多线程&#xff1a;在一个程序中同时运行多个线程&#xff0…

突破光学成像局限:全视野光学血管造影技术新进展

全视野光学血管造影&#xff08;FFOA&#xff09;作为一种实时、无创的成像技术&#xff0c;能够提取生物血液微循环信息&#xff0c;为深入探究生物组织的功能和病理变化提供关键数据。然而&#xff0c;传统FFOA成像方法受到光学镜头景深&#xff08;DOF&#xff09;的限制&am…

Deepgram推出Nova-3 Medical,AI语音转录助力医疗行业

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

centOS 环境 安装redis方法

一、准备centOS环境 参考文章&#xff1a;Hyper-V 安装CentOS7_代码草率了的博客-CSDN博客 二、redis官网 地址&#xff1a;Download | Redis 演示版本为?redis-5.0.14.tar.gz 三、redis源码编译 登录后创建soft目录 进入目录使用wget下载所需资源包 命令&#xff1a;w…

[51 单片机] --串口编程

1&#xff0c;通讯方式基本概念 1&#xff0c;按照 --> 数据传送方式串行通讯&#xff1a;使用一条数据线&#xff0c;将数据一位一位地依次传输&#xff0c;每一位数据占据一个固定的时间长度&#xff0c;串行通信的特点&#xff1a;传输线少&#xff0c;长距离传送时成本…

Golang的微服务服务发现机制

## 1. Golang微服务服务发现机制 微服务架构已经成为当今软件开发的主流趋势&#xff0c;它能将复杂的单体应用拆分成小而独立的服务单元&#xff0c;实现更快的开发、部署和扩展。在微服务架构中&#xff0c;服务发现是非常重要的一环&#xff0c;它能够实现服务之间的自动发现…

Python 创建地形图

原始地 DEM。 火山口湖 (OR) 区域的起始 DEM。数据来自 NASA DEM 本身非常美丽&#xff0c;但我们先进行分层。 将自定义色彩图应用于 DEM 对于我在 ArcGIS Pro 版本中所做的初始高程样式着色&#xff0c;我使用了“高程 #7”。在 matplotlib 中可用的标准颜色图中&#xff…

《Operating System Concepts》阅读笔记:p180-p187

《Operating System Concepts》学习第 20 天&#xff0c;p180-p187 总结&#xff0c;总计 8 页。 一、技术总结 1.forke-join A strategy for thread creation in which the main parent thread creates (forks) one or more child threads and then waits for the children…

文心4.5,大模型下半场的野心之作

2025年开年&#xff0c;全球大模型竞赛进入白热化阶段。2月28日&#xff0c;百度宣布其文心大模型4.5将于3月16日正式上线&#xff0c;强调其原生多模态与深度思考能力&#xff0c;并计划于6月30日开源。这一动作不仅标志着百度技术路线的重大转向&#xff0c;更被视为中国大模…

transformer架构解析{前馈全连接层,规范化层,子层(残差)连接结构}(含代码)-4

目录 前言 前馈全连接层 学习目标 什么是前馈全连接层 前馈全连接层的作用 前馈全连接层代码实现 规范化层 学习目标 规范化层的作用 规范化层的代码实现 子层&#xff08;残差&#xff09;连接结构 学习目标 什么是子层&#xff08;残差&#xff09;连接结构 子层连…

Django视图与URLs路由详解

在Django Web框架中&#xff0c;视图&#xff08;Views&#xff09;和URLs路由&#xff08;URL routing&#xff09;是Web应用开发的核心概念。它们共同负责将用户的请求映射到相应的Python函数&#xff0c;并返回适当的响应。本篇博客将深入探讨Django的视图和URLs路由系统&am…

串口通讯基础

第1章 串口的发送和接收过程 1.1 串口接收过程 当上位机给串口发送(0x55)数据时&#xff0c;MCU的RX引脚接受到&#xff08;0x55&#xff09;数据&#xff0c;数据(0x55)首先进入移位寄存器。数据全部进入移位寄存器后&#xff0c;一次将&#xff08;0x55&#xff09;全部搬运…

kakfa-3:ISR机制、HWLEO、生产者、消费者、核心参数负载均衡

1. kafka内核原理 1.1 ISR机制 光是依靠多副本机制能保证Kafka的高可用性&#xff0c;但是能保证数据不丢失吗&#xff1f;不行&#xff0c;因为如果leader宕机&#xff0c;但是leader的数据还没同步到follower上去&#xff0c;此时即使选举了follower作为新的leader&#xff…

基于Linux系统的物联网智能终端

背景 产品研发和项目研发有什么区别&#xff1f;一个令人发指的问题&#xff0c;刚开始工作时项目开发居多&#xff0c;认为项目开发和产品开发区别不大&#xff0c;待后来随着自身能力的提升&#xff0c;逐步感到要开发一个好产品还是比较难的&#xff0c;我认为项目开发的目的…