【Java】java方法详解篇


文章目录

  • 【Java】java方法详解篇
    • 方法
    • void修饰的方法的调用
    • 方法的重载
    • 方法的形参是基本数据类型
    • 方法的形参是引用类型
    • 递归结构

方法

方法:完成特定功能的饿代码块
作用:

  • 提高代码复用性和可维护性
  • 但是并不能提高程序的运行效率

定义格式:

  • 修饰符
  • 返回值类型:用于限定返回值的数据类型
  • 方法名:方法的名字,便于我们调用
  • 参数类型:用于限定调用方法时传入数据的类型
  • 参数名:用于接收调用方法时传入数据的变量(用于告诉方法的使用者,调用该方法时的需要)
  • 方法体:完成我们需要的功能的代码
  • return语句:结束方法,并把返回值传递给调用者
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2……){方法体;return 返回值;
}

注意事项

  • 实参的数目,数据类型和顺序需和所调用的方法声明的形式参数列表匹配
  • return终止方法的运行并指定返回数据
  • java中进行方法调用中传递参数时,遵循值传递的原则(传递的都是数据的副本)
  • 基本数据类型传递的时该数据的copy值
  • 引用数据类型传递的是该对象引用的copy值,但指向的是同一个对象

void修饰的方法的调用

void:

  • 当没有方法返回值时,返回值类型写void

注意:

  • 返回值类型为void的方法只能单独调用
  • void作为返回值类型的方法,可以不写return语句,或使用ruturn;结束方法,
public static void testOne(){System.out.println("HelloWorld");//可以不写return,方法中的代码执行完毕后,方法会自动结束
}
public static void testTwo(){System.out.println("HelloWorld");rerurn;System.out.println("这句话不会执行,因为上面结束了方法");
}
public static void testThree(){System.out.println("HelloWorld");return 0;//void方法不能return值,因为返回值的话必须要有返回值类型
}

方法的重载

方法的重载

  • 英文Overload

  • 概念:在同一个类中,有多个方法名相同,参数列表不同的方法

  • 方法重载的特点

    • 参数个数不同
    • 参数的数据类型不同(包括数据类型相同,但数据顺序不同,例如:int a,double b 和 double b,int a也是不一样的)
  • 方法重载和什么无关

    • 和返回值类型无关
    • 和参数变量名无关
    • 和方法体无关

方法的形参是基本数据类型

  • 方法的形参是基本数据类型,形参的值改变不会影响实际参数

    • 原因:因为形参是在方法内部定义的一个新的局部变量,与方法外的实际参数变量是2个不同的变量,所以互不影响

方法的形参是引用类型

注意

  • 方法的形参是引用数据类型:形参的值改变是否影响实际参数要看引用关系

    • 如果形参是修改自身保存的引用,不会影响实际参数

      • 原因:因为形参是调用方法中的一个单独变量,实际参数是定义在main方法中的另一个单独变量,形参改变其保存的引用指向,并不影响实际参数的引用指向
    • 如果形参是通过引用修改堆内存中保存的数据,会影响实际参数获取的值
      • 原因:因为形参是调用方法中的一个单独变量,实际参数是定义在main方法中的另一个单独变量,形参通过引用修改的是堆内存中的数据,而实际参数也是指向该堆内存中的数据,所以形参修改后,实际参数获取的值也会改变
// 形参是引用数据类型,是否影响实际参数
public class demo{public static void main(String[] args) {// 数组System.out.println("------------修改数组的引用指向------------");int[] arr = {1, 2, 3};System.out.println("原始值: arr=" + Arrays.toString(arr));changeArr(arr);System.out.println("修改后: arr=" + Arrays.toString(arr));System.out.println("------------通过数组引用修改堆内存中数组的元素值------------");System.out.println("原始值: arr=" + Arrays.toString(arr));changeArrElement(arr);System.out.println("修改后: arr=" + Arrays.toString(arr));}// 修改数组的引用: 不会影响实际参数private static void changeArr(int[] arr) {arr = new int[]{999, 999};}// 通过数组变量的引用修改堆内存中数组的元素: 会影响实际参数private static void changeArrElement(int[] arr) {arr[0] = -1;arr[1] = -1;arr[2] = -1;}
}

结果:


递归结构

递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。

利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。

例如

void aa(int a) {if (a<10) {a++;aa(a);}}

递归结构包括两个部分:

