什么是方法
-
例:System.out.println(),意思就是,用System类里面的标准输出对象out中的println方法
-
Java方法是语句的集合,他们在一起执行一个功能
-
方法是解决一类问题的步骤的有序组合
-
方法包含于类或对象中
-
方法在程序中被创建,在其他地方被引用
-
-
设计方法原则:方法的本意是功能块,就是实现某个功能的语言块的集合。一个方法只完成1个功能,这样有利于我们后期的扩展
方法的定义和调用*
方法的定义
-
方法包含一个方法和一个方法体。以下是其所有部分
-
修饰符,可选的,告诉编译器如何调用该方法,定义了该方法的返回类型
-
返回值类型:方法可能会返回值returnValueType是方法返回值的数据类型。有些方法执行所需要的操作,但是没有返回值,在这种情况下,returnValueType是关键字void
-
方法名:方法的实际名称方法名和参数共同构成方法签字
-
参数类型:参数像一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数
-
形式参数:在方法被调用时用于接受外界输入的数据
-
实参:调用方法时实际传给对方的数据
-
-
方法体:方法体包含具体的语句,定义该方法的功能
-
/*修饰符 返回值类型 方法名(参数类型 参数名){ …… 方法体 …… return 返回值; }*/
方法的调用
-
调用方法:对象名.方法名(实参列表)
-
Java支持两种调用方法,根据方法是否返回值来选择
-
当方法返回一个值的时候,方法调用通常被当作一个值。例
int larger = max(30,40);
-
如果方法返回值是void,方法调用一定是一条语句
system.out.println("Hello,World!");
-
当程序执行到方法时,就会在jvm内存中开辟一个空间(栈空间)
-
当方法执行完毕或者执行到return语句,就会i将返回值返回给调用语句
-
返回调用方法的地方,同时会释放开辟的独立的空间(方法的栈空间)
-
继续执行下面的语句
-
当main方法(栈),执行完毕后,释放main方法开辟的栈空间,退出程序(main栈在最底层)
package method;
public class Demo0102 {
public static void main(String[] args) {
int max = max(10, 10);
System.out.println(max);
}
//比大小
public static int max(int n1,int n2) {
int result = 0;//定义一个变量来承载这个结果
if (n1 == n2) {//两个数是一样时
System.out.println("n1 == n2");
return 0;//终止方法
}
if (n1>n2) {//n1大于n2时
result = n1;
} else {//n1小于n2时
result = n2;
}
return result;
}
}
方法的重载*
-
重载就是在一个类中,有相同的函数名称,但形参不同的函数
-
方法重载的规则:
-
方法名称必须相同
-
参数列表必须不同(个数不同、类型不同、参数排列顺序不同)
-
方法的返回类型可以相同也可以不相同
-
仅仅返回类型不同,不足以成为方法的重载
-
-
方法名称相同时,编译器会根据调用的方法的参数个数、参数类型等去逐个匹配,已选择对应的方法,如果匹配失败,则编译器报错。
package method;
public class Demo0102 {
public static void main(String[] args) {
int max = max(10,20);//根据
System.out.println(max);
}
//比大小
public static double max(double n1,double n2) {
double result = 0;
if (n1 == n2) {
System.out.println("n1 == n2");
return 0.0;//终止方法
}
if (n1>n2) {
result = n1;
} else {
result = n2;
}
return result;
}
public static int max(int n1,int n2) {//方法名必须相同,返回值类型不同
int result = 0;
if (n1 == n2) {
System.out.println("n1 == n2");
return 0;//终止方法
}
if (n1>n2) {
result = n1;
} else {
result = n2;
}
return result;
}
public static int max(int n1,int n2,int n3) {//返回值类型和参数个数都不相同
int result = 0;
if (n1 == n2&&n2 == n3) {
System.out.println("n1 == n2 == n3");
return 0;//终止方法
}
if (n1>n2) { if(n1>n3) {
result = n1;
}else {
result = n3;
}
} else {if(n2>n3) {
result = n2;
}else {
result = n3;
}
}
return result;
}
}
命令行传参
-
有时候你希望运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main()函数实现
可变参数
-
java1.5开始,Java支持传递同类型的可变参数给一个方法
-
在方法声明中,在指定参数类型后加一个省略号(……)
-
一个方法中只能指定一个可变参数,他必须时方法的最后一个参数。任何普通的参数必须在他之前声明
递归**
-
A方法调用A方法,自己调用自己就是递归
-
利用递归可以用简单的程序来解决一些复杂的问题。他通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在于有限的语句来定义对象的无限集合
-
递归结构包括两个部分
-
递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
-
递归体:什么时候需要调用自身方法
-