1.方法的定义
-
方法是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。
-
java的方法类似于其他语言的函数,是一段用来完成特定功能的代码段,一般情况下,定义一个方法包含以下语法:
-
**方法包含一个方法头和一个方法体。**下面是一个方法的素有部分:
-
修饰符:修饰符是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
-
返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。这时,returnValueType是关键字void。
-
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
-
-
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型,顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 形式参数(形参):方法定义中的参数。
- 实际参数(实参):方法调用中的参数。
- 对于基本数据类型,形式参数的改变不影响实际参数的值。
- 对于引用数据类型,形式参数的改变影响实际参数的值。例如数组
public class MethodDemo{ public static void main(String args[]){ //直接传递常量 getMax(10);//10为实参 //定义变量传递 int number = 10; getMax(number);//number为实参 } //接收一个数判断是否为偶数 public static void getMax(int number){//number为形参 if(number % 2 == 0){ System.out.println(true); } else { System.out.println(false); } } }
-
方法体:方法体包含具体的语句,定义该方法的功能。
-
语法:
修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; }
package com.liu.method;
/**
* @author 23862
*/
public class Demo01 {
//mian方法
public static void main(String[] args) {
//实际参数,实际调用传递给他的参数
int sum = add(1,2);//调用add方法并将返回值赋值给变量sum
System.out.println(sum);
//test();
}
//加法
//形式参数,用来定义作用的
public static int add(int a, int b){
return a+b;
}
//输出一串数字
public static void test(){
for (int i = 0; i <= 1000; i++) {
if (i%5==0){
System.out.print(i+"\t");
}
if(i%15==0){
System.out.println();//空串代表换行
//System.out.print("\n");换行
}
}
}
}
2.方法调用
- 调用方法:对象名.方法名(实参列表)
- Java支持两种调用方法的方式,根据方法是否返回值来选择。
- 当方法返回一个值的时候,方法调用通常被当作一个值。例如:
int larger = max(10,20);
- 如果方法返回值是void,方法调用一定是一条语句。
System.out.println("haha");
package com.liu.method;
/**
* @author 23862
*/
public class Demo02 {
public static void main(String[] args) {
//调用方法max并赋值给max
int max = max(20,20);
System.out.println(max);
}
//比大小
public static int max(int num1,int num2){
int result = 0;
if (num1>num2){
result = num1;
}else if(num2>num1){
result = num2;
}else{
System.out.println("两数相等");
return 0; //终止方法
}
return result;
}
}
3.方法的重载
-
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
-
方法重载的规则:
- 方法名称必须相同
- 参数列表必须不同(个数不同,或类型不同,参数排列顺序不同等)
- 方法的返回类型可以相同也可以不相同
- 仅仅返回类型不同不足以称为方法的重载
- 必须在同一个类中
-
方法名称相同时,编译器会根据调用方法的参数个数,参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
package com.liu.method;
/**
* @author 23862
*/
public class Demo02 {
public static void main(String[] args) {
//调用方法max并赋值给max
int max = max(20,20);
System.out.println(max);
}
//比大小
public static int max(int num1,int num2){
int result = 0;
if (num1>num2){
result = num1;
}else if(num2>num1){
result = num2;
}else{
System.out.println("两数相等");
return 0; //终止方法
}
return result;
}
//比大小
public static double max(double num1,double num2){
double result = 0;
if (num1>num2){
result = num1;
}else if(num2>num1){
result = num2;
}else{
System.out.println("两数相等");
return 0; //终止方法
}
return result;
}
}
4.命令行传参
- 有时候需要运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main( )函数实现。
package com.liu.method;
/**
* @author 23862
*/
public class Demo03 {
public static void main(String[] args) {
for (int i = 0; i<args.length; i++){
System.out.println("args["+ i + "]:" + args[i]);
}
}
}
-
可点击idea下方的Terminal打开命令行执行传参操作。
-
也可打开Demo03文件本地位置进入cmd,输入javac Demo03.java进行编译,再进入src目录下输入java com.liu.method.Demo03 this is liu(java + 文件路径 + 传入的参数)即可完成传参。
5.可变参数
- 在方法声明中,在指定参数类型后加一个省略号(…)。
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数必须在他之前声明。
package com.liu.method;
/**
* @author 23862
*/
public class Demo04 {
public static void main(String[] args) {
//调用可变参数的方法
printMax(34,3,3,2,56.5);
printMax(new double[]{1 ,2 ,3});
}
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);
}
}
6.递归
- 递归就是A方法调用A方法,自己调用自己。
- 递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
错误的使用递归:
package com.liu.method;
/**
* @author 23862
*/
public class Demo05 {
public static void main(String[] args) {
Demo05 test = new Demo05();
test.test();
}
public void test(){
test();
}
}
程序会陷入死循环,毫无意义。
正确方式:
package com.liu.method;
/**
* @author 23862
*/
public class Demo06 {
public static void main(String[] args) {
System.out.println(f(5));
}
//用递归方式计算阶乘
//2 2*f(1)
//3 3*f(2)*f(1)
public static int f(int n){
//只有输入n的值不为1就会调用自己
if(n==1){
return 1;
}else{
return n*f(n-1);
}
}
}
7.带返回值的方法
- 格式:
public static boolean isEvenNumber(int number){
return true;
}
-
方法定义时return后面的返回值与方法定义上的数据类型要匹配
-
调用方式:
数据类型 变量名 = 方法名(参数);
boolean flag = isEvenNumber(10);
- 注意:方法的返回值通常会使用变量接收,否则该返回值将无意义
8.方法的注意事项
-
方法是平级关系不能嵌套定义,不能在一个方法中定义另一个方法。
-
void表示无返回值,可以省略return,也可以单独书写return,后面不加数据。
-
方法的内容不能写在return关键字之后。
-
方法的通用格式:
public static 返回值类型 方法名(参数){ 方法体; return 数据; }
-
定义方法之前需要明确其返回值类型和参数。
-
方法调用时,void类型方法直接调用,非void型最好用变量接收调用。