  1. 定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
  2. 递归体。解答:什么时候需要调用自身方法。

递归的缺陷
简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。

【Java】Java方法详解篇相关推荐

  1. java函数方法详解(简单易懂)

    方法(函数) 函数的组成是: 访问修饰符 返回值 函数名(形式参数) {函数内容; } 更多java函数方法详解视频课程学习地址:https://ke.qq.com/course/149432  有技 ...

  2. java equals方法详解

    序言:准备总结一些java基础的知识方便以后查阅,从equals入手 目录: 等于(==)详解 equals方法详解 一.等于(==)详解 先明确一点:"==" 其实是存储地址的比 ...

  3. jvm之java内存区域详解篇guide哥yyds

    jvm 一.java内存区域详解 1.运行时数据区域 线程私有的: 虚拟机栈 本地方法栈 程序计数器 线程共享的: 堆 方法区 直接内存(非程序运行时数据区的一部分) 1.1什么是程序计数器 程序计数 ...

  4. java反射机制详解篇一(基础)

    反射基础 首先来看一下最常规的创建对象的方式: ObjectClass clazz = new ObjectClass(); 当程序执行到new ObjectClass的时候,java虚拟机会加载Ob ...

  5. java clone() 方法详解及深克隆与浅克隆

    概述 clone 翻译过来就是 克隆,顾名思义就是创造一个一模一样的事物.Java 代码中 clone() 方法是 Object 方法,而 Object 又是所有类的父类,也就是说所有 java 对象 ...

  6. JAVA toString方法详解

    JAVA toString方法 在Java中,我们经常会编写许多自定义类.在使用时,我们如何打印出这些类中实例变量? class value {private int s;public void se ...

  7. JAVA本地方法详解,什么是JAVA本地方法?

    https://blog.csdn.net/wi__wi/article/details/51085907 前言: JAVA中有两种方法:JAVA方法和本地方法 JAVA方法是由JAVA编写的,编译成 ...

  8. JAVA Calendar方法详解

    究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别在哪呢? 比如有:     月份的定义 - 阳`(公)历 一年12 个月, ...

  9. Java main 方法详解

    1.main方法说起 编译完我们的java文件后,需要有个一含有main方法的类,java 命令将指示操作系统启动一个jvm进程 这个jvm进程启动后,寻找那个main地方开始执行程序 java [J ...

最新文章

  1. 生猛!PDF 版本 万赞 Java 手册开放下载!
  2. 数据字典恢复mysql数据_恢复之数据字典和控制文件不一致的恢复(一)
  3. php项目webpack打包,Vue项目webpack打包部署时Tomcat刷新报404错误问题如何处理
  4. 数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡二叉树
  5. codeforces 962E Byteland, Berland and Disputed Cities 最小生成树变形
  6. LeetCode 9. 回文数
  7. 媒体没谈到的企业即时通讯软件
  8. java属性绑定_java基础:10.1 Java FX与属性绑定
  9. ajax中的application/x-www-form-urlencoded中的使用
  10. Java并发编程实战——并发编程的优缺点
  11. 怎样用计算机绘制幂函数图像,几何画板如何画幂函数的图像
  12. 第一章 复数与复变函数
  13. 阿里云企业邮箱使用步骤
  14. 为什么互联网公司崇尚扁平化管理?
  15. 为什么大学没有前端课程?
  16. 发现一个好用文字云生成器
  17. linux ar3012蓝牙驱动,佳能 Bluetooth AR3012 驱动程序下载-更新佳能软件(蓝牙)
  18. 用go填写pdf模板
  19. 双路服务器芯片组的发展
  20. mysql 增删修模型_48.Python中ORM模型实现mysql数据库基本的增删改查操作

热门文章

  1. 怎么看待SEO?新型SEO与传统SEO对比优势?
  2. IT界6个国内技术大牛博客,全栈工程师修行的秘籍!
  3. 基于虚拟化的混合云集群——基于集群管理监控系统
  4. 鼠标选中后会自动删除文件的现状及解决方案
  5. mastercam数控编程经验分享,建议收藏
  6. Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化
  7. Silanna Semiconductor与Transphorm联合开发一流的65W USB-C PD GaN适配器参考设计
  8. C++小型公司的工资管理系统
  9. Django--Models
  10. 大商创如何重置或修改商家店铺登录密码?