Java方法详解

什么是方法?

Java方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

示例:

  1. package com.wmwx.method;
  2. public class Demo01 {
  3. //main方法
  4. public static void main(String[] args) {
  5. int sum = add(1, 2); //调用add方法
  6. System.out.println(sum);
  7. }
  8. //add方法 实现加法功能
  9. public static int add(int a, int b){
  10. return a+b;
  11. }
  12. }

方法的优点

Java中的方法有以下几个优点:

  • 使程序变得更简短而清晰。
  • 有利于程序维护。
  • 可以提高程序开发的效率。
  • 提高了代码的重用性。

方法的设计原则

设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。

方法的定义

其基本语法为:

  1. 修饰符 返回值类型 方法名(参数类型 参数名){
  2. ...
  3. 方法体
  4. ...
  5. return 返回值;
  6. }

Java的方法包含一个方法头和一个方法体,类似于其他语言中的函数,是一段用来完成特定功能的代码片段。以下是一个方法的所有组成部分:

  • 修饰符:可选,告诉编译器如何调用该方法,定义了该方法的访问类型
  • 返回值类型 :方法可能会有返回值,那么该返回值的数据类型就是该方法的返回值类型。有些方法执行所需的操作,但没有返回值。在这种情况下,方法的返回值类型使用关键字void
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
  • 参数类型:参数像是一个占位符,又被称为形参。当方法被调用时,传递值给参数,这个值被称为实参。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,一个方法可以不包含任何参数。
  • 方法体:方法体包含具体的语句,定义该方法的功能。

例图:

方法的调用

Java 支持两种调用方法的方式,根据方法是否返回值来选择。

  1. 当方法返回一个的时候,方法调用通常被当做一个
  2. 如果方法返回值是void,方法调用一定是一条语句

示例:

  1. package com.wmwx.method;
  2. public class Demo02 {
  3. public static void main(String[] args) {
  4. int maxNum = max(10, 20); //调用有返回值的max方法,作为赋给变量maxNum的值
  5. System.out.println(maxNum);
  6. }
  7. //定义有返回值的max方法
  8. public static int max(int num1, int num2){
  9. int result = 0;
  10. if (num1==num2){
  11. System.out.println("两数相等!");
  12. return num1;
  13. }
  14. if (num1>num2){
  15. result = num1;
  16. }else{
  17. result = num2;
  18. }
  19. return result;
  20. }
  21. }

方法的重载

重载:如果一个类的多个方法拥有相同的方法名,但是有不同的参数列表,那么Java编译器会根据方法签名判断哪个方法应该被调用。

方法重载的规则:

  1. 方法名称必须相同
  2. 参数列表必须不同(如:个数不同、参数不同、参数排列顺序不同等)。
  3. 方法的返回类型可以相同,也可以不同
  4. 仅仅返回类型不同不足以成为方法的重载

示例:

  1. package com.wmwx.method;
  2. public class Demo03 {
  3. public static void main(String[] args) {
  4. int maxNum1 = max(10, 20); //调用有整数类型参数的max方法
  5. System.out.println(maxNum1);
  6. double maxNum2 = max(10.0, 20.0); //调用有浮点类型参数的max方法
  7. System.out.println(maxNum2);
  8. }
  9. //定义有整数类型参数的max方法
  10. public static int max(int num1, int num2){
  11. int result = 0;
  12. if (num1==num2){
  13. System.out.println("两数相等!");
  14. return num1;
  15. }
  16. if (num1>num2){
  17. result = num1;
  18. }else{
  19. result = num2;
  20. }
  21. return result;
  22. }
  23. //重载:
  24. //定义有浮点类型参数的max方法
  25. public static double max(double num1, double num2){
  26. double result = 0;
  27. if (num1==num2){
  28. System.out.println("两数相等!");
  29. return num1;
  30. }
  31. if (num1>num2){
  32. result = num1;
  33. }else{
  34. result = num2;
  35. }
  36. return result;
  37. }
  38. }

命令行传参

有的时候,希望一个程序在运行时再给它传递消息,这时就需要传递命令行参数给main方法进行实现。

示例:

  1. package com.wmwx.method;
  2. public class Demo04 {
  3. public static void main(String[] args) {
  4. for (int i = 0; i < args.length; i++) {
  5. System.out.println("args["+i+"]: "+args[i]);
  6. }
  7. }
  8. }

可变参数/不定项参数

从Java5 开始,Java支持传递同类型的可变参数(又叫不定项参数)给一个方法。

方法的可变参数的声明如下所示:

  1. typeName... parameterName
  2. //即:在方法声明中,在指定参数类型后加一个省略号(...)

注意:

  • 一个方法中只能指定一个可变参数。
  • 可变参数必须是方法的最后一个参数。
  • 任何普通的参数必须在可变参数之前声明。

