Java方法详解

什么是方法?

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

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

示例:

package com.wmwx.method;

public class Demo01 {
//main方法
public static void main(String[] args) {
int sum = add(1, 2); //调用add方法
System.out.println(sum);
} //add方法 实现加法功能
public static int add(int a, int b){
return a+b;
}
}

方法的优点

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

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

方法的设计原则

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

方法的定义

其基本语法为:

修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}

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

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

例图:

方法的调用

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

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

示例:

package com.wmwx.method;

public class Demo02 {
public static void main(String[] args) {
int maxNum = max(10, 20); //调用有返回值的max方法,作为赋给变量maxNum的值
System.out.println(maxNum);
} //定义有返回值的max方法
public static int max(int num1, int num2){
int result = 0;
if (num1==num2){
System.out.println("两数相等!");
return num1;
}
if (num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
}

方法的重载

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

方法重载的规则:

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

示例:

package com.wmwx.method;

public class Demo03 {
public static void main(String[] args) {
int maxNum1 = max(10, 20); //调用有整数类型参数的max方法
System.out.println(maxNum1);
double maxNum2 = max(10.0, 20.0); //调用有浮点类型参数的max方法
System.out.println(maxNum2);
} //定义有整数类型参数的max方法
public static int max(int num1, int num2){
int result = 0;
if (num1==num2){
System.out.println("两数相等!");
return num1;
}
if (num1>num2){
result = num1;
}else{
result = num2;
}
return result;
} //重载:
//定义有浮点类型参数的max方法
public static double max(double num1, double num2){
double result = 0;
if (num1==num2){
System.out.println("两数相等!");
return num1;
}
if (num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
}

命令行传参

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

示例:

package com.wmwx.method;

public class Demo04 {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]: "+args[i]);
}
}
}

可变参数/不定项参数

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

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

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

注意:

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

示例:

package com.wmwx.method;

public class Demo05 {
public static void main(String[] args) {
//调用可变参数的方法
printMax();
printMax(12, 13.6, 22.5, 18.7, 16.0);
printMax(new double[]{12, 13.6, 22.5, 18.7, 16.0});
} public static void printMax(double...numbers){
if (numbers.length == 0){
System.out.println("没有传入数据!");
return;
} double result = numbers[0];
//找出最大值
for (int i=1;i<numbers.length;i++){
if (numbers[i]>result){
result = numbers[i];
}
}
System.out.println("最大的数是"+result+"!");
}
}

递归

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

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

递归结构包括两部分:

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

示例:

package com.wmwx.method;

public class Demo06 {
public static void main(String[] args) {
System.out.println(factorial(5));
} //求阶乘
public static int factorial(int n){
if (n==1){
return 1;
}else{
return n*factorial(n-1); //递归调用
}
}
}

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. zjnu1725 COCI (类似二维树状数组模拟)

    Description The 3rd round of COCI is already here! In order to bet on predict the scores, we have as ...

  2. 牛客小白月赛28 D.位运算之谜 (位运算)

    题意:给你两个正整数\(x\)和\(y\),求两个正整数\(a\),\(b\),使得\(a+b=x\),\(a\)&\(b\)=\(y\),如果\(a\),\(b\),输出\(a\ xor \ ...

  3. Codeforces Round #646 (Div. 2) C. Game On Leaves (贪心,博弈)

    题意:给你一棵树,每次可以去掉叶节点的一条边,Ayush先开始,每回合轮流来,问谁可以第一个把\(x\)点去掉. 题解:首先如果\(x\)的入度为\(1\),就可以直接拿掉,还需要特判一下入度为\(0 ...

  4. Codeforces Round #643 (Div. 2) C. Count Triangles (数学公式)

    题意:给你四个正整数\(A,B,C,D\),且\(A\le B\le C \le D\),有\(A\le x\le B\le y\le C \le z\le D\),求最多有多少组\((x,y,z)\ ...

  5. Educational Codeforces Round 95 (Rated for Div. 2) C. Mortal Kombat Tower (DP)

    题意:你和基友两人从左往右轮流打怪兽,强怪用\(1\)表示,垃圾用\(0\)表示,但基友比较弱,打不过强怪,碰到强怪需要用一次魔法,而你很强,无论什么怪都能乱杀,基友先打,每人每次至少杀一个怪兽,最多 ...

  6. Dubbo和SpringCloud的优劣势比较--总体架构

    从整体架构上来看 二者模式接近,都需要服务提供方,注册中心,服务消费方.差异不大.详见下方: Dubbo Provider: 暴露服务的提供方,可以通过jar或者容器的方式启动服务 Consumer: ...

  7. Nginx基础 - HTTPS安全web服务

    1.HTTPS配置语法 Syntax: ssl on | off; Default: ssl off; Context: http, server Syntax: ssl_certificate fi ...

  8. haproxy 2.2代理后端https服务

    globalmaxconn 100000chroot /usr/local/haproxystats socket /var/lib/haproxy/haproxy.sock mode 600 lev ...

  9. docker理论题-02

    1.什么是namespace? 答:名称空间,作用隔离容器 2.namespace隔离有那些? 答:ipc:共享内存.消息队列 mnt:挂载点 net:网络栈 uts:域,主机名 user:用户,组 ...

  10. springboot使用RestTemplate+httpclient连接池发送http消息

    简介 RestTemplate是spring支持的一个请求http rest服务的模板对象,性质上有点像jdbcTemplate RestTemplate底层还是使用的httpclient(org.a ...