目录
调用方法两种方式
new一个类
package method;
public class keBianCanShu {
public static void main(String[] args) {
keBianCanShu keBianCanShu = new keBianCanShu();//在这里new一个类
keBianCanShu.test(1);
}
public void test(int ...i){
System.out.println(i[0]);
}
}
static
package method;
public class keBianCanShu {
public static void main(String[] args) {
test(1);
}
public static void test(int ...i){ //在方法中加入static就不需要new类
System.out.println(i[0]); // 取出第0个数字
}
}
方法定义
JAVA的方法类似其他语言的函数,用来完成特定功能的代码片段
定义方法需要的语法
方法包含一个方法头和方法体
方法的组成部分如下:
修饰符 返回值类型 方法名(参数类型 参数名);{
...
方法体
...
return 返回值;
}
//修饰符(可选)
//返回值类型(int double),没有返回值用void代表空
//参数(可选)包含实参,形参
实参和形参
实参:实际调用中传递给它的参数(一般在调用部分)
形参:用来定义作用的(在自定义方法部分)
方法重载
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
举例:
public static int max(int num1,int num2,int num3)
public static int max(int num1,int num2)
public static int max(double num1,double num2)
这三个自定义方法包含相同的函数名,但是参数类型不同
规则:
方法名称必须相同,参数必须不同(个数,类型,参数排列顺序)
方法的返回类型可以相同或者不同
仅仅返回类型不同不足以成为重载
命令行传参
有时候希望运行程序的时候再给他传递消息,要靠传递命令行参数给main()函数
可变参数(不定项参数)
从JDK1.5开始,JAVA支持传递同类型的可变参数给一个方法
在方法声明中,在制定对的参数类型后加一个省略号
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
举例
public class keBianCanShu {
public static void main(String[] args) {
keBianCanShu keBianCanShu = new keBianCanShu();
keBianCanShu.test(1,2,3,4,5,6,7,8);
}
public void test(int ...i){ //int ...i必须放在最后,可以在int ...i之前加其他参数不可以在之后加
System.out.println(i[0]); // 取出第0个数字
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
System.out.println(i[5]);
}
}
递归
正常调用:A方法调用B方法,我们很容易理解。
递归就是:A方法调用A方法,自己调用自己。
很多人认为调用自己是这样使用:
package method;
public class Demo01 {
public static void main(String[] args) {
Demo01 test = new Demo01();
test.test();
}
public void test(){
test();
}
}
但是这样的方式会导致内存溢出
利用递归可以用简单的程序来接觉一些复杂的问题。它通常把一个大型的复杂问题层层转化为一个与原问题相似的规模较小的问题,递归只需少量的程序就可描述出解题过程中所需的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
递归结构包括两个部分:
递归头:什么时候不调用自身方法,如果没有头,将进入死循环。
递归体:什么时候需要调用自身方法。
举例:计算阶乘
package method;
public class Demo02 {
public static void main(String[] args) {
System.out.println(f(1));
}
public static int f(int n){
if (n==1){
return 1;
}
else {
return n*f(n-1);
}
}
}
n=5
n-1=4
f(5)=5*f(4)
f(4)=4*f(3)
f(3)=3*f(2)
f(2)=2*f(1)
n=1
f(2)=2*1
f(3)=3*2
...
f(5)=5*4*3*2*1
f(1)递归头
边界条件:边界
前阶段:
返回阶段:n*(n-1)
java使用栈机制:简单来讲内存是一个罐子,每一个方法在上面压一层,最底下一层是main方法,每调用一次压一层,方法结束后栈里面就空了。
能不用递归就不用递归,递归是为了学习思想。