示例:

  1. package com.wmwx.method;
  2. public class Demo05 {
  3. public static void main(String[] args) {
  4. //调用可变参数的方法
  5. printMax();
  6. printMax(12, 13.6, 22.5, 18.7, 16.0);
  7. printMax(new double[]{12, 13.6, 22.5, 18.7, 16.0});
  8. }
  9. public static void printMax(double...numbers){
  10. if (numbers.length == 0){
  11. System.out.println("没有传入数据!");
  12. return;
  13. }
  14. double result = numbers[0];
  15. //找出最大值
  16. for (int i=1;i<numbers.length;i++){
  17. if (numbers[i]>result){
  18. result = numbers[i];
  19. }
  20. }
  21. System.out.println("最大的数是"+result+"!");
  22. }
  23. }

递归

定义:程序调用自身的编程方式称为递归。

利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包括两部分:

  1. 递归头:什么时候不调用自身方法。如果没有递归头,将造成死循环
  2. 递归体:什么时候调用自身方法。

示例:

  1. package com.wmwx.method;
  2. public class Demo06 {
  3. public static void main(String[] args) {
  4. System.out.println(factorial(5));
  5. }
  6. //求阶乘
  7. public static int factorial(int n){
  8. if (n==1){
  9. return 1;
  10. }else{
  11. return n*factorial(n-1); //递归调用
  12. }
  13. }
  14. }

Java方法详解的更多相关文章

  1. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  2. java 方法详解

    什么是方法 方法的定义和调用 值传递与引用传递 值传递:指的是在方法调用时,传递的是参数是按值的拷贝传递. 特点:传递的是值的拷贝,也就是传递后就互不相关了. 引用传递:指的是在方法调用时,传递的参数 ...

  3. 21.java方法详解

    public class MethondTest07{ //入口 public static void main(String[] args){ A.m1(); //error:若方法名字的前面什么都 ...

  4. JAVA 注解的几大作用及使用方法详解

    JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...

  5. Java提高篇——equals()与hashCode()方法详解

    java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...

  6. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  7. Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  8. 使用Java操作文本文件的方法详解

    使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...

  9. java基础(十六)----- equals()与hashCode()方法详解 —— 面试必问

    本文将详解 equals()与hashCode()方法 概述 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) publi ...

随机推荐

  1. 2014-2015 ACM-ICPC, NEERC, Southern Subregional Contest 题解(PART)(9/13)

    $$2014-2015\ ACM-ICPC,\ NEERC,\ Southern\ Subregional\ Contest$$ A Nasta Rabbara B Colored Blankets ...

  2. Codeforces Round #345 (Div. 1) C. Table Compression (并查集)

    Little Petya is now fond of data compression algorithms. He has already studied gz, bz, zip algorith ...

  3. hdu 6867 Tree 2020 Multi-University Training Contest 9 dfs+思维

    题意: 给你一个由n个点,n-1条有向边构成的一颗树,1为根节点 下面会输入n-1个数,第i个数表示第i+1点的父节点.你可以去添加一条边(你添加的边也是有向边),然后找出来(x,y)这样的成对节点. ...

  4. tkinter 实现爬虫的UI界面

    使用python的内置模块tkinter编写了爬取51Ape网站(无损音乐的百度云链接)的UI界面 tkinter入门简单, 但同时在编写的过程中因为文档的缺少很不方便. 下面是UI界面模块的编写,由 ...

  5. PowerShell随笔6---ISE

    简单的命令可以通过控制台窗口输入执行,但是我的脚本逻辑复杂,需要保存.总不能在命令行工具中执行吧. 关了窗口,啥都没了.有没有一个IDE,有. 在PowerShell命令行窗口中输入:ISE,就会打开 ...

  6. Python3.7.9+Locust1.4.3版本性能测试工具案例分享

    一.Locust工具介绍 1.概述 Locust是一款易于使用的分布式负载测试工具,完全基于事件,使用python开发,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gev ...

  7. OpenStack Train版-8.安装neutron网络服务(控制节点)

    安装neutron网络服务(controller控制节点192.168.0.10) 创建neutron数据库 mysql -uroot CREATE DATABASE neutron; GRANT A ...

  8. KEIL + STM32 续

    接上一篇,debug出现问题 1.手动安装STM32 芯片包   Keil.STM32F1xx_DFP.2.2.0.pack; https://www.keil.com/dd2/Pack/ 百度网盘  ...

  9. 2018ACM上海大都会赛 F Color it【基础的扫描线】

    题目:戳这里 题意:有n*m个点全为白色,q个圆,将q个圆内所有的点都染成黑色,问最后剩下多少白色的点. 解题思路:每一行当做一个扫描线,扫描所有的圆,记录每一行在圆中的点即可,O(n*q). 附ac ...

  10. Keras 报错: Error when checking target: expected dense_4...

    笔者此处是一个回归任务, 最后一层是: ... pred = Dense(1)(x) 在最后一个Dense层前加上x = Flatten()(x)即